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 / foxypreviewer.app (.txt) < prev    next >
MS Visual FoxPro App  |  2013-03-13  |  4MB  |  74,366 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 _1DS143BJE1065463466
  25.  COMMENT RESERVED            
  26.  WINDOWS _2FE0JKNKY1087704109
  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.hf
  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.hf
  74. hpdf_consts.hN
  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. pdfasimagelistener
  590. Ipdfhandle Handle for the Pdf Document To Generate
  591. pageheight Height of The Report Pages
  592. pagewidth Width of Report Pages
  593. encryptdocument Property to Know if the Document Will Be Encrypted
  594. oprogress Property to Store Progress Bar
  595. oregistry
  596. mergedocument
  597. mergedocumentname
  598. opage Property to Store the Page Object
  599. oimagescollection Collection of images files used in the report
  600. cpdfauthor Pdf Author
  601. cuserpassword User Pasword of the Document
  602. lencryptdocument
  603. nencryptionlevel Accepts a Value of 0 Or 1, 0 = Standard 40-bit encryption. 1 = Advanced 128-bit encryption.
  604. npageheight
  605. lcanedit
  606. lcancopy
  607. lcanaddnotes
  608. lcanprint If .T. User will be allowed to print the document, if 0 he won't
  609. lopenviewer If .T. Adobe Reader will be opened
  610. cmasterpassword Master Password of the Pdf Document
  611. ctargetfilename
  612. cpdfcreator Pdf Creator
  613. cpdfkeywords Pdf Keywords
  614. cpdfsubject Pdf Subject
  615. cpdftitle Pdf Title
  616. waitfornextreport
  617. npgcounter
  618. npagemode
  619. lextended
  620. ldefaultmode
  621. npagewidth
  622. lobjtypemode
  623. _stat
  624. lshowerrors
  625. ncurrentpage
  626. *addblankpage 
  627. *cleardlls 
  628. *encryptpdf Method to Encrypt the Pdf Document
  629. *startpdfdocument Method to start pdf generation
  630. *writepdfinformation Writes Information About the File
  631. *declaredll Method to Start Dll Declarations
  632. *makepdf 
  633. *outputfromdata 
  634. *updateproperties 
  635. *_stat_assign 
  636. *_errorinfo 
  637. LNWIDTH
  638. LNHEIGHT
  639. LDEFAULTMODE
  640. GETPAGEWIDTH
  641. GETPAGEHEIGHT
  642. NPAGEWIDTH
  643. NPAGEHEIGHT
  644. OPAGE
  645. HPDF_ADDPAGE    
  646. PDFHANDLE
  647. _STAT
  648. HPDF_PAGE_SETWIDTH
  649. HPDF_PAGE_SETHEIGHT
  650. HPDF_New,HPDF_Free
  651. HPDF_SaveToFile
  652. HPDF_SetPageMode
  653. HPDF_AddPage
  654. HPDF_Page_SetWidth
  655. HPDF_Page_SetHeight
  656. HPDF_LoadJpegImageFromFile
  657. HPDF_SetInfoAttr
  658. HPDF_SetPassword
  659. HPDF_SetPermission
  660. HPDF_SetEncryptionMode
  661. HPDF_SetCompressionMode
  662. HPDF_Page_Concat
  663. HPDF_Page_DrawImage
  664. HPDF_LoadPngImageFromFile
  665. HPDF_GetError
  666. HPDF_ResetError
  667. INTEGER
  668. LENCRYPTDOCUMENT
  669. CMASTERPASSWORD
  670. CUSERPASSWORD
  671. _STAT
  672. HPDF_SETPASSWORD    
  673. PDFHANDLE
  674. LNPERMIT    
  675. LCANPRINT
  676. LCANEDIT
  677. LCANCOPY
  678. LCANADDNOTES
  679. HPDF_SETPERMISSION
  680. NENCRIPTIONLEVEL
  681. HPDF_SETENCRYPTIONMODE
  682. Could not load the library LIBHPDF.DLL .C
  683. 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.
  684. Error
  685. DECLAREDLL    
  686. PDFHANDLE
  687. HPDF_NEW
  688. CANCELREPORT
  689. _STAT
  690. HPDF_SETCOMPRESSIONMODE
  691. HPDF_SETPAGEMODE    
  692. NPAGEMODE
  693. WRITEPDFINFORMATION
  694. ENCRYPTPDF
  695. ADDBLANKPAGE    
  696. CPDFAUTHOR
  697. _STAT
  698. HPDF_SETINFOATTR    
  699. PDFHANDLE    
  700. CPDFTITLE
  701. CPDFSUBJECT
  702. CPDFKEYWORDS
  703. CPDFCREATOR
  704. HPDF_New
  705. libhpdf.dll
  706. HPDF_Free
  707. libhpdf.dll
  708. HPDF_SaveToFile
  709. libhpdf.dll
  710. HPDF_SetPageMode
  711. libhpdf.dll
  712. HPDF_AddPage
  713. libhpdf.dll
  714. HPDF_Page_SetWidth
  715. libhpdf.dll
  716. HPDF_Page_SetHeight
  717. libhpdf.dll
  718. HPDF_LoadJpegImageFromFile
  719. libhpdf.dll
  720. HPDF_LoadPngImageFromFile
  721. libhpdf.dll
  722. HPDF_SetInfoAttr
  723. libhpdf.dll
  724. HPDF_SetPassword
  725. libhpdf.dll
  726. HPDF_SetPermission
  727. libhpdf.dll
  728. HPDF_SetEncryptionMode
  729. libhpdf.dll
  730. HPDF_SetCompressionMode
  731. libhpdf.dll
  732. HPDF_Page_Concat
  733. libhpdf.dll
  734. HPDF_Page_DrawImage
  735. libhpdf.dll
  736. HPDF_GetError
  737. libhpdf.dll
  738. HPDF_ResetError
  739. libhpdf.dll
  740. HPDF_NEW
  741. LIBHPDF
  742. HPDF_FREE
  743. HPDF_SAVETOFILE
  744. HPDF_SETPAGEMODE
  745. HPDF_ADDPAGE
  746. HPDF_PAGE_SETWIDTH
  747. HPDF_PAGE_SETHEIGHT
  748. HPDF_LOADJPEGIMAGEFROMFILE
  749. HPDF_LOADPNGIMAGEFROMFILE
  750. HPDF_SETINFOATTR
  751. HPDF_SETPASSWORD
  752. HPDF_SETPERMISSION
  753. HPDF_SETENCRYPTIONMODE
  754. HPDF_SETCOMPRESSIONMODE
  755. HPDF_PAGE_CONCAT
  756. HPDF_PAGE_DRAWIMAGE
  757. HPDF_GETERROR
  758. HPDF_RESETERROR&
  759. REPORTLISTENER
  760. Report Listener could not be accessed
  761. %  - 
  762. TEMP5
  763. Internal error loading the page image file from the report.
  764. Error
  765. 100%  - CCC
  766. TOLISTENER
  767. TNWIDTH
  768. TNHEIGHT
  769. LLSHOWTHERM
  770. THIS    
  771. QUIETMODE
  772. LOBJTYPEMODE
  773. LNSECS
  774. DOFOXYTHERM    
  775. _GOHELPER
  776. _INITSTATUSTEXT
  777. LDEFAULTMODE
  778. NPAGEWIDTH
  779. NPAGEHEIGHT
  780. BEFOREREPORT
  781. STARTPDFDOCUMENT
  782. LNPAGECOUNT
  783. LNFILETYPE
  784. LNDEVICETYPE
  785. LNPAGENO
  786. LCFILE
  787. LNHANDLE    
  788. LNPERCENT
  789. LNLASTPERCENT
  790. LNDELAY    
  791. PAGETOTAL
  792. _SECONDSTEXT
  793. _RUNSTATUSTEXT
  794. NCURRENTPAGE
  795. ADDBLANKPAGE
  796. OUTPUTPAGE
  797. HPDF_LOADPNGIMAGEFROMFILE    
  798. PDFHANDLE
  799. _STAT
  800. HPDF_PAGE_DRAWIMAGE
  801. OPAGE
  802. OIMAGESCOLLECTION
  803. AFTERREPORT
  804. UNLOADREPORT]
  805. LOBJTYPEMODE
  806. OFOXYPREVIEWER
  807. COMMANDCLAUSES
  808. LOPENVIEWER
  809. PREVIEW
  810. TOFILE
  811. CTARGETFILENAME    
  812. CDESTFILE
  813. LCDESTFILE
  814. COUTPUTPATH
  815. LCFILE
  816. _REPORTLISTENER
  817. CANCELREPORT    
  818. QUIETMODE
  819. LQUIETMODE    
  820. LCANPRINT
  821. LPDFCANPRINT
  822. LCANEDIT
  823. LPDFCANEDIT
  824. LCANCOPY
  825. LPDFCANCOPY
  826. LCANADDNOTES
  827. LPDFCANADDNOTES
  828. LENCRYPTDOCUMENT
  829. LPDFENCRYPTDOCUMENT
  830. CMASTERPASSWORD
  831. CPDFMASTERPASSWORD
  832. CUSERPASSWORD
  833. CPDFUSERPASSWORD
  834. CPDFAUTHOR    
  835. CPDFTITLE
  836. CPDFSUBJECT
  837. CPDFKEYWORDS
  838. CPDFCREATOR
  839. LNPGMODE
  840. NPDFPAGEMODE    
  841. NPAGEMODE
  842. LDEFAULTMODEM
  843. PDFx error in CC
  844. Error code : 
  845. Description: 
  846. Page: 
  847. Press 'Retry' to debug the application.
  848. Error
  849. PDFx error in CC
  850. Error code  : 
  851. Description : 
  852. Object: 
  853. Error
  854. TNSTATUS
  855. _STAT
  856. LNHPDF_ERR
  857. LCHEX
  858. HPDF_GETERROR    
  859. PDFHANDLE
  860. HPDF_RESETERROR
  861. LSHOWERRORS    
  862. STARTMODE
  863. LNOPTION
  864. _ERRORINFO
  865. NCURRENTPAGE
  866. COBJECTTORENDERC
  867. HPDF_ARRAY_COUNT_ERR                      
  868. HPDF_ARRAY_ITEM_NOT_FOUND                 
  869. HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           
  870. HPDF_BINARY_LENGTH_ERR                    
  871. HPDF_CANNOT_GET_PALLET                    
  872. HPDF_DICT_COUNT_ERR                       
  873. HPDF_DICT_ITEM_NOT_FOUND                  
  874. HPDF_DICT_ITEM_UNEXPECTED_TYPE            
  875. HPDF_DICT_STREAM_LENGTH_NOT_FOUND         
  876. HPDF_DOC_ENCRYPTDICT_NOT_FOUND            
  877. HPDF_DOC_INVALID_OBJECT                   
  878. HPDF_DUPLICATE_REGISTRATION               
  879. HPDF_EXCEED_JWW_CODE_NUM_LIMIT            
  880. HPDF_ENCRYPT_INVALID_PASSWORD             
  881. HPDF_ERR_UNKNOWN_CLASS                    
  882. HPDF_EXCEED_GSTATE_LIMIT                  
  883. HPDF_FAILD_TO_ALLOC_MEM                   
  884. HPDF_FILE_IO_ERROR                        
  885. HPDF_FILE_OPEN_ERROR                      
  886. HPDF_FONT_EXISTS                          
  887. HPDF_FONT_INVALID_WIDTHS_TABLE            
  888. HPDF_INVALID_AFM_HEADER                   
  889. HPDF_INVALID_ANNOTATION                   
  890. HPDF_INVALID_BIT_PER_COMPONENT            
  891. HPDF_INVALID_CHAR_MATRICS_DATA            
  892. HPDF_INVALID_COLOR_SPACE                  
  893. HPDF_INVALID_COMPRESSION_MODE             
  894. HPDF_INVALID_DATE_TIME                    
  895. HPDF_INVALID_DESTINATION                  
  896. HPDF_INVALID_DOCUMENT                     
  897. HPDF_INVALID_DOCUMENT_STATE               
  898. HPDF_INVALID_ENCODER                      
  899. HPDF_INVALID_ENCODER_TYPE                 
  900. HPDF_INVALID_ENCODING_NAME                
  901. HPDF_INVALID_ENCRYPT_KEY_LEN              
  902. HPDF_INVALID_FONTDEF_DATA                 
  903. HPDF_INVALID_FONTDEF_TYPE                 
  904. HPDF_INVALID_FONT_NAME                    
  905. HPDF_INVALID_IMAGE                        
  906. HPDF_INVALID_JPEG_DATA                    
  907. HPDF_INVALID_N_DATA                       
  908. HPDF_INVALID_OBJECT                       
  909. HPDF_INVALID_OBJ_ID                       
  910. HPDF_INVALID_OPERATION                    
  911. HPDF_INVALID_OUTLINE                      
  912. HPDF_INVALID_PAGE                         
  913. HPDF_INVALID_PAGES                        
  914. HPDF_INVALID_PARAMETER                    
  915. HPDF_INVALID_PNG_IMAGE                    
  916. HPDF_INVALID_STREAM                       
  917. HPDF_MISSING_FILE_NAME_ENTRY              
  918. HPDF_INVALID_TTC_FILE                     
  919. HPDF_INVALID_TTC_INDEX                    
  920. HPDF_INVALID_WX_DATA                      
  921. HPDF_ITEM_NOT_FOUND                       
  922. HPDF_LIBPNG_ERROR                         
  923. HPDF_NAME_INVALID_VALUE                   
  924. HPDF_NAME_OUT_OF_RANGE                    
  925. HPDF_PAGE_INVALID_PARAM_COUNT             
  926. HPDF_PAGES_MISSING_KIDS_ENTRY             
  927. HPDF_PAGE_CANNOT_FIND_OBJECT              
  928. HPDF_PAGE_CANNOT_GET_ROOT_PAGES           
  929. HPDF_PAGE_CANNOT_RESTORE_GSTATE           
  930. HPDF_PAGE_CANNOT_SET_PARENT               
  931. HPDF_PAGE_FONT_NOT_FOUND                  
  932. HPDF_PAGE_INVALID_FONT                    
  933. HPDF_PAGE_INVALID_FONT_SIZE               
  934. HPDF_PAGE_INVALID_GMODE                   
  935. HPDF_PAGE_INVALID_INDEX                   
  936. HPDF_PAGE_INVALID_ROTATE_VALUE            
  937. HPDF_PAGE_INVALID_SIZE                    
  938. HPDF_PAGE_INVALID_XOBJECT                 
  939. HPDF_PAGE_OUT_OF_RANGE                    
  940. HPDF_REAL_OUT_OF_RANGE                    
  941. HPDF_STREAM_EOF                           
  942. HPDF_STREAM_READLN_CONTINUE               
  943. HPDF_STRING_OUT_OF_RANGE                  
  944. HPDF_THIS_FUNC_WAS_SKIPPED                
  945. HPDF_TTF_CANNOT_EMBEDDING_FONT            
  946. HPDF_TTF_INVALID_CMAP                     
  947. HPDF_TTF_INVALID_FOMAT                    
  948. HPDF_TTF_MISSING_TABLE                    
  949. HPDF_UNSUPPORTED_FONT_TYPE                
  950. HPDF_UNSUPPORTED_FUNC                     
  951. HPDF_UNSUPPORTED_JPEG_FORMAT              
  952. HPDF_UNSUPPORTED_TYPE1_FONT               
  953. HPDF_XREF_COUNT_ERR                       
  954. HPDF_ZLIB_ERROR                           
  955. HPDF_INVALID_PAGE_INDEX                   
  956. HPDF_INVALID_URI                          
  957. HPDF_PAGE_LAYOUT_OUT_OF_RANGE             
  958. HPDF_PAGE_MODE_OUT_OF_RANGE               
  959. HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          
  960. HPDF_ANNOT_INVALID_ICON                   
  961. HPDF_ANNOT_INVALID_BORDER_STYLE           
  962. HPDF_PAGE_INVALID_DIRECTION               
  963. HPDF_INVALID_FONT                         
  964. HPDF_PAGE_INSUFFICIENT_SPACE              
  965. HPDF_PAGE_INVALID_DISPLAY_TIME            
  966. HPDF_PAGE_INVALID_TRANSITION_TIME         
  967. HPDF_INVALID_PAGE_SLIDESHOW_TYPE          
  968. HPDF_EXT_GSTATE_OUT_OF_RANGE              
  969. HPDF_INVALID_EXT_GSTATE                   
  970. HPDF_EXT_GSTATE_READ_ONLY                 
  971. Unknown Error
  972. TNSTATUS
  973. UPDATEPROPERTIES 
  974. Collection
  975. OIMAGESCOLLECTION
  976. STRING
  977. LDEFAULTMODE
  978. WAITFORNEXTREPORT
  979. OIMAGESCOLLECTION
  980. LCITEM
  981. LOEXC
  982. LDEFAULTMODE
  983. LOBJTYPEMODE
  984. OUTPUTFROMDATA
  985. GETPAGEWIDTH
  986. GETPAGEHEIGHT
  987. WAITFORNEXTREPORT
  988. OFOXYPREVIEWER    
  989. CDESTFILE
  990. CTARGETFILENAME
  991. LCFILE
  992. _STAT    
  993. HPDF_FREE    
  994. PDFHANDLE
  995. HPDF_SAVETOFILE
  996. LOPENVIEWER    
  997. SHELLEXEC
  998. NPGCOUNTERn
  999. INTEGER
  1000. STRING
  1001. TEMP5
  1002. NPAGENO
  1003. EDEVICE
  1004. NDEVICETYPE
  1005. NLEFT
  1006. NWIDTH
  1007. NHEIGHT    
  1008. NCLIPLEFT
  1009. NCLIPTOP
  1010. NCLIPWIDTH
  1011. NCLIPHEIGHT
  1012. LNHANDLE
  1013. LCFILE
  1014. STARTPDFDOCUMENT
  1015. ADDBLANKPAGE
  1016. OUTPUTPAGE
  1017. HPDF_LOADPNGIMAGEFROMFILE    
  1018. PDFHANDLE
  1019. _STAT
  1020. HPDF_PAGE_DRAWIMAGE
  1021. OPAGE
  1022. GETPAGEWIDTH
  1023. GETPAGEHEIGHT
  1024. OIMAGESCOLLECTION
  1025. THIS    
  1026. CLEARDLLS
  1027. addblankpage,
  1028. cleardlls
  1029. encryptpdf0
  1030. startpdfdocument
  1031. writepdfinformation
  1032. declaredll@    
  1033. outputfromdata
  1034. updateproperties
  1035. _stat_assignP
  1036. _errorinfoC
  1037. LoadReport
  1038. BeforeReport
  1039. UnloadReport
  1040. AfterReport
  1041. OutputPage
  1042. Destroy,?
  1043. reportlistener
  1044. pr_reportlistener.vcx
  1045. tnHKeyb
  1046. RegQueryValueEx
  1047. Win32APIQ
  1048. RegQueryString
  1049. TNHKEY
  1050. TCSUBKEY
  1051. TCENTRY
  1052. LNREGHANDLE
  1053. LNRESULT
  1054. LNSIZE
  1055. LCDATABUFFER
  1056. TNTYPE
  1057. REGOPENKEY
  1058. REGQUERYVALUEEX
  1059. WIN32API
  1060. REGQUERYSTRING
  1061. LNTYPE
  1062. REGCLOSEKEYI
  1063. tnHKeyb
  1064. RegQueryValueEx
  1065. Win32APIQ
  1066. RegQueryInt
  1067. TNHKEY
  1068. TCSUBKEY
  1069. TCENTRY
  1070. LNREGHANDLE
  1071. LNRESULT
  1072. LNSIZE
  1073. LCDATABUFFER
  1074. TNTYPE
  1075. REGOPENKEY
  1076. REGQUERYVALUEEX
  1077. WIN32API
  1078. REGQUERYINT
  1079. LNDATABUFFER
  1080. REGCLOSEKEY
  1081. tnHKeyb
  1082. RegSetValueEx
  1083. Win32API
  1084. TNHKEY
  1085. TCSUBKEY
  1086. TCENTRY
  1087. TCVALUE
  1088. TLCREATE
  1089. LNREGHANDLE
  1090. LNRESULT
  1091. LNSIZE
  1092. LCDATABUFFER
  1093. TNTYPE
  1094. REGOPENKEY
  1095. REGCREATEKEY
  1096. REGSETVALUEEX
  1097. WIN32API
  1098. REGDELETEVALUE
  1099. REGCLOSEKEY
  1100. tnHKeyb
  1101. RegSetValueEx
  1102. Win32API
  1103. TNHKEY
  1104. TCSUBKEY
  1105. TCENTRY
  1106. TNVALUE
  1107. TLCREATE
  1108. LNREGHANDLE
  1109. LNRESULT
  1110. LNSIZE
  1111. LCDATABUFFER
  1112. TNTYPE
  1113. REGOPENKEY
  1114. REGCREATEKEY
  1115. REGSETVALUEEX
  1116. WIN32API
  1117. REGDELETEVALUE
  1118. REGCLOSEKEY
  1119. tnHKeyb
  1120. tnLengthb
  1121. RegSetValueEx
  1122. Win32API
  1123. TNHKEY
  1124. TCSUBKEY
  1125. TCENTRY
  1126. TCVALUE
  1127. TNLENGTH
  1128. TLCREATE
  1129. LNREGHANDLE
  1130. LNRESULT
  1131. LNSIZE
  1132. LCDATABUFFER
  1133. TNTYPE
  1134. REGOPENKEY
  1135. REGCREATEKEY
  1136. REGSETVALUEEX
  1137. WIN32API
  1138. REGDELETEVALUE
  1139. REGCLOSEKEY
  1140. tnHKeyb
  1141. TNHKEY
  1142. TCSUBKEY
  1143. LNRESULT
  1144. LNREGHANDLE
  1145. REGOPENKEY
  1146. REGDELETEKEY
  1147. REGCLOSEKEY    
  1148. RegEnumKey
  1149. WIN32API
  1150. TNHKEY
  1151. TCSUBKEY
  1152. TNINDEX
  1153. LCSUBKEY
  1154. LCRETURN
  1155. LNRESULT
  1156. LCDATABUFFER
  1157. LNREGHANDLE
  1158. REGOPENKEY
  1159. REGENUMKEY
  1160. WIN32API
  1161. LNSIZE
  1162. LNRETURN
  1163. REGCLOSEKEYp
  1164. tnTypeb
  1165. RegEnumValue
  1166. Win32API
  1167. TNHKEY
  1168. TCSUBKEY
  1169. TNINDEX
  1170. TNTYPE
  1171. LCSUBKEY
  1172. LCRETURN
  1173. LNRESULT
  1174. LCDATABUFFER
  1175. LNREGHANDLE
  1176. REGOPENKEY
  1177. REGENUMVALUE
  1178. WIN32API
  1179. TCVALUE
  1180. LNSIZE    
  1181. LNVALSIZE
  1182. LNRETURN
  1183. REGCLOSEKEY
  1184. TAVALUES
  1185. TNHKEY
  1186. TCSUBKEY
  1187. LCKEY
  1188. LNTYPE
  1189. THIS    
  1190. ENUMVALUE
  1191. LCVALUE    
  1192. OREGISTRY
  1193. READREGISTRYSTRING
  1194. LNVALUE
  1195. READREGISTRYINT
  1196. TAKEYS
  1197. TNHKEY
  1198. TCSUBKEY
  1199. LCKEY
  1200. LNTYPE
  1201. ENUMKEY
  1202. SOFTWARE\West Wind Technologies
  1203. SOFTWARE\West Wind Technologies\WebConnection
  1204. CurrentVersion
  1205. 1.45a
  1206. SOFTWARE\West Wind Technologies\WebConnection
  1207. Timeout
  1208. SOFTWARE\West Wind Technologies\WebConnection
  1209. CurrentVersion
  1210. SOFTWARE\West Wind Technologies\WebConnection
  1211. Timeout
  1212. OREGISTRY
  1213. WRITEREGISTRYSTRING
  1214. WRITEREGISTRYINT
  1215. READREGISTRYSTRING
  1216. READREGISTRYINT
  1217. RegOpenKey
  1218. Win32API
  1219. RegCreateKey
  1220. Win32API
  1221. RegCloseKey
  1222. Win32API
  1223. RegDeleteKey
  1224. Win32API
  1225. RegDeleteValue
  1226. Win32API
  1227. REGOPENKEY
  1228. WIN32API
  1229. REGCREATEKEY
  1230. REGCLOSEKEY
  1231. REGDELETEKEY
  1232. REGDELETEVALUE
  1233. readregistrystring,
  1234. readregistryintT
  1235. writeregistrystring@
  1236. writeregistryint
  1237. writeregistrybinary
  1238. deleteregistrykey
  1239. enumregistrykey
  1240. enumvalueg
  1241. getenumvalues
  1242. getenumkeys
  1243. examples
  1244. `)PROCEDURE addblankpage
  1245. WITH This
  1246.     LOCAL lnWidth, lnHeight
  1247.     IF This.lDefaultMode 
  1248.         lnWidth  = .GetPageWidth()
  1249.         lnHeight = .GetPageHeight()
  1250.     ELSE
  1251.         lnWidth  = This.nPageWidth
  1252.         lnHeight = This.nPageHeight
  1253.     ENDIF
  1254.     .oPage=HPDF_AddPage(.pdfHandle) &&Add a New Page
  1255.     This._Stat = HPDF_Page_SetWidth(.oPage, (lnWidth/960)*72) &&Establish the Width of the page
  1256.     This._Stat = HPDF_Page_SetHeight(.oPage, (lnHeight/960)*72) &&Establish the Height of the page
  1257. ENDWITH
  1258. ENDPROC
  1259. PROCEDURE cleardlls
  1260. Clear Dlls "HPDF_New,HPDF_Free","HPDF_SaveToFile","HPDF_SetPageMode","HPDF_AddPage","HPDF_Page_SetWidth","HPDF_Page_SetHeight",;
  1261. "HPDF_LoadJpegImageFromFile","HPDF_SetInfoAttr","HPDF_SetPassword","HPDF_SetPermission","HPDF_SetEncryptionMode",;
  1262. "HPDF_SetCompressionMode","HPDF_Page_Concat","HPDF_Page_DrawImage","HPDF_LoadPngImageFromFile", "HPDF_GetError", "HPDF_ResetError"
  1263. ENDPROC
  1264. PROCEDURE encryptpdf
  1265. With This
  1266.     If .lEncryptDocument Then &&Protect the document with password
  1267.         If !Empty(.cMasterPassword) Then
  1268.             If .cMasterPassword!=.cUserPassword Then &&User Password and Master Password can't be the same
  1269.                 This._Stat = HPDF_SetPassword(.pdfHandle, .cMasterPassword, .cUserPassword)
  1270.                 Local lnPermit As Integer
  1271.                 lnPermit=0
  1272.                 &&Establish PDF files permissions
  1273.                 If .lCanPrint Then
  1274.                     lnPermit = lnPermit + HPDF_ENABLE_PRINT
  1275.                 EndIf
  1276.                 If .lCanEdit Then
  1277.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT_ALL
  1278.                 EndIf
  1279.                 If .lCanCopy Then
  1280.                     lnPermit = lnPermit + HPDF_ENABLE_COPY
  1281.                 EndIf
  1282.                 If .lCanAddNotes Then
  1283.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT
  1284.                 EndIf
  1285.                 This._Stat = HPDF_SetPermission(This.pdfHandle, lnPermit)
  1286.                 If .nEncriptionLevel!=5 Then
  1287.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R3, .nEncriptionLevel)
  1288.                 Else
  1289.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R2, .nEncriptionLevel)
  1290.                 EndIf
  1291.             EndIf
  1292.         EndIf
  1293.     EndIf
  1294. EndWith
  1295. ENDPROC
  1296. PROCEDURE startpdfdocument
  1297. This.DeclareDll()
  1298. With This
  1299.     .pdfHandle=HPDF_New(0, 0) &&Create a New Document
  1300.     IF .pdfHandle = 0
  1301.         * Check if the library HPDF.DLL is in the disk
  1302.         MESSAGEBOX("Could not load the library LIBHPDF.DLL ." + CHR(13) + ;
  1303.             "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")
  1304.         This.CancelReport()
  1305.         RETURN .F.
  1306.     ENDIF
  1307.     This._Stat = HPDF_SetCompressionMode(.pdfHandle, HPDF_COMP_ALL) &&Set Document Compression Method
  1308.     * KHentschel 2010-06-15
  1309.     * Added "nPageMode" property: how Document should be displayed HPDF_PAGE_MODE_USE_OUTLINE
  1310.     * HPDF_SetPageMode(.pdfHandle, HPDF_PAGE_MODE_USE_OUTLINE) &&Set the how Document should be displayed
  1311.     * Available possibilities:
  1312.     * #define    HPDF_PAGE_MODE_USE_NONE        0
  1313.     * #define    HPDF_PAGE_MODE_USE_OUTLINE        1
  1314.     * #define    HPDF_PAGE_MODE_USE_THUMBS        2
  1315.     * #define    HPDF_PAGE_MODE_FULL_SCREEN        3
  1316.     This._Stat = HPDF_SetPageMode(.pdfHandle, .nPageMode)
  1317.     .WritePdfInformation() &&Stablish PDF File Information
  1318.     .EncryptPdf()
  1319.     .AddBlankPage()
  1320. EndWith
  1321. ENDPROC
  1322. PROCEDURE writepdfinformation
  1323. With This
  1324.     If !Empty(.cPdfAuthor) Then
  1325.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_AUTHOR, .cPdfAuthor)
  1326.     EndIf
  1327.     If !Empty(.cPdfTitle) Then
  1328.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_TITLE, .cPdfTitle)
  1329.     EndIf
  1330.     If !Empty(.cPdfSubject) Then
  1331.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_SUBJECT, .cPdfSubject)
  1332.     EndIf
  1333.     If !Empty(.cPdfKeyWords) Then
  1334.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_KEYWORDS, .cPdfKeywords)
  1335.     EndIf
  1336.     If !Empty(.cPdfCreator) Then
  1337.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_CREATOR, .cPdfCreator)
  1338.     EndIf
  1339. EndWith
  1340. ENDPROC
  1341. PROCEDURE declaredll
  1342. *!*    * Check if the library HPDF.DLL is in the disk
  1343. *!*    LOCAL lcPDFFile
  1344. *!*    lcPDFFile = "libhpdf.dll"
  1345. *!*    IF EMPTY(SYS(2000,lcPDFFile))
  1346. *!*        MESSAGEBOX("Could not locate the library LIBHPDF.DLL ." + CHR(13) + ;
  1347. *!*                "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")
  1348. *!*        RETURN .F.
  1349. *!*    ENDIF
  1350. Declare Integer HPDF_New In libhpdf.dll Integer, Integer
  1351. Declare Integer HPDF_Free In libhpdf.dll Integer
  1352. Declare Integer HPDF_SaveToFile In libhpdf.dll Integer, String
  1353. Declare Integer HPDF_SetPageMode In libhpdf.dll Integer, Integer
  1354. Declare Integer HPDF_AddPage In libhpdf.dll Integer
  1355. Declare Integer HPDF_Page_SetWidth In libhpdf.dll Integer, Single
  1356. Declare Integer HPDF_Page_SetHeight In libhpdf.dll Integer, Single
  1357. Declare Integer HPDF_LoadJpegImageFromFile In libhpdf.dll Integer, String
  1358. Declare Integer HPDF_LoadPngImageFromFile In libhpdf.dll Integer, String
  1359. Declare Integer HPDF_SetInfoAttr In  libhpdf.dll Integer, Integer, String
  1360. Declare Integer HPDF_SetPassword In  libhpdf.dll Integer, String, String
  1361. Declare Integer HPDF_SetPermission In libhpdf.dll Integer, Integer
  1362. Declare Integer HPDF_SetEncryptionMode In libhpdf.dll Integer, Integer, Integer
  1363. Declare Integer HPDF_SetCompressionMode In libhpdf.dll Integer, Integer
  1364. Declare Integer HPDF_Page_Concat In libhpdf.dll Integer, Single, Single, Single, Single, Single, Single
  1365. Declare Integer HPDF_Page_DrawImage In libhpdf.dll Integer, Integer, Single, Single, Single, Single
  1366. Declare Integer HPDF_GetError In libhpdf.dll Integer
  1367. Declare Integer HPDF_ResetError In libhpdf.dll Integer
  1368. ENDPROC
  1369. PROCEDURE outputfromdata
  1370. LPARAMETERS toListener as ReportListener, tnWidth, tnHeight 
  1371. LOCAL llShowTherm
  1372. llShowTherm = (This.QuietMode = .F.) AND (This.lObjTypeMode = .F.)
  1373. * =DoFoxyTherm(90, "Texto label", "Titulo")
  1374. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  1375. * =DoFoxyTherm() && Desliga
  1376. IF llShowTherm
  1377.     LOCAL lnSecs
  1378.     lnSecs = SECONDS()
  1379.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  1380.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  1381.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  1382.     =DoFoxyTherm(1, "0%", _goHelper._InitStatusText)
  1383. ENDIF 
  1384. #DEFINE OutputJPEG     102
  1385. #DEFINE OutputPNG     104
  1386. This.lDefaultMode = .F.
  1387. This.nPageWidth   = tnWidth
  1388. This.nPageHeight  = tnHeight
  1389. IF VARTYPE(toListener) <> "O"
  1390.     ERROR "Report Listener could not be accessed"
  1391.     RETURN .F.
  1392. ENDIF
  1393. IF NOT This.lObjTypeMode 
  1394.     This.BeforeReport()
  1395. ENDIF 
  1396. This.StartPdfDocument()
  1397. LOCAL lnPageCount, lnFileType, lnDeviceType, lnPageNo, lcFile, lnDeviceType, lnHandle, lnPercent, lnLastPercent, lnDelay
  1398. lnDeviceType  = OutputPNG
  1399. lnPageCount   = toListener.PageTotal && _goHelper.nPageTotal && toListener.PageTotal
  1400. lnLastPercent = 0
  1401. lnDelay       = 5
  1402. FOR lnPageNo = 1 TO lnPageCount
  1403.     IF llShowTherm
  1404.         lnPercent = CEILING(100*lnPageNo/lnPageCount)
  1405.         IF (lnLastPercent > 0 AND ;
  1406.                 lnPercent - lnLastPercent < lnDelay  AND ;
  1407.                 lnPercent <> 100)
  1408.         ELSE 
  1409.             =DoFoxyTherm(lnPercent, ;
  1410.                 ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  1411.                 _goHelper._RunStatusText)
  1412.         ENDIF 
  1413.     ENDIF
  1414.     This.nCurrentPage = lnPageNo
  1415.     IF lnPageNo > 1
  1416.         This.AddBlankPage()
  1417.     ENDIF
  1418.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".PNG"
  1419.     toListener.OutputPage(lnPageNo, lcFile, lnDeviceType)
  1420. *    lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, lcFile)
  1421.     lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcFile)
  1422.     IF lnHandle = 0
  1423.         MESSAGEBOX("Internal error loading the page image file from the report.", 48, "Error")
  1424.         SET STEP ON
  1425.     ELSE
  1426.         This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, 0, 0, (tnWidth/960)*72, (tnHeight/960)*72)
  1427.         This.oImagesCollection.Add(lcFile)
  1428.     ENDIF
  1429. ENDFOR
  1430. IF llShowTherm
  1431.     =DoFoxyTherm(100, ;
  1432.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  1433.                 _goHelper._RunStatusText)
  1434. ENDIF
  1435. IF NOT This.lObjTypeMode 
  1436.     This.AfterReport()
  1437.     This.UnloadReport()
  1438. ENDIF
  1439. IF llShowTherm
  1440.     =DoFoxyTherm()
  1441. ENDIF
  1442. ENDPROC
  1443. PROCEDURE updateproperties
  1444. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  1445.     RETURN
  1446. ENDIF
  1447. LOCAL loFP
  1448. loFP = _Screen.oFoxyPreviewer
  1449. IF VARTYPE(This.CommandClauses) = "O"
  1450.     *!*    IF This.CommandClauses.Preview
  1451.     *!*        This.lOpenViewer = .T.
  1452.     *!*    ELSE 
  1453.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  1454.     *!*    ENDIF
  1455.     This.lOpenViewer = This.CommandClauses.Preview
  1456.     IF NOT EMPTY(This.CommandClauses.ToFile)
  1457.         This.cTargetFileName = This.CommandClauses.ToFile
  1458.     ELSE 
  1459.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  1460.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  1461.                 EMPTY(This.cTargetFileName)
  1462.             LOCAL lcDestFile
  1463.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  1464.             IF NOT "\" $ lcDestFile
  1465.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  1466.             ENDIF
  1467.             This.cTargetFileName = lcDestFile
  1468.         ELSE
  1469.             LOCAL lcFile
  1470.             lcFile = This.cTargetFileName
  1471.             IF EMPTY(lcFile)
  1472.                 lcFile = PUTFILE("","","pdf")
  1473.             ENDIF
  1474.             IF EMPTY(lcFile)
  1475.                 _ReportListener::CancelReport()
  1476.                 * This.CancelReport()
  1477.                 RETURN .F.
  1478.             ENDIF
  1479.             This.cTargetFileName = lcFile
  1480.         ENDIF
  1481.     ENDIF 
  1482. ENDIF
  1483. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  1484. *This.lEmbedFont       = NVL(loFP.lPDFEmbedFonts     , .T.)
  1485. This.lCanPrint        = NVL(loFP.lPDFCanPrint       , .T.)
  1486. This.lCanEdit         = NVL(loFP.lPDFCanEdit        , .T.)
  1487. This.lCanCopy         = NVL(loFP.lPDFCanCopy        , .T.)
  1488. This.lCanAddNotes     = NVL(loFP.lPDFCanAddNotes    , .T.)
  1489. This.lEncryptDocument = NVL(loFP.lPDFEncryptDocument, .T.)
  1490. This.cMasterPassword  = NVL(loFP.cPDFMasterPassword , "")
  1491. This.cUserPassword    = NVL(loFP.cPDFUserPassword   , "")
  1492. *This.lShowErrors      = NVL(loFP.lPDFShowErrors     , .F.)
  1493. *This.cSymbolFontsList = NVL(loFP.cPDFSymbolFontsList, "")
  1494. This.cPdfAuthor       = NVL(loFP.cPdfAuthor         , "")
  1495. This.cPdfTitle        = NVL(loFP.cPdfTitle          , "")
  1496. This.cPdfSubject      = NVL(loFP.cPdfSubject        , "")
  1497. This.cPdfKeyWords     = NVL(loFP.cPdfKeyWords       , "")
  1498. This.cPdfCreator      = NVL(loFP.cPdfCreator        , "")
  1499. *This.cDefaultFont     = NVL(loFP.cPDFDefaultFont    , "")
  1500. LOCAL lnPgMode
  1501. lnPgMode = MAX(NVL(loFP.nPDFPageMode, 0) - 1, 0)
  1502. lnPgMode = IIF(lnPgMode = 1, 2, lnPgMode)
  1503. This.nPageMode    = lnPgMode
  1504. This.lDefaultMode = .T.
  1505. This.QuietMode    = .T.
  1506. ENDPROC
  1507. PROCEDURE _stat_assign
  1508. LPARAMETERS tnStatus
  1509. This._Stat = tnStatus
  1510. IF tnStatus != 0
  1511.     * Clear existing the HPDF errors
  1512.     * Here we can see if an error occurred during the rendering process of the 
  1513.     * current field
  1514.     LOCAL lnHPDF_err, lcHex
  1515.     lnHPDF_err = HPDF_GetError(This.pdfHandle)
  1516.     IF lnHPDF_err <> 0
  1517.         lcHex = TRANSFORM(lnHPDF_err, "@0")
  1518.         * SET STEP ON 
  1519.         HPDF_ResetError(This.pdfHandle)
  1520.     ENDIF
  1521.     IF This.lShowErrors = .T. AND tnStatus > 1
  1522.         IF _VFP.StartMode = 0 && Development
  1523.             LOCAL lnOption
  1524.             lnOption = MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  1525.                 + "Error code : " + TRANSFORM(tnStatus) + CHR(13) ;
  1526.                 + "Description: " + This._ErrorInfo(tnStatus) + CHR(13) ;
  1527.                 + "Page: " + TRANSFORM(This.nCurrentPage) + CHR(13) ;
  1528.                 + "Press 'Retry' to debug the application.", 16 + 2, "Error")
  1529.             IF lnOption = 3
  1530.                 CANCEL
  1531.             ENDIF
  1532.             IF lnOption = 4
  1533.                 SUSPEND
  1534.             ENDIF
  1535.         ELSE 
  1536.             MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  1537.                 + "Error code  : " + TRANSFORM(tnStatus) + CHR(13) ;
  1538.                 + "Description : " + This._ErrorInfo(tnStatus) + CHR(13) ;
  1539.                 + "Object: " + This.cObjectToRender, 16, "Error")
  1540.         ENDIF 
  1541.     ENDIF
  1542. ENDIF
  1543. ENDPROC
  1544. PROCEDURE _errorinfo
  1545. LPARAMETERS tnStatus
  1546. DO CASE
  1547.     CASE tnStatus = 0x1001
  1548.         RETURN "HPDF_ARRAY_COUNT_ERR                      "    &&  0x1001
  1549.     CASE tnStatus = 0x1002
  1550.         RETURN "HPDF_ARRAY_ITEM_NOT_FOUND                 "    &&  0x1002
  1551.     CASE tnStatus = 0x1003
  1552.         RETURN "HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           "    &&  0x1003
  1553.     CASE tnStatus = 0x1004
  1554.         RETURN "HPDF_BINARY_LENGTH_ERR                    "    &&  0x1004
  1555.     CASE tnStatus = 0x1005
  1556.         RETURN "HPDF_CANNOT_GET_PALLET                    "    &&  0x1005
  1557.     CASE tnStatus = 0x1007
  1558.         RETURN "HPDF_DICT_COUNT_ERR                       "    &&  0x1007
  1559.     CASE tnStatus = 0x1008
  1560.         RETURN "HPDF_DICT_ITEM_NOT_FOUND                  "    &&  0x1008
  1561.     CASE tnStatus = 0x1009
  1562.         RETURN "HPDF_DICT_ITEM_UNEXPECTED_TYPE            "    &&  0x1009
  1563.     CASE tnStatus = 0x100A
  1564.         RETURN "HPDF_DICT_STREAM_LENGTH_NOT_FOUND         "    &&  0x100A
  1565.     CASE tnStatus = 0x100B
  1566.         RETURN "HPDF_DOC_ENCRYPTDICT_NOT_FOUND            "    &&  0x100B
  1567.     CASE tnStatus = 0x100C
  1568.         RETURN "HPDF_DOC_INVALID_OBJECT                   "    &&  0x100C
  1569.     CASE tnStatus = 0x100E
  1570.         RETURN "HPDF_DUPLICATE_REGISTRATION               "    &&  0x100E
  1571.     CASE tnStatus = 0x100F
  1572.         RETURN "HPDF_EXCEED_JWW_CODE_NUM_LIMIT            "    &&  0x100F
  1573.     CASE tnStatus = 0x10011
  1574.         RETURN "HPDF_ENCRYPT_INVALID_PASSWORD             "    &&  0x1011
  1575.     CASE tnStatus = 0x1013
  1576.         RETURN "HPDF_ERR_UNKNOWN_CLASS                    "    &&  0x1013
  1577.     CASE tnStatus = 0x1014
  1578.         RETURN "HPDF_EXCEED_GSTATE_LIMIT                  "    &&  0x1014
  1579.     CASE tnStatus = 0x1015
  1580.         RETURN "HPDF_FAILD_TO_ALLOC_MEM                   "    &&  0x1015
  1581.     CASE tnStatus = 0x1016
  1582.         RETURN "HPDF_FILE_IO_ERROR                        "    &&  0x1016
  1583.     CASE tnStatus = 0x1017
  1584.         RETURN "HPDF_FILE_OPEN_ERROR                      "    &&  0x1017
  1585.     CASE tnStatus = 0x1019
  1586.         RETURN "HPDF_FONT_EXISTS                          "    &&  0x1019
  1587.     CASE tnStatus = 0x101A
  1588.         RETURN "HPDF_FONT_INVALID_WIDTHS_TABLE            "    &&  0x101A
  1589.     CASE tnStatus = 0x101B
  1590.         RETURN "HPDF_INVALID_AFM_HEADER                   "    &&  0x101B
  1591.     CASE tnStatus = 0x101C
  1592.         RETURN "HPDF_INVALID_ANNOTATION                   "    &&  0x101C
  1593.     CASE tnStatus = 0x101E
  1594.         RETURN "HPDF_INVALID_BIT_PER_COMPONENT            "    &&  0x101E
  1595.     CASE tnStatus = 0x101F
  1596.         RETURN "HPDF_INVALID_CHAR_MATRICS_DATA            "    &&  0x101F
  1597.     CASE tnStatus = 0x1020
  1598.         RETURN "HPDF_INVALID_COLOR_SPACE                  "    &&  0x1020
  1599.     CASE tnStatus = 0x1021
  1600.         RETURN "HPDF_INVALID_COMPRESSION_MODE             "    &&  0x1021
  1601.     CASE tnStatus = 0x1022
  1602.         RETURN "HPDF_INVALID_DATE_TIME                    "    &&  0x1022
  1603.     CASE tnStatus = 0x1023
  1604.         RETURN "HPDF_INVALID_DESTINATION                  "    &&  0x1023
  1605.     CASE tnStatus = 0x1025
  1606.         RETURN "HPDF_INVALID_DOCUMENT                     "    &&  0x1025
  1607.     CASE tnStatus = 0x1026
  1608.         RETURN "HPDF_INVALID_DOCUMENT_STATE               "    &&  0x1026
  1609.     CASE tnStatus = 0x1027
  1610.         RETURN "HPDF_INVALID_ENCODER                      "    &&  0x1027
  1611.     CASE tnStatus = 0x1028
  1612.         RETURN "HPDF_INVALID_ENCODER_TYPE                 "    &&  0x1028
  1613.     CASE tnStatus = 0x102B
  1614.         RETURN "HPDF_INVALID_ENCODING_NAME                "    &&  0x102B
  1615.     CASE tnStatus = 0x102C
  1616.         RETURN "HPDF_INVALID_ENCRYPT_KEY_LEN              "    &&  0x102C
  1617.     CASE tnStatus = 0x102D
  1618.         RETURN "HPDF_INVALID_FONTDEF_DATA                 "    &&  0x102D
  1619.     CASE tnStatus = 0x102E
  1620.         RETURN "HPDF_INVALID_FONTDEF_TYPE                 "    &&  0x102E
  1621.     CASE tnStatus = 0x102F
  1622.         RETURN "HPDF_INVALID_FONT_NAME                    "    &&  0x102F
  1623.     CASE tnStatus = 0x1030
  1624.         RETURN "HPDF_INVALID_IMAGE                        "    &&  0x1030
  1625.     CASE tnStatus = 0x1031
  1626.         RETURN "HPDF_INVALID_JPEG_DATA                    "    &&  0x1031
  1627.     CASE tnStatus = 0x1032
  1628.         RETURN "HPDF_INVALID_N_DATA                       "    &&  0x1032
  1629.     CASE tnStatus = 0x1033
  1630.         RETURN "HPDF_INVALID_OBJECT                       "    &&  0x1033
  1631.     CASE tnStatus = 0x1034
  1632.         RETURN "HPDF_INVALID_OBJ_ID                       "    &&  0x1034
  1633.     CASE tnStatus = 0x1035
  1634.         RETURN "HPDF_INVALID_OPERATION                    "    &&  0x1035
  1635.     CASE tnStatus = 0x1036
  1636.         RETURN "HPDF_INVALID_OUTLINE                      "    &&  0x1036
  1637.     CASE tnStatus = 0x1037
  1638.         RETURN "HPDF_INVALID_PAGE                         "    &&  0x1037
  1639.     CASE tnStatus = 0x1038
  1640.         RETURN "HPDF_INVALID_PAGES                        "    &&  0x1038
  1641.     CASE tnStatus = 0x1039
  1642.         RETURN "HPDF_INVALID_PARAMETER                    "    &&  0x1039
  1643.     CASE tnStatus = 0x103B
  1644.         RETURN "HPDF_INVALID_PNG_IMAGE                    "    &&  0x103B
  1645.     CASE tnStatus = 0x103C
  1646.         RETURN "HPDF_INVALID_STREAM                       "    &&  0x103C
  1647.     CASE tnStatus = 0x103D
  1648.         RETURN "HPDF_MISSING_FILE_NAME_ENTRY              "    &&  0x103D
  1649.     CASE tnStatus = 0x103F
  1650.         RETURN "HPDF_INVALID_TTC_FILE                     "    &&  0x103F
  1651.     CASE tnStatus = 0x1040
  1652.         RETURN "HPDF_INVALID_TTC_INDEX                    "    &&  0x1040
  1653.     CASE tnStatus = 0x1041
  1654.         RETURN "HPDF_INVALID_WX_DATA                      "    &&  0x1041
  1655.     CASE tnStatus = 0x1042
  1656.         RETURN "HPDF_ITEM_NOT_FOUND                       "    &&  0x1042
  1657.     CASE tnStatus = 0x1043
  1658.         RETURN "HPDF_LIBPNG_ERROR                         "    &&  0x1043
  1659.     CASE tnStatus = 0x1044
  1660.         RETURN "HPDF_NAME_INVALID_VALUE                   "    &&  0x1044
  1661.     CASE tnStatus = 0x1045
  1662.         RETURN "HPDF_NAME_OUT_OF_RANGE                    "    &&  0x1045
  1663.     CASE tnStatus = 0x1048
  1664.         RETURN "HPDF_PAGE_INVALID_PARAM_COUNT             "    &&  0x1048
  1665.     CASE tnStatus = 0x1049
  1666.         RETURN "HPDF_PAGES_MISSING_KIDS_ENTRY             "    &&  0x1049
  1667.     CASE tnStatus = 0x104A
  1668.         RETURN "HPDF_PAGE_CANNOT_FIND_OBJECT              "    &&  0x104A
  1669.     CASE tnStatus = 0x104B
  1670.         RETURN "HPDF_PAGE_CANNOT_GET_ROOT_PAGES           "    &&  0x104B
  1671.     CASE tnStatus = 0x104C
  1672.         RETURN "HPDF_PAGE_CANNOT_RESTORE_GSTATE           "    &&  0x104C
  1673.     CASE tnStatus = 0x104D
  1674.         RETURN "HPDF_PAGE_CANNOT_SET_PARENT               "    &&  0x104D
  1675.     CASE tnStatus = 0x104E
  1676.         RETURN "HPDF_PAGE_FONT_NOT_FOUND                  "    &&  0x104E
  1677.     CASE tnStatus = 0x104F
  1678.         RETURN "HPDF_PAGE_INVALID_FONT                    "    &&  0x104F
  1679.     CASE tnStatus = 0x1050
  1680.         RETURN "HPDF_PAGE_INVALID_FONT_SIZE               "    &&  0x1050
  1681.     CASE tnStatus = 0x1051
  1682.         RETURN "HPDF_PAGE_INVALID_GMODE                   "    &&  0x1051
  1683.     CASE tnStatus = 0x1052
  1684.         RETURN "HPDF_PAGE_INVALID_INDEX                   "    &&  0x1052
  1685.     CASE tnStatus = 0x1053
  1686.         RETURN "HPDF_PAGE_INVALID_ROTATE_VALUE            "    &&  0x1053
  1687.     CASE tnStatus = 0x1054
  1688.         RETURN "HPDF_PAGE_INVALID_SIZE                    "    &&  0x1054
  1689.     CASE tnStatus = 0x1055
  1690.         RETURN "HPDF_PAGE_INVALID_XOBJECT                 "    &&  0x1055
  1691.     CASE tnStatus = 0x1056
  1692.         RETURN "HPDF_PAGE_OUT_OF_RANGE                    "    &&  0x1056
  1693.     CASE tnStatus = 0x1057
  1694.         RETURN "HPDF_REAL_OUT_OF_RANGE                    "    &&  0x1057
  1695.     CASE tnStatus = 0x1058
  1696.         RETURN "HPDF_STREAM_EOF                           "    &&  0x1058
  1697.     CASE tnStatus = 0x1059
  1698.         RETURN "HPDF_STREAM_READLN_CONTINUE               "    &&  0x1059
  1699.     CASE tnStatus = 0x105B
  1700.         RETURN "HPDF_STRING_OUT_OF_RANGE                  "    &&  0x105B
  1701.     CASE tnStatus = 0x105C
  1702.         RETURN "HPDF_THIS_FUNC_WAS_SKIPPED                "    &&  0x105C
  1703.     CASE tnStatus = 0x105D
  1704.         RETURN "HPDF_TTF_CANNOT_EMBEDDING_FONT            "    &&  0x105D
  1705.     CASE tnStatus = 0x105E
  1706.         RETURN "HPDF_TTF_INVALID_CMAP                     "    &&  0x105E
  1707.     CASE tnStatus = 0x105F
  1708.         RETURN "HPDF_TTF_INVALID_FOMAT                    "    &&  0x105F
  1709.     CASE tnStatus = 0x1060
  1710.         RETURN "HPDF_TTF_MISSING_TABLE                    "    &&  0x1060
  1711.     CASE tnStatus = 0x1061
  1712.         RETURN "HPDF_UNSUPPORTED_FONT_TYPE                "    &&  0x1061
  1713.     CASE tnStatus = 0x1062
  1714.         RETURN "HPDF_UNSUPPORTED_FUNC                     "    &&  0x1062
  1715.     CASE tnStatus = 0x1063
  1716.         RETURN "HPDF_UNSUPPORTED_JPEG_FORMAT              "    &&  0x1063
  1717.     CASE tnStatus = 0x1064
  1718.         RETURN "HPDF_UNSUPPORTED_TYPE1_FONT               "    &&  0x1064
  1719.     CASE tnStatus = 0x1065
  1720.         RETURN "HPDF_XREF_COUNT_ERR                       "    &&  0x1065
  1721.     CASE tnStatus = 0x1066
  1722.         RETURN "HPDF_ZLIB_ERROR                           "    &&  0x1066
  1723.     CASE tnStatus = 0x1067
  1724.         RETURN "HPDF_INVALID_PAGE_INDEX                   "    &&  0x1067
  1725.     CASE tnStatus = 0x1068
  1726.         RETURN "HPDF_INVALID_URI                          "    &&  0x1068
  1727.     CASE tnStatus = 0x1069
  1728.         RETURN "HPDF_PAGE_LAYOUT_OUT_OF_RANGE             "    &&  0x1069
  1729.     CASE tnStatus = 0x1070
  1730.         RETURN "HPDF_PAGE_MODE_OUT_OF_RANGE               "    &&  0x1070
  1731.     CASE tnStatus = 0x1071
  1732.         RETURN "HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          "    &&  0x1071
  1733.     CASE tnStatus = 0x1072
  1734.         RETURN "HPDF_ANNOT_INVALID_ICON                   "    &&  0x1072
  1735.     CASE tnStatus = 0x1073
  1736.         RETURN "HPDF_ANNOT_INVALID_BORDER_STYLE           "    &&  0x1073
  1737.     CASE tnStatus = 0x1074
  1738.         RETURN "HPDF_PAGE_INVALID_DIRECTION               "    &&  0x1074
  1739.     CASE tnStatus = 0x1075
  1740.         RETURN "HPDF_INVALID_FONT                         "    &&  0x1075
  1741.     CASE tnStatus = 0x1076
  1742.         RETURN "HPDF_PAGE_INSUFFICIENT_SPACE              "    &&  0x1076
  1743.     CASE tnStatus = 0x1077
  1744.         RETURN "HPDF_PAGE_INVALID_DISPLAY_TIME            "    &&  0x1077
  1745.     CASE tnStatus = 0x1078
  1746.         RETURN "HPDF_PAGE_INVALID_TRANSITION_TIME         "    &&  0x1078
  1747.     CASE tnStatus = 0x1079
  1748.         RETURN "HPDF_INVALID_PAGE_SLIDESHOW_TYPE          "    &&  0x1079
  1749.     CASE tnStatus = 0x1080
  1750.         RETURN "HPDF_EXT_GSTATE_OUT_OF_RANGE              "    &&  0x1080
  1751.     CASE tnStatus = 0x1081
  1752.         RETURN "HPDF_INVALID_EXT_GSTATE                   "    &&  0x1081
  1753.     CASE tnStatus = 0x1082
  1754.         RETURN "HPDF_EXT_GSTATE_READ_ONLY                 "    &&  0x1082
  1755.     OTHERWISE
  1756.         RETURN "Unknown Error"
  1757. ENDCASE
  1758. ENDPROC
  1759. PROCEDURE LoadReport
  1760. This.UpdateProperties()
  1761. DODEFAULT()
  1762. ENDPROC
  1763. PROCEDURE BeforeReport
  1764. This.oImagesCollection=CreateObject("Collection")
  1765. ENDPROC
  1766. PROCEDURE UnloadReport
  1767. IF This.lDefaultMode 
  1768.     DODEFAULT()
  1769. ENDIF 
  1770. With This
  1771.     * CChalom 2010-01-20
  1772.     * Added "WaitForNextReport" property in order to allow merging reports
  1773.     * If another report is expected to come, don't close the objects and handles
  1774.     IF Not .WaitForNextReport 
  1775.         If Vartype(.oImagesCollection)="O" Then &&Cleanup Temporary Images Files
  1776.             Local lcItem As String
  1777.             For Each lcItem In .oImagesCollection FOXOBJECT
  1778.                 TRY
  1779.                     Delete File (lcItem)
  1780.                 CATCH TO loexc
  1781.                     SET STEP ON 
  1782.                 ENDTRY
  1783.             EndFor
  1784.             .oImagesCollection=Null
  1785.         EndIf
  1786.     ENDIF 
  1787. ENDWITH
  1788. ENDPROC
  1789. PROCEDURE AfterReport
  1790. IF This.lDefaultMode
  1791.     DODEFAULT()
  1792. ENDIF 
  1793. IF This.lObjTypeMode 
  1794.     This.OutputFromData(This, This.GetPageWidth(), This.GetPageHeight())
  1795. ENDIF
  1796. WITH This
  1797.     IF NOT .WaitForNextReport
  1798.         IF This.lObjTypeMode AND VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  1799.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile)
  1800.             This.cTargetFileName = _Screen.oFoxyPreviewer.cDestFile
  1801.         ENDIF        
  1802.         LOCAL lcFile
  1803.         lcFile = This.cTargetFileName
  1804.         IF EMPTY(lcFile)
  1805.             lcFile = PUTFILE("","","pdf")
  1806.         ENDIF
  1807.         IF EMPTY(lcFile)
  1808.             This._Stat = HPDF_Free(.pdfHandle)
  1809.             RETURN
  1810.         ELSE
  1811.             This._Stat = HPDF_SaveToFile(.pdfHandle, lcFile)
  1812.             This._Stat = HPDF_Free(.pdfHandle)
  1813.             If .lOpenViewer Then
  1814.                 .ShellExec(lcFile)
  1815.             EndIf
  1816.         ENDIF
  1817.     ENDIF
  1818.     * Reset the report page counter
  1819.     This.nPgCounter = 0
  1820. ENDWITH
  1821. ENDPROC
  1822. PROCEDURE OutputPage
  1823. Lparameters nPageNo, eDevice, nDeviceType, nLeft, nTop, nWidth, nHeight, nClipLeft, nClipTop, nClipWidth, nClipHeight
  1824. #Define OutputNothing -1
  1825. #Define OutputTIFF 101
  1826. #Define OutputTIFFAdditive (OutputTIFF+100)
  1827. #Define OutPutJPEG 102
  1828. #Define OutPutPNG  104
  1829. #Define COULDNTCREATE "Could Not Create PDF Document"
  1830. Local lnHandle As Integer, lcFile As String
  1831. With This
  1832.     If (nDeviceType == OutputNothing) Then
  1833.         If nPageNo == 1 Then
  1834.             * nDeviceType = OutputJPEG && Start JPEG Generation Process
  1835.             nDeviceType = OutputPNG && Start PNG Generation Process
  1836.             .StartPdfDocument()
  1837.         Else
  1838.             .AddBlankPage()
  1839.             * nDeviceType = OutputJPEG && Start JPEG Generation Process
  1840.             nDeviceType = OutputPNG && Start PNG Generation Process
  1841.         EndIf
  1842.         * lcFile=GetEnv("TEMP")+"\"+Sys(2015)+".Jpg"
  1843.         lcFile=GetEnv("TEMP")+"\"+Sys(2015)+".Png"
  1844.         .OutputPage(nPageNo, lcFile, nDeviceType)
  1845.         * lnHandle=LoadJpegImageFromFile(.pdfHandle, lcFile)
  1846.         lnHandle=HPDF_LoadPNGImageFromFile(.pdfHandle, lcFile)
  1847.         This._Stat = HPDF_Page_DrawImage(.oPage, lnHandle, 0, 0, (.GetPageWidth()/960)*72, (.GetPageHeight()/960)*72)
  1848.         .oImagesCollection.Add(lcFile)
  1849.         NoDefault
  1850.     EndIf
  1851. EndWith
  1852. ENDPROC
  1853. PROCEDURE Destroy
  1854. This.ClearDLLS()
  1855. DODEFAULT()
  1856. ENDPROC
  1857. EHeight = 23
  1858. Width = 23
  1859. ListenerType = 2
  1860. FRXDataSession = -1
  1861. pdfhandle = 0
  1862. pageheight = 0
  1863. pagewidth = 0
  1864. encryptdocument = .F.
  1865. oprogress = .F.
  1866. oregistry = .F.
  1867. mergedocument = .F.
  1868. mergedocumentname = 
  1869. opage = .NULL.
  1870. oimagescollection = .NULL.
  1871. cpdfauthor = 
  1872. cuserpassword = 
  1873. lencryptdocument = .F.
  1874. nencryptionlevel = 5
  1875. npageheight = 0
  1876. lcanedit = .F.
  1877. lcancopy = .T.
  1878. lcanaddnotes = .F.
  1879. lcanprint = .T.
  1880. lopenviewer = .F.
  1881. cmasterpassword = 
  1882. ctargetfilename = 
  1883. cpdfcreator = 
  1884. cpdfkeywords = 
  1885. cpdfsubject = 
  1886. cpdftitle = 
  1887. waitfornextreport = .F.
  1888. npgcounter = 0
  1889. npagemode = 0
  1890. lextended = .T.
  1891. ldefaultmode = .F.
  1892. npagewidth = 0
  1893. lobjtypemode = .F.
  1894. _stat = 0
  1895. lshowerrors = .T.
  1896. ncurrentpage = 0
  1897. _memberdata = 
  1898.     3133<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"/></VFPData>
  1899. Name = "pdfasimagelistener"
  1900. pdfhandle Handle to the PDF file to create by the DLL
  1901. nlastpageproccesed Number of the last page proccesed by the system
  1902. ndivisionfactor Factor to be used for the conversion between unit of measures
  1903. cpdfauthor Author of the Pdf File
  1904. cpdftitle Title of the PDF Document
  1905. cpdfsubject Subject of the PDF File
  1906. cpdfkeywords Keywords of the PDF Document
  1907. cpdfcreator Name of the Pdf Creator
  1908. lcanprint Property to know if user can print or can't print the document
  1909. lcancopy Property to know if user can copy the document contents
  1910. lcanedit Property to know if user can Edit the contents of the document
  1911. lcanaddnotes Property to know if the user can add or modify annotations
  1912. lencryptdocument Property to know if the document should be Encripted
  1913. cuserpassword User Password for the PDF document
  1914. cmasterpassword Master Password for the PDF document
  1915. nencriptionlevel A Value Between 5(40bit) and 16(128bit) can be specified for length of the key
  1916. opage Current Page object returned by the library
  1917. lstarted Property to know if the conversion procces has started
  1918. ctargetfilename Name of the PDF File to create
  1919. lopenviewer Flag to execute the default PDF reader of the pc
  1920. ofonts Fonts Collection used in the library
  1921. oregistry Property to store the Registry Object, this object will provide access to windows registry
  1922. npageheight Height of the page, used to invert the coordinate system of the pdf library
  1923. nspacesfortab Number of Spaces per TAB character
  1924. lembedfont Property to Know if the font is Embedded into the document, if .T. file size will increase
  1925. ccodepage Code Page to be used by the pdf listener when loading fonts
  1926. lunderline Property to know if the text being draw should use underline style
  1927. ctextstyle Internal to the Class
  1928. odynamics Property to store the object used to store temporary values of the dynamics properties
  1929. waitfornextreport Logical, keep the PDF handles opened, waiting for a new report to be joined.
  1930. npgcounter
  1931. nglobalpgcounter
  1932. otempimagescollection Property to store the collection of temporary Images used in the PDF Generation
  1933. opicturehandles Used to store the handle of pictures used in the PDF generation
  1934. _lsetconsole
  1935. _lsettalk
  1936. npagemode How the document should be displayed - 0 = USE_NONE; 1 = USE_OUTLINE; 2 = USE_THUMBS; 3 = FULL_SCREEN
  1937. lextended
  1938. ldefaultmode
  1939. npagewidth
  1940. _cwinfolder
  1941. _ctempfolder
  1942. _stat
  1943. lshowerrors
  1944. csymbolfontslist
  1945. cobjecttorender
  1946. _stat2
  1947. ncurrentpage
  1948. oactivelistener
  1949. cdefaultfont
  1950. lobjtypemode
  1951. _lschinese
  1952. lrighttoleft
  1953. lreplacefonts Replaces some fonts using some generic fonts that are stored inside the DLL
  1954. _ltchinese
  1955. _lkorean
  1956. _ljapanese
  1957. nwmwidthratio
  1958. nwmheightratio
  1959. nwmwidth
  1960. nwmheight
  1961. cwmpicture
  1962. hwmpdfhandle
  1963. _cwmpicture
  1964. _nwmy
  1965. _nwmx
  1966. _nwmw
  1967. _nwmh
  1968. lusingwatermark
  1969. nsystemlangid
  1970. lhasuserfld
  1971. *declaredll Method to Declare all DLL required for the Job
  1972. *writepdfinformation 
  1973. *searchfont 
  1974. *startpdfdocument 
  1975. *cleardlls Method to Clear from Memory all the DLL Calls
  1976. *encryptpdf 
  1977. *addblankpage Method to add a Blank Page to the document
  1978. *addpdfstandardfonts 
  1979. *findfontfilename Method to find the real filename of a True Type Font, it will look in the Registry for it
  1980. *cropimage Method to Crop an Image, uses code from Cesar Chalom Samples
  1981. *parseunderlinetext Method to prepare the text to be drawed as underline
  1982. *processdynamics Method to process the dynamics properties of VFP9 SP2
  1983. *processfields 
  1984. *processshapes 
  1985. *processlabel 
  1986. *processpictures 
  1987. *processlines 
  1988. *getpicturehandle Used to get the picture handle when pictures are not in general fields
  1989. ^aspawnobj[1,1] 
  1990. *ispixelalpha 
  1991. *outputfromdata 
  1992. *getparheight 
  1993. ^afontsreplaced[1,0] 
  1994. *stringtopic 
  1995. *processpictures2 
  1996. ^afontssymbol[1,0] 
  1997. *_stat_assign 
  1998. *_errorinfo 
  1999. *_stat2_assign 
  2000. *getpicturefromlistener 
  2001. *getpageimg 
  2002. ^apagesimgs[1,0] 
  2003. *clearpdferrors 
  2004. *getimgtype 
  2005. *getdefaultfont 
  2006. *updateproperties 
  2007. *filesize Returns the file size
  2008. *getfonthandle 
  2009. *getfontstylename 
  2010. *gettempfile 
  2011. *istempfile 
  2012. *getwatermarkobject 
  2013. *getwatermark 
  2014. *getlanguagefromsystem 
  2015. HPDF_New
  2016. libhpdf.dll
  2017. HPDF_Free
  2018. libhpdf.dll
  2019. HPDF_SaveToFile
  2020. libhpdf.dll
  2021. HPDF_GetError
  2022. libhpdf.dll
  2023. HPDF_ResetError
  2024. libhpdf.dll
  2025. HPDF_SetPageMode
  2026. libhpdf.dll
  2027. HPDF_GetCurrentPage
  2028. libhpdf.dll
  2029. HPDF_AddPage
  2030. libhpdf.dll
  2031. HPDF_Page_SetWidth
  2032. libhpdf.dll
  2033. HPDF_Page_SetHeight
  2034. libhpdf.dll
  2035. HPDF_GetFont
  2036. libhpdf.dll
  2037. HPDF_LoadTTFontFromFile
  2038. libhpdf.dll
  2039. HPDF_GetEncoder
  2040. libhpdf.dll
  2041. HPDF_GetCurrentEncoder
  2042. libhpdf.dll
  2043. HPDF_SetCurrentEncoder
  2044. libhpdf.dll
  2045. HPDF_Encoder_GetType
  2046. libhpdf.dll
  2047. HPDF_Encoder_GetByteType
  2048. libhpdf.dll
  2049. HPDF_Encoder_GetUnicode
  2050. libhpdf.dll
  2051. HPDF_Encoder_GetWritingMode
  2052. libhpdf.dll
  2053. HPDF_UseJPEncodings
  2054. libhpdf.dll
  2055. HPDF_UseKREncodings
  2056. libhpdf.dll
  2057. HPDF_UseCNSEncodings
  2058. libhpdf.dll
  2059. HPDF_UseCNTEncodings
  2060. libhpdf.dll
  2061. HPDF_UseJPFonts
  2062. libhpdf.dll
  2063. HPDF_UseKRFonts
  2064. libhpdf.dll
  2065. HPDF_UseCNSFonts
  2066. libhpdf.dll
  2067. HPDF_UseCNTFonts
  2068. libhpdf.dll
  2069. HPDF_LoadPngImageFromFile
  2070. libhpdf.dll
  2071. HPDF_LoadJpegImageFromFile
  2072. libhpdf.dll
  2073. HPDF_Image_GetWidth
  2074. libhpdf.dll
  2075. HPDF_Image_GetHeight
  2076. libhpdf.dll
  2077. HPDF_SetInfoAttr
  2078. libhpdf.dll
  2079. HPDF_SetPassword
  2080. libhpdf.dll
  2081. HPDF_SetPermission
  2082. libhpdf.dll
  2083. HPDF_SetEncryptionMode
  2084. libhpdf.dll
  2085. HPDF_SetCompressionMode
  2086. libhpdf.dll
  2087. HPDF_Font_MeasureText
  2088. libhpdf.dll
  2089. HPDF_Page_GetWidth
  2090. libhpdf.dll
  2091. HPDF_Page_GetHeight
  2092. libhpdf.dll
  2093. HPDF_Page_TextWidth
  2094. libhpdf.dll
  2095. HPDF_Page_GetCurrentFont
  2096. libhpdf.dll
  2097. HPDF_Page_MeasureText
  2098. libhpdf.dll
  2099. HPDF_Page_GetRGBFill
  2100. libhpdf.dll
  2101. HPDF_Page_GetCurrentFont
  2102. libhpdf.dll
  2103. HPDF_Page_GetCurrentFontSize
  2104. libhpdf.dll
  2105. HPDF_Page_SetLineWidth
  2106. libhpdf.dll
  2107. HPDF_Page_SetDash
  2108. libhpdf.dll
  2109. HPDF_Page_MoveTo
  2110. libhpdf.dll
  2111. HPDF_Page_LineTo
  2112. libhpdf.dll
  2113. HPDF_Page_ClosePath
  2114. libhpdf.dll
  2115. HPDF_Page_Rectangle
  2116. libhpdf.dll
  2117. HPDF_Page_Concat
  2118. libhpdf.dll
  2119. HPDF_Page_SetCharSpace
  2120. libhpdf.dll
  2121. HPDF_Page_SetWordSpace
  2122. libhpdf.dll
  2123. HPDF_Page_SetHorizontalScalling
  2124. libhpdf.dll
  2125. HPDF_Page_SetTextLeading
  2126. libhpdf.dll
  2127. HPDF_Page_SetTextRise
  2128. libhpdf.dll
  2129. HPDF_Page_Stroke
  2130. libhpdf.dll
  2131. HPDF_Page_ClosePathStroke
  2132. libhpdf.dll
  2133. HPDF_Page_Fill
  2134. libhpdf.dll
  2135. HPDF_Page_FillStroke
  2136. libhpdf.dll
  2137. HPDF_Page_EndPath
  2138. libhpdf.dll
  2139. HPDF_Page_BeginText
  2140. libhpdf.dll
  2141. HPDF_Page_EndText
  2142. libhpdf.dll
  2143. HPDF_Page_SetFontAndSize
  2144. libhpdf.dll
  2145. HPDF_Page_SetTextRenderingMode
  2146. libhpdf.dll
  2147. HPDF_Page_MoveTextPos
  2148. libhpdf.dll
  2149. HPDF_Page_MoveToNextLine
  2150. libhpdf.dll
  2151. HPDF_Page_SetRGBFill
  2152. libhpdf.dll
  2153. HPDF_Page_SetRGBStroke
  2154. libhpdf.dll
  2155. HPDF_Page_Ellipse
  2156. libhpdf.dll
  2157. HPDF_Page_DrawImage
  2158. libhpdf.dll
  2159. HPDF_Page_TextRect
  2160. libhpdf.dll
  2161. HPDF_Page_TextOut
  2162. libhpdf.dll
  2163. HPDF_Page_SetTextMatrix
  2164. libhpdf.dll
  2165. HPDF_Page_ShowText
  2166. libhpdf.dll
  2167. HPDF_Page_CurveTo
  2168. libhpdf.dll
  2169. GdipCloneBitmapAreaI
  2170. GDIPLUS.DLLQ
  2171. pdfxGdipCloneBitmapAreaI
  2172. _strrev
  2173. msvcrt20.dllQ
  2174. xfcRevertString
  2175. HPDF_NEW
  2176. LIBHPDF
  2177. HPDF_FREE
  2178. HPDF_SAVETOFILE
  2179. HPDF_GETERROR
  2180. HPDF_RESETERROR
  2181. HPDF_SETPAGEMODE
  2182. HPDF_GETCURRENTPAGE
  2183. HPDF_ADDPAGE
  2184. HPDF_PAGE_SETWIDTH
  2185. HPDF_PAGE_SETHEIGHT
  2186. HPDF_GETFONT
  2187. HPDF_LOADTTFONTFROMFILE
  2188. HPDF_GETENCODER
  2189. HPDF_GETCURRENTENCODER
  2190. HPDF_SETCURRENTENCODER
  2191. HPDF_ENCODER_GETTYPE
  2192. HPDF_ENCODER_GETBYTETYPE
  2193. HPDF_ENCODER_GETUNICODE
  2194. HPDF_ENCODER_GETWRITINGMODE
  2195. HPDF_USEJPENCODINGS
  2196. HPDF_USEKRENCODINGS
  2197. HPDF_USECNSENCODINGS
  2198. HPDF_USECNTENCODINGS
  2199. HPDF_USEJPFONTS
  2200. HPDF_USEKRFONTS
  2201. HPDF_USECNSFONTS
  2202. HPDF_USECNTFONTS
  2203. HPDF_LOADPNGIMAGEFROMFILE
  2204. HPDF_LOADJPEGIMAGEFROMFILE
  2205. HPDF_IMAGE_GETWIDTH
  2206. HPDF_IMAGE_GETHEIGHT
  2207. HPDF_SETINFOATTR
  2208. HPDF_SETPASSWORD
  2209. HPDF_SETPERMISSION
  2210. HPDF_SETENCRYPTIONMODE
  2211. HPDF_SETCOMPRESSIONMODE
  2212. HPDF_FONT_MEASURETEXT
  2213. HPDF_PAGE_GETWIDTH
  2214. HPDF_PAGE_GETHEIGHT
  2215. HPDF_PAGE_TEXTWIDTH
  2216. HPDF_PAGE_GETCURRENTFONT
  2217. HPDF_PAGE_MEASURETEXT
  2218. HPDF_PAGE_GETRGBFILL
  2219. HPDF_PAGE_GETCURRENTFONTSIZE
  2220. HPDF_PAGE_SETLINEWIDTH
  2221. HPDF_PAGE_SETDASH
  2222. HPDF_PAGE_MOVETO
  2223. HPDF_PAGE_LINETO
  2224. HPDF_PAGE_CLOSEPATH
  2225. HPDF_PAGE_RECTANGLE
  2226. HPDF_PAGE_CONCAT
  2227. HPDF_PAGE_SETCHARSPACE
  2228. HPDF_PAGE_SETWORDSPACE
  2229. HPDF_PAGE_SETHORIZONTALSCALLING
  2230. HPDF_PAGE_SETTEXTLEADING
  2231. HPDF_PAGE_SETTEXTRISE
  2232. HPDF_PAGE_STROKE
  2233. HPDF_PAGE_CLOSEPATHSTROKE
  2234. HPDF_PAGE_FILL
  2235. HPDF_PAGE_FILLSTROKE
  2236. HPDF_PAGE_ENDPATH
  2237. HPDF_PAGE_BEGINTEXT
  2238. HPDF_PAGE_ENDTEXT
  2239. HPDF_PAGE_SETFONTANDSIZE
  2240. HPDF_PAGE_SETTEXTRENDERINGMODE
  2241. HPDF_PAGE_MOVETEXTPOS
  2242. HPDF_PAGE_MOVETONEXTLINE
  2243. HPDF_PAGE_SETRGBFILL
  2244. HPDF_PAGE_SETRGBSTROKE
  2245. HPDF_PAGE_ELLIPSE
  2246. HPDF_PAGE_DRAWIMAGE
  2247. HPDF_PAGE_TEXTRECT
  2248. HPDF_PAGE_TEXTOUT
  2249. HPDF_PAGE_SETTEXTMATRIX
  2250. HPDF_PAGE_SHOWTEXT
  2251. HPDF_PAGE_CURVETO
  2252. GDIPCLONEBITMAPAREAI
  2253. GDIPLUS
  2254. PDFXGDIPCLONEBITMAPAREAI
  2255. _STRREV
  2256. MSVCRT20
  2257. XFCREVERTSTRING    
  2258. CPDFAUTHOR
  2259. _STAT
  2260. HPDF_SETINFOATTR    
  2261. PDFHANDLE    
  2262. CPDFTITLE
  2263. CPDFSUBJECT
  2264. CPDFKEYWORDS
  2265. CPDFCREATOR
  2266. STRING
  2267. INTEGER
  2268. STRING
  2269. STRING
  2270. STRING
  2271.  Bold
  2272.  Italic
  2273. BOOLEAN
  2274. INTEGER
  2275. STRING
  2276. LCFONTNAME
  2277. LNSTYLE
  2278. LNPOS0
  2279. AFONTSSYMBOL    
  2280. LCRETORNO
  2281. LCFONTREGULAR
  2282. LCFONTSTYLE
  2283. CTEXTSTYLE
  2284. LBRESULT
  2285. OFONTS
  2286. COUNT
  2287. GETKEY
  2288. LNREPLCOUNT
  2289. LNPOS
  2290. AFONTSREPLACED
  2291. LCKEY    
  2292. LCNEWFONT
  2293. FINDFONTFILENAME
  2294. GETDEFAULTFONT
  2295. Could not load the library LIBHPDF.DLL .C
  2296. 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.
  2297. Error
  2298. GB-EUC-H
  2299. GB-EUC-V
  2300. GBK-EUC-H
  2301. GBK-EUC-V
  2302. CP936
  2303. EUC-CN
  2304. SimSun
  2305. GBK-EUC-H
  2306. ETEN-B5-H
  2307. ETEN-B5-V
  2308. CP950
  2309. MingLiU
  2310. ETen-B5-H
  2311. 90MS-RKSJ-H
  2312. 90MS-RKSJ-V
  2313. 90MSP-RKSJ-H
  2314. EUC-H
  2315. EUC-V
  2316. CP932
  2317. MS-Mincyo
  2318. 90ms-RKSJ-H
  2319. EUC-H
  2320. EUC-V
  2321. KSC-EUC-H
  2322. KSC-EUC-V
  2323. KSCMS-UHC-H
  2324. KSCMS-UHC-HW-H
  2325. KSCMS-UHC-HW-V
  2326. CP949
  2327. DotumChe
  2328. KSC-EUC-H
  2329. CP1256
  2330. ISO8859-6
  2331. THIS    
  2332. PDFHANDLE
  2333. LSTARTED
  2334. LLERROR
  2335. HPDF_NEW
  2336. CANCELREPORT
  2337. _STAT
  2338. HPDF_SETCOMPRESSIONMODE
  2339. HPDF_SETPAGEMODE    
  2340. NPAGEMODE
  2341. WRITEPDFINFORMATION
  2342. ENCRYPTPDF
  2343. CLEARPDFERRORS
  2344. ADDBLANKPAGE
  2345. LCCODEPAGE    
  2346. CCODEPAGE
  2347. _LSCHINESE
  2348. CDEFAULTFONT
  2349. HPDF_USECNSFONTS
  2350. HPDF_USECNSENCODINGS
  2351. _LTCHINESE
  2352. HPDF_USECNTFONTS
  2353. HPDF_USECNTENCODINGS
  2354. _LJAPANESE
  2355. HPDF_USEJPFONTS
  2356. HPDF_USEJPENCODINGS
  2357. _LKOREAN
  2358. HPDF_USEKRFONTS
  2359. HPDF_USEKRENCODINGS
  2360. LRIGHTTOLEFT
  2361. HPDF_New
  2362. HPDF_Free
  2363. HPDF_SaveToFile
  2364. HPDF_GetError
  2365. HPDF_ResetError
  2366. HPDF_SetPageMode
  2367. HPDF_GetCurrentPage
  2368. HPDF_AddPage
  2369. HPDF_Page_SetWidth
  2370. HPDF_Page_SetHeight
  2371. HPDF_GetFont
  2372. HPDF_LoadTTFontFromFile
  2373. HPDF_GetEncoder
  2374. HPDF_GetCurrentEncoder
  2375. HPDF_SetCurrentEncoder
  2376. HPDF_Encoder_GetType
  2377. HPDF_Encoder_GetByteType
  2378. HPDF_Encoder_GetUnicode
  2379. HPDF_Encoder_GetWritingMode
  2380. HPDF_UseJPEncodings
  2381. HPDF_UseKREncodings
  2382. HPDF_UseCNSEncodings
  2383. HPDF_UseCNTEncodings
  2384. HPDF_LoadPngImageFromFile
  2385. HPDF_LoadJpegImageFromFile
  2386. HPDF_Image_GetWidth
  2387. HPDF_Image_GetHeight
  2388. HPDF_SetInfoAttr
  2389. HPDF_SetPassword
  2390. HPDF_SetPermission
  2391. HPDF_SetEncryptionMode
  2392. HPDF_SetCompressionMode
  2393. HPDF_Font_MeasureText
  2394. HPDF_Page_GetWidth
  2395. HPDF_Page_GetHeight
  2396. HPDF_Page_TextWidth
  2397. HPDF_Page_GetCurrentFont
  2398. HPDF_Page_MeasureText
  2399. HPDF_Page_GetRGBFill
  2400. HPDF_Page_GetCurrentFont
  2401. HPDF_Page_GetCurrentFontSize
  2402. HPDF_Page_SetLineWidth
  2403. HPDF_Page_SetDash
  2404. HPDF_Page_MoveTo
  2405. HPDF_Page_LineTo
  2406. HPDF_Page_ClosePath
  2407. HPDF_Page_Rectangle
  2408. HPDF_Page_Concat
  2409. HPDF_Page_SetCharSpace
  2410. HPDF_Page_SetWordSpace
  2411. HPDF_Page_SetHorizontalScalling
  2412. HPDF_Page_SetTextLeading
  2413. HPDF_Page_SetTextRise
  2414. HPDF_Page_Stroke
  2415. HPDF_Page_ClosePathStroke
  2416. HPDF_Page_Fill
  2417. HPDF_Page_FillStroke
  2418. HPDF_Page_EndPath
  2419. HPDF_Page_BeginText
  2420. HPDF_Page_EndText
  2421. HPDF_Page_SetFontAndSize
  2422. HPDF_Page_SetTextRenderingMode
  2423. HPDF_Page_MoveTextPos
  2424. HPDF_Page_MoveToNextLine
  2425. HPDF_Page_SetRGBFill
  2426. HPDF_Page_SetRGBStroke
  2427. HPDF_Page_Ellipse
  2428. HPDF_Page_DrawImage
  2429. HPDF_Page_TextRect
  2430. HPDF_Page_TextOut
  2431. HPDF_Page_SetTextMatrix
  2432. HPDF_Page_ShowText
  2433. HPDF_Page_CurveTo
  2434. INTEGER
  2435. LENCRYPTDOCUMENT
  2436. CMASTERPASSWORD
  2437. CUSERPASSWORD
  2438. HPDF_SETPASSWORD    
  2439. PDFHANDLE
  2440. LNPERMIT    
  2441. LCANPRINT
  2442. LCANEDIT
  2443. LCANCOPY
  2444. LCANADDNOTES
  2445. _STAT
  2446. HPDF_SETPERMISSION
  2447. NENCRIPTIONLEVEL
  2448. HPDF_SETENCRYPTIONMODE0
  2449. LDEFAULTMODE
  2450. LNWIDTH
  2451. LNHEIGHT
  2452. GETPAGEWIDTH
  2453. GETPAGEHEIGHT
  2454. NPAGEHEIGHT
  2455. NPAGEWIDTH
  2456. OPAGE
  2457. HPDF_ADDPAGE    
  2458. PDFHANDLE
  2459. _STAT
  2460. HPDF_PAGE_SETWIDTH
  2461. HPDF_PAGE_SETHEIGHT
  2462. _CWMPICTURE
  2463. _NWMW
  2464. _NWMH
  2465. PROCESSPICTURES
  2466. _NWMY
  2467. _NWMXo
  2468. Courier
  2469. Courier
  2470. Courier-Bold
  2471. Courier-Bold
  2472. Courier-Oblique
  2473. Courier-Oblique
  2474. Courier-BoldOblique
  2475. Courier-BoldOblique
  2476. Helvetica
  2477. Helvetica
  2478. Helvetica-Bold
  2479. Helvetica-Bold
  2480. Helvetica-Oblique
  2481. Helvetica-Oblique
  2482. Helvetica-BoldOblique
  2483. Helvetica-BoldOblique
  2484. Times-Roman
  2485. Times-Roman
  2486. Times-Bold
  2487. Times-Bold
  2488. Times-Italic
  2489. Times-Italic
  2490. Times-BoldItalic
  2491. Times-BoldItalic
  2492. Symbol
  2493. Symbol
  2494. ZapfDingbats
  2495. ZapfDingbats
  2496. OFONTS
  2497. STRING
  2498. STRING
  2499. STRING
  2500. SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts
  2501. Software\Microsoft\Windows NT\CurrentVersion\Fonts6
  2502. Registry
  2503. Fonts\
  2504.  (TrueType)
  2505. Fonts\
  2506. Negrito
  2507. Italic
  2508. negrita
  2509. Italic
  2510. cursiva
  2511. Italic
  2512. Italique
  2513. Fonts\
  2514.  (TrueType)
  2515. LCFONTNAME
  2516. LCFILENAME
  2517. LCFOLDER
  2518. THIS    
  2519. OREGISTRY
  2520. CLASSLIBRARY
  2521. _CWINFOLDER
  2522. READREGISTRYSTRING
  2523. LNLANGID
  2524. NSYSTEMLANGID
  2525. LURETURN
  2526. HPDF_LOADTTFONTFROMFILE    
  2527. PDFHANDLE
  2528. LEMBEDFONT
  2529. LOEXC
  2530. CLEARPDFERRORSw
  2531. STRING
  2532. INTEGER
  2533. INTEGER
  2534. GPBITMAP
  2535. ffc\_gdiplus.vcx
  2536. GpBitmap
  2537. _GdiPlus.vcx
  2538. GPBITMAP
  2539. ffc\_gdiplus.vcx
  2540. GpBitmap
  2541. _GdiPlus.vcx
  2542. image/png
  2543. image/jpeg6
  2544. LCFILE
  2545. TNWIDTH
  2546. TNHEIGHT
  2547. TLFILE
  2548. LOBMP
  2549. CREATEFROMFILE
  2550. IMAGEHEIGHT
  2551. IMAGEWIDTH
  2552. LHBITMAP
  2553. LNSTATUS
  2554. PDFXGDIPCLONEBITMAPAREAI
  2555. PIXELFORMAT    
  2556. GETHANDLE
  2557. LNHANDLE    
  2558. LOCROPPED    
  2559. SETHANDLE
  2560. SETRESOLUTION
  2561. HORIZONTALRESOLUTION
  2562. VERTICALRESOLUTION
  2563. LCEXT    
  2564. LCENCODER
  2565. LCCROPPEDFILE
  2566. GETTEMPFILE
  2567. SAVETOFILE
  2568. HPDF_LOADPNGIMAGEFROMFILE    
  2569. PDFHANDLE
  2570. HPDF_LOADJPEGIMAGEFROMFILE
  2571. ISTEMPFILE
  2572. LOEXC-
  2573. STRING
  2574. NUMBER
  2575. NUMBER
  2576. INTEGER
  2577. STRING
  2578. INTEGER
  2579. STRING
  2580. LCTEXT
  2581. NWIDTH
  2582. LNANCHO
  2583. LCTEMP
  2584. LNLEN    
  2585. LCRETORNO
  2586. HPDF_PAGE_TEXTWIDTH
  2587. OPAGE
  2588. STRING
  2589. STRING
  2590. BOOLEAN
  2591. STRING
  2592. _TempDynamics
  2593. _TempDynamics
  2594. _TempDynamicsN
  2595. Empty
  2596. FIELD
  2597. SHAPE
  2598. PICTURE
  2599. FIELD
  2600. cValue
  2601. cExecWhen
  2602. cFontName
  2603. nFontSizeCC
  2604. nFontStyleCC
  2605. nPenRedCCCC
  2606. nPenGreenCCCC
  2607. nPenBlueCCCC
  2608. nPenRed
  2609. nPenGreen
  2610. nPenBlue
  2611. nFillRedCCCC
  2612. nFillGreenCCCC
  2613. nFillBlueCCCC
  2614. nFillRed
  2615. nFillGreen
  2616. nFillBlue
  2617. SHAPE
  2618. IMAGE
  2619. cExecWhen
  2620. nWidthCC
  2621. nHeightCC
  2622. Microsoft.VFP.Reporting.Builder.Rotate
  2623. nRotationDegreeCC
  2624. LCSTYLE
  2625. LCTYPE
  2626. LBRETURN
  2627. LCCURSOR
  2628. THIS    
  2629. ODYNAMICS
  2630. _TEMPDYNAMICS
  2631. EXECWHEN
  2632. SCRIPT
  2633. FNAME
  2634. FSIZE
  2635. FSTYLE
  2636. PENRGB
  2637. FILLRGB
  2638. WIDTH
  2639. HEIGHT
  2640. EXECUTE
  2641. STRING
  2642. INTEGER
  2643. NUMBER
  2644. NUMBER
  2645. NUMBER
  2646. NUMBER
  2647. NUMBER
  2648. NUMBER
  2649. NUMBER
  2650. NUMBER
  2651. NUMBER
  2652. STRING
  2653. STRING
  2654. INTEGER
  2655. BOOLEAN
  2656. INTEGER
  2657. NUMBER
  2658. INTEGER
  2659. STRING
  2660. INTEGER
  2661. STRING
  2662. INTEGER
  2663. INTEGER
  2664. INTEGER
  2665. INTEGER
  2666. STRING
  2667. INTEGER
  2668. INTEGER
  2669. FIELD
  2670. cFontName
  2671. nFontSize
  2672. nFontStyle
  2673. cValue
  2674. nPenRed
  2675. nPenBlue
  2676. nPenGreen
  2677. nFillRed
  2678. nFillBlue
  2679. nFillGreen
  2680. nRotationDegree
  2681. NUMBER
  2682. LCFONTFACE
  2683. LIFONTSTYLE
  2684. LNFONTSIZE
  2685. LNPENRED
  2686. LNPENGREEN    
  2687. LNPENBLUE    
  2688. LNFILLRED
  2689. LNFILLGREEN
  2690. LNFILLBLUE
  2691. NLEFT
  2692. LCCONTENTS
  2693. LCFILLCHAR
  2694. LNOFFSET    
  2695. LBSTRETCH
  2696. LNCODEPAGE
  2697. NHEIGHT
  2698. NWIDTH
  2699. LCSTYLE
  2700. LNMODE
  2701. LCUSER
  2702. LCORIGCONTENTS
  2703. LNTIMES    
  2704. LCTABREPL
  2705. LRIGHTTOLEFT
  2706. XFCREVERTSTRING
  2707. LNOCURRENCES
  2708. LNANCHO
  2709. LNFONTHANDLE
  2710. LNALTO
  2711. LCUNDERLINETEXT
  2712. LNROTATE
  2713. LNCHARWIDTH
  2714. LDEFAULTMODE    
  2715. _GOHELPER    
  2716. OLISTENER
  2717. CMAINALIAS
  2718. LCALIAS
  2719. LCMAINALIAS
  2720. LNREC
  2721. DBFRECNO
  2722. PROCESSDYNAMICS    
  2723. ODYNAMICS    
  2724. CFONTNAME    
  2725. NFONTSIZE
  2726. NFONTSTYLE
  2727. CVALUE
  2728. NPENRED
  2729. NPENBLUE    
  2730. NPENGREEN
  2731. NFILLRED    
  2732. NFILLBLUE
  2733. NFILLGREEN
  2734. NROTATIONDEGREE
  2735. LOEXC    
  2736. LNPENSIZE
  2737. LNPENPAT    
  2738. LNFILLPAT
  2739. LNOBJCONTTYPE
  2740. PROCESSSHAPES
  2741. NPAGEHEIGHT
  2742. GETFONTHANDLE
  2743. LCIMAGE
  2744. LNTXTW
  2745. LNTXTH
  2746. STRINGTOPIC
  2747. PROCESSPICTURES2
  2748. _STAT
  2749. HPDF_PAGE_BEGINTEXT
  2750. OPAGE
  2751. HPDF_PAGE_SETFONTANDSIZE
  2752. CTEXTSTYLE
  2753. HPDF_PAGE_TEXTWIDTH
  2754. HPDF_PAGE_GETCURRENTFONTSIZE
  2755. LNFONTHEIGHT2
  2756. PARSEUNDERLINETEXT
  2757. LUNDERLINE
  2758. HPDF_PAGE_SETRGBFILL
  2759. HPDF_PAGE_SETTEXTLEADING
  2760. LNLEN
  2761. LNCHARS
  2762. LNREALWIDTH
  2763. LCCURRTEXT
  2764. LCREMAININGTEXT
  2765. LNLINEHEIGHT
  2766. LNLINESAVAIL
  2767. LNCURRLINE
  2768. GETPARHEIGHT
  2769. HPDF_FONT_MEASURETEXT
  2770. _STAT2
  2771. HPDF_PAGE_TEXTRECT
  2772. LNRAD
  2773. HPDF_PAGE_SETTEXTMATRIX
  2774. HPDF_PAGE_SHOWTEXT
  2775. HPDF_PAGE_ENDTEXT    
  2776. LLSUCCESS
  2777. INTEGER
  2778. INTEGER
  2779. INTEGER
  2780. INTEGER
  2781. INTEGER
  2782. INTEGER
  2783. NUMBER
  2784. NUMBER
  2785. NUMBER
  2786. NUMBER
  2787. INTEGER
  2788. INTEGER
  2789. INTEGER
  2790. INTEGER
  2791. STRING
  2792. INTEGER
  2793. INTEGER
  2794. lnObjectContinuationTypeb
  2795. STRING
  2796. INTEGER
  2797. BOOLEAN
  2798. BOOLEAN
  2799. BOOLEAN
  2800. BOOLEAN
  2801. BOOLEAN
  2802. INTEGER
  2803. INTEGER
  2804. INTEGER
  2805. SHAPE
  2806. nHeight
  2807. nWidth
  2808. NUMBER
  2809. NUMBER
  2810. NUMBER
  2811. NUMBER
  2812. NUMBER
  2813. NUMBER
  2814. LNFILLRED
  2815. LNFILLGREEN
  2816. LNFILLBLUE
  2817. LNPENRED
  2818. LNPENGREEN    
  2819. LNPENBLUE
  2820. NLEFT
  2821. NWIDTH
  2822. NHEIGHT
  2823. LNOFFSET    
  2824. LNPENSIZE
  2825. LNPENPAT    
  2826. LNFILLPAT
  2827. LCSTYLE
  2828. LNMODE
  2829. LNOBJECTCONTINUATIONTYPE
  2830. TLSKIPBORDER
  2831. LCDASH
  2832. NTOP2
  2833. LDECOMPOSERECT
  2834. LDOTOPLINE
  2835. LDOLEFTLINE
  2836. LDORIGHTLINE
  2837. LDOBOTTOMLINE
  2838. LINE_LNPENRED
  2839. LINE_LNPENGREEN
  2840. LINE_LNPENBLUE
  2841. PROCESSDYNAMICS    
  2842. ODYNAMICS
  2843. NPAGEHEIGHT
  2844. _STAT
  2845. HPDF_PAGE_SETRGBFILL
  2846. OPAGE
  2847. HPDF_PAGE_SETRGBSTROKE
  2848. HPDF_PAGE_SETLINEWIDTH
  2849. HPDF_PAGE_SETDASH
  2850. HPDF_PAGE_RECTANGLE
  2851. HPDF_PAGE_MOVETO
  2852. HPDF_PAGE_LINETO
  2853. HPDF_PAGE_CURVETO
  2854. HPDF_PAGE_ELLIPSE
  2855. HPDF_PAGE_STROKE
  2856. HPDF_PAGE_FILLSTROKE
  2857. PROCESSLINES
  2858. STRING
  2859. INTEGER
  2860. NUMBER
  2861. NUMBER
  2862. NUMBER
  2863. NUMBER
  2864. NUMBER
  2865. NUMBER
  2866. NUMBER
  2867. NUMBER
  2868. NUMBER
  2869. STRING
  2870. STRING
  2871. INTEGER
  2872. INTEGER
  2873. INTEGER
  2874. NUMBER
  2875. STRING
  2876. STRING
  2877. INTEGER
  2878. NUMBER
  2879. STRING
  2880. INTEGER
  2881. STRING
  2882. INTEGER
  2883. INTEGER
  2884. LABEL
  2885. nRotationDegree
  2886. 333333
  2887. NUMBER
  2888. LCFONTFACE
  2889. LIFONTSTYLE
  2890. LNFONTSIZE
  2891. LNPENRED
  2892. LNPENGREEN    
  2893. LNPENBLUE    
  2894. LNFILLRED
  2895. LNFILLGREEN
  2896. LNFILLBLUE
  2897. NLEFT
  2898. LCCONTENTS
  2899. LCFILLCHAR
  2900. LNOFFSET
  2901. NWIDTH
  2902. LNCODEPAGE
  2903. NHEIGHT    
  2904. LCPICTURE
  2905. LCSTYLE
  2906. LNMODE
  2907. LNALTO
  2908. LNTXTWIDTH
  2909. LNFONTHANDLE
  2910. LCUNDERLINETEXT
  2911. LNROTATE
  2912. LNCHARWIDTH
  2913. PROCESSDYNAMICS    
  2914. ODYNAMICS
  2915. NROTATIONDEGREE    
  2916. LNPENSIZE
  2917. LNPENPAT    
  2918. LNFILLPAT
  2919. PROCESSSHAPES
  2920. NPAGEHEIGHT
  2921. GETFONTHANDLE
  2922. LCIMAGE
  2923. LNTXTW
  2924. LNTXTH
  2925. STRINGTOPIC
  2926. PROCESSPICTURES2
  2927. CTEXTSTYLE
  2928. _STAT
  2929. HPDF_PAGE_BEGINTEXT
  2930. OPAGE
  2931. HPDF_PAGE_SETFONTANDSIZE
  2932. HPDF_PAGE_TEXTWIDTH
  2933. HPDF_PAGE_SETRGBSTROKE
  2934. HPDF_PAGE_SETRGBFILL
  2935. LUNDERLINE
  2936. LCORIGCONTENTS
  2937. LNPARAG
  2938. LNPARHEIGHT
  2939. LCPAR
  2940. LNPARTOP
  2941. LNALIGNMODE
  2942. LNPARWIDTH
  2943. GETPARHEIGHT
  2944. HPDF_PAGE_TEXTRECT
  2945. LNRAD
  2946. HPDF_PAGE_SETTEXTMATRIX
  2947. HPDF_PAGE_SHOWTEXT
  2948. HPDF_PAGE_ENDTEXT{
  2949. NUMBER
  2950. NUMBER
  2951. NUMBER
  2952. NUMBER
  2953. STRING
  2954. NUMBER
  2955. INTEGER
  2956. INTEGER
  2957. STRING
  2958. STRING
  2959. STRING
  2960. INTEGER
  2961. GPIMAGE
  2962. FFC\_GdiPlus.vcx
  2963. GpImage
  2964. _GdiPlus.vcx
  2965. image/png
  2966. IMAGE
  2967. Image
  2968. Collection
  2969. NLEFT
  2970. NWIDTH
  2971. NHEIGHT
  2972. LCCONTENTS
  2973. GDIPLUSIMAGE
  2974. LNOFFSET
  2975. LIPICTUREMODE
  2976. LCSTYLE
  2977. LCFILE
  2978. LCFILE2
  2979. LNHANDLE
  2980. NPAGEHEIGHT
  2981. LNPICWIDTH
  2982. LNPICHEIGHT
  2983. GETTEMPFILE
  2984. LOIMAGE    
  2985. SETHANDLE
  2986. IMAGEWIDTH
  2987. IMAGEHEIGHT
  2988. SAVETOFILE
  2989. HPDF_LOADPNGIMAGEFROMFILE    
  2990. PDFHANDLE
  2991. GETPICTUREHANDLE    
  2992. CROPIMAGE
  2993. _STAT
  2994. HPDF_PAGE_DRAWIMAGE
  2995. OPAGE
  2996. LOVFPIMG
  2997. PICTURE
  2998. WIDTH
  2999. HEIGHT
  3000. LNHORFACTOR
  3001. LNVERTFACTOR
  3002. LNRESIZEFACTOR
  3003. LNISOWIDTH
  3004. LNISOHEIGHT
  3005. OTEMPIMAGESCOLLECTION
  3006. INTEGER
  3007. INTEGER
  3008. INTEGER
  3009. NUMBER
  3010. NUMBER
  3011. NUMBER
  3012. NUMBER
  3013. INTEGER
  3014. NUMBER
  3015. INTEGER
  3016. STRING
  3017. STRING
  3018. LNPENRED
  3019. LNPENGREEN    
  3020. LNPENBLUE
  3021. NLEFT
  3022. NWIDTH
  3023. NHEIGHT    
  3024. LNPENSIZE
  3025. LNOFFSET
  3026. LNPENPAT
  3027. LCSTYLE
  3028. LCDASH
  3029. _STAT
  3030. HPDF_PAGE_SETRGBSTROKE
  3031. OPAGE
  3032. NPAGEHEIGHT
  3033. HPDF_PAGE_SETDASH
  3034. HPDF_PAGE_SETLINEWIDTH
  3035. HPDF_PAGE_MOVETO
  3036. HPDF_PAGE_LINETO
  3037. HPDF_PAGE_STROKE
  3038. STRING
  3039. STRING
  3040. INTEGER
  3041. INTEGER
  3042. STRING
  3043. INTEGER
  3044. STRING
  3045. Collection
  3046. Image
  3047. GpBitmap
  3048. _GdiPlus.vcx
  3049. image/jpeg
  3050. GPBITMAP
  3051. GpBitmap
  3052. _GdiPlus.vcx
  3053. GPBITMAP
  3054. STRING
  3055. STRING
  3056. GpBitmap
  3057. _GdiPlus.vcx
  3058. GPBITMAP
  3059. \ffc\_Gdiplus.vcx
  3060. GpBitmap
  3061. _GdiPlus.vcx
  3062. GPGRAPHICS
  3063. \ffc\_Gdiplus.vcx
  3064. GpGraphics
  3065. _GdiPlus.vcx
  3066. image/png
  3067. LCINTERNALNAME
  3068. LCEXTERNALNAME
  3069. LNPICWIDTH
  3070. LNPICHEIGHT
  3071. LCFILESTREAM
  3072. LNHANDLE
  3073. LCEXTENSION
  3074. OPICTUREHANDLES
  3075. GETKEY
  3076. LOEXC
  3077. LOVFPIMG
  3078. LCFILE
  3079. PICTURE
  3080. GETTEMPFILE
  3081. LOIMAGE
  3082. CREATEFROMFILE
  3083. SETRESOLUTION
  3084. WIDTH
  3085. HEIGHT
  3086. SAVETOFILE
  3087. FILESIZE
  3088. ISTEMPFILE
  3089. HPDF_LOADJPEGIMAGEFROMFILE    
  3090. PDFHANDLE
  3091. LOBMPTMP
  3092. IMAGEWIDTH
  3093. IMAGEHEIGHT
  3094. ISPIXELALPHA
  3095. GETPIXEL
  3096. HPDF_LOADPNGIMAGEFROMFILE
  3097. CLEARPDFERRORS
  3098. LOBMP2
  3099. LCFILE2
  3100. LOBMP3
  3101. CREATE
  3102. HORIZONTALRESOLUTION
  3103. VERTICALRESOLUTION
  3104. LOGFX
  3105. CREATEFROMIMAGE
  3106. CLEAR
  3107. DRAWIMAGEAT
  3108. ITEMj
  3109. TNARGB
  3110. TLALPHAISUSEDg
  3111. REPORTLISTENER
  3112. Invalid parameter. Report listener not available
  3113. Error
  3114. GPIMAGE
  3115. \FFC\_Gdiplus.vcx
  3116. TEMP5
  3117. Temp_WM_
  3118. image/
  3119. %  - 
  3120. 100%  - CCC
  3121. TOLISTENER
  3122. TCOUTPUTDBF
  3123. TNWIDTH
  3124. TNHEIGHT
  3125. OACTIVELISTENER    
  3126. QUIETMODE
  3127. LNSECS
  3128. DOFOXYTHERM    
  3129. _GOHELPER
  3130. _INITSTATUSTEXT
  3131. LISTENERDATASESSION
  3132. LNSELECT
  3133. LLEXIT
  3134. LDEFAULTMODE
  3135. NPAGEWIDTH
  3136. NPAGEHEIGHT
  3137. LNPGFROM
  3138. LNPGTO
  3139. _CLAUSENRANGEFROM
  3140. _CLAUSENRANGETO
  3141. LUSINGWATERMARK
  3142. LCTEMPFILE
  3143. LCTYPE
  3144. LOBMP
  3145. CWATERMARKIMAGE
  3146. OWATERMARKBMP
  3147. SAVETOFILE
  3148. _CWMPICTURE
  3149. LNWIDTH
  3150. LNHEIGHT
  3151. NWATERMARKWIDTHRATIO
  3152. NWATERMARKHEIGHTRATIO
  3153. _NWMX
  3154. _NWMY
  3155. _NWMW
  3156. _NWMH
  3157. BEFOREREPORT
  3158. RENDER
  3159. FRXRECNO
  3160. WIDTH
  3161. HEIGHT
  3162. CONTTYPE
  3163. UNCONTENTS    
  3164. LNPERCENT
  3165. LNLASTPERCENT
  3166. LNDELAY    
  3167. LNTOTRECS
  3168. LNREC
  3169. _SECONDSTEXT
  3170. _RUNSTATUSTEXT
  3171. AFTERREPORT
  3172. UNLOADREPORT
  3173. GPRECTANGLE
  3174. \ffc\_Gdiplus.vcx
  3175. GPRectangle
  3176. _Gdiplus.vcx
  3177. GPFont
  3178. _Gdiplus.vcx
  3179. GPGRAPHICS
  3180. \ffc\_Gdiplus.vcx
  3181. GpGraphics
  3182. _Gdiplus.vcx
  3183. 333333
  3184. GPSIZE
  3185. \ffc\_Gdiplus.vcx
  3186. TCTEXT
  3187. TCFONTNAME
  3188. TNSIZE
  3189. TCSTYLE
  3190. TNLEFT
  3191. TNTOP
  3192. TNWIDTH
  3193. TNHEIGHT
  3194. LNFACTOR
  3195. LOFONT
  3196. LNCHARS
  3197. LNLINES
  3198. LNHEIGHT
  3199. LNWIDTH
  3200. LORECT
  3201. CREATE
  3202. LOGFX
  3203. LDEFAULTMODE    
  3204. SETHANDLE
  3205. ISSUCCESSOR
  3206. SHAREDGDIPLUSGRAPHICS
  3207. GDIPLUSGRAPHICS
  3208. CREATEFROMHWND
  3209. PAGEUNIT    
  3210. PAGESCALE
  3211. LOSIZE
  3212. MEASURESTRINGA    
  3213. GDIPRECTF>
  3214. GPRECTANGLE
  3215. \ffc\_Gdiplus.vcx
  3216. GPRectangle
  3217. GPGRAPHICS
  3218. ffc\_gdiplus.vcx
  3219. gpGraphics
  3220. _gdiplus.vcx
  3221. 333333
  3222. GPFONT
  3223. ffc\_gdiplus.vcx
  3224. gpFont
  3225. _gdiplus.vcx
  3226. GPSTRINGFORMAT
  3227. ffc\_gdiplus.vcx
  3228. gpStringFormat
  3229. _gdiplus.vcx
  3230. GPCOLOR
  3231. ffc\_gdiplus.vcx
  3232. gpColor
  3233. _gdiplus.vcx
  3234. GPSOLIDBRUSH
  3235. ffc\_gdiplus.vcx
  3236. gpSolidBrush
  3237. _gdiplus.vcx
  3238. GPSIZE
  3239. ffc\_gdiplus.vcx
  3240. GPBITMAP
  3241. ffc\_gdiplus.vcx
  3242. gpBitmap
  3243. _gdiplus.vcx
  3244. GPGRAPHICS
  3245. ffc\_gdiplus.vcx
  3246. gpGraphics
  3247. _gdiplus.vcx
  3248. 333333
  3249. image/png
  3250. TCSTRING
  3251. TCFONT
  3252. TNSIZE
  3253. TNALIGN
  3254. LNFACTOR
  3255. LORECT
  3256. LOGFX0
  3257. CREATEFROMHWND
  3258. PAGEUNIT    
  3259. PAGESCALE
  3260. LOFONT
  3261. CREATE
  3262. LOSTRFMT
  3263. LOCOLOR
  3264. LOBRUSH
  3265. LOSIZE
  3266. MEASURESTRINGA    
  3267. GDIPRECTF
  3268. LOBMP
  3269. LOGFX
  3270. CREATEFROMIMAGE
  3271. CLEAR
  3272. DRAWSTRINGA
  3273. LCTEMPFILE
  3274. GETTEMPFILE
  3275. SAVETOFILE
  3276. TCFILE
  3277. TNLEFT
  3278. TNTOP
  3279. TNWIDTH
  3280. TNHEIGHT
  3281. LNHANDLE
  3282. HPDF_LOADPNGIMAGEFROMFILE
  3283. THIS    
  3284. PDFHANDLE
  3285. _STAT
  3286. HPDF_PAGE_DRAWIMAGE
  3287. OPAGE
  3288. ISTEMPFILE
  3289. LCFILEa
  3290. PDFx error in CC
  3291. Error code : 
  3292. Description: 
  3293. Page: 
  3294. Object: 
  3295. Press 'Retry' to debug the application.
  3296. Error
  3297. PDFx error in CC
  3298. Error code  : 
  3299. Description : 
  3300. Object: 
  3301. Error
  3302. TNSTATUS
  3303. _STAT
  3304. LNHPDF_ERR
  3305. LCHEX
  3306. HPDF_GETERROR    
  3307. PDFHANDLE
  3308. HPDF_RESETERROR
  3309. LSHOWERRORS    
  3310. STARTMODE
  3311. LNOPTION
  3312. _ERRORINFO
  3313. NCURRENTPAGE
  3314. COBJECTTORENDERC
  3315. HPDF_ARRAY_COUNT_ERR                      
  3316. HPDF_ARRAY_ITEM_NOT_FOUND                 
  3317. HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           
  3318. HPDF_BINARY_LENGTH_ERR                    
  3319. HPDF_CANNOT_GET_PALLET                    
  3320. HPDF_DICT_COUNT_ERR                       
  3321. HPDF_DICT_ITEM_NOT_FOUND                  
  3322. HPDF_DICT_ITEM_UNEXPECTED_TYPE            
  3323. HPDF_DICT_STREAM_LENGTH_NOT_FOUND         
  3324. HPDF_DOC_ENCRYPTDICT_NOT_FOUND            
  3325. HPDF_DOC_INVALID_OBJECT                   
  3326. HPDF_DUPLICATE_REGISTRATION               
  3327. HPDF_EXCEED_JWW_CODE_NUM_LIMIT            
  3328. HPDF_ENCRYPT_INVALID_PASSWORD             
  3329. HPDF_ERR_UNKNOWN_CLASS                    
  3330. HPDF_EXCEED_GSTATE_LIMIT                  
  3331. HPDF_FAILD_TO_ALLOC_MEM                   
  3332. HPDF_FILE_IO_ERROR                        
  3333. HPDF_FILE_OPEN_ERROR                      
  3334. HPDF_FONT_EXISTS                          
  3335. HPDF_FONT_INVALID_WIDTHS_TABLE            
  3336. HPDF_INVALID_AFM_HEADER                   
  3337. HPDF_INVALID_ANNOTATION                   
  3338. HPDF_INVALID_BIT_PER_COMPONENT            
  3339. HPDF_INVALID_CHAR_MATRICS_DATA            
  3340. HPDF_INVALID_COLOR_SPACE                  
  3341. HPDF_INVALID_COMPRESSION_MODE             
  3342. HPDF_INVALID_DATE_TIME                    
  3343. HPDF_INVALID_DESTINATION                  
  3344. HPDF_INVALID_DOCUMENT                     
  3345. HPDF_INVALID_DOCUMENT_STATE               
  3346. HPDF_INVALID_ENCODER                      
  3347. HPDF_INVALID_ENCODER_TYPE                 
  3348. HPDF_INVALID_ENCODING_NAME                
  3349. HPDF_INVALID_ENCRYPT_KEY_LEN              
  3350. HPDF_INVALID_FONTDEF_DATA                 
  3351. HPDF_INVALID_FONTDEF_TYPE                 
  3352. HPDF_INVALID_FONT_NAME                    
  3353. HPDF_INVALID_IMAGE                        
  3354. HPDF_INVALID_JPEG_DATA                    
  3355. HPDF_INVALID_N_DATA                       
  3356. HPDF_INVALID_OBJECT                       
  3357. HPDF_INVALID_OBJ_ID                       
  3358. HPDF_INVALID_OPERATION                    
  3359. HPDF_INVALID_OUTLINE                      
  3360. HPDF_INVALID_PAGE                         
  3361. HPDF_INVALID_PAGES                        
  3362. HPDF_INVALID_PARAMETER                    
  3363. HPDF_INVALID_PNG_IMAGE                    
  3364. HPDF_INVALID_STREAM                       
  3365. HPDF_MISSING_FILE_NAME_ENTRY              
  3366. HPDF_INVALID_TTC_FILE                     
  3367. HPDF_INVALID_TTC_INDEX                    
  3368. HPDF_INVALID_WX_DATA                      
  3369. HPDF_ITEM_NOT_FOUND                       
  3370. HPDF_LIBPNG_ERROR                         
  3371. HPDF_NAME_INVALID_VALUE                   
  3372. HPDF_NAME_OUT_OF_RANGE                    
  3373. HPDF_PAGE_INVALID_PARAM_COUNT             
  3374. HPDF_PAGES_MISSING_KIDS_ENTRY             
  3375. HPDF_PAGE_CANNOT_FIND_OBJECT              
  3376. HPDF_PAGE_CANNOT_GET_ROOT_PAGES           
  3377. HPDF_PAGE_CANNOT_RESTORE_GSTATE           
  3378. HPDF_PAGE_CANNOT_SET_PARENT               
  3379. HPDF_PAGE_FONT_NOT_FOUND                  
  3380. HPDF_PAGE_INVALID_FONT                    
  3381. HPDF_PAGE_INVALID_FONT_SIZE               
  3382. HPDF_PAGE_INVALID_GMODE                   
  3383. HPDF_PAGE_INVALID_INDEX                   
  3384. HPDF_PAGE_INVALID_ROTATE_VALUE            
  3385. HPDF_PAGE_INVALID_SIZE                    
  3386. HPDF_PAGE_INVALID_XOBJECT                 
  3387. HPDF_PAGE_OUT_OF_RANGE                    
  3388. HPDF_REAL_OUT_OF_RANGE                    
  3389. HPDF_STREAM_EOF                           
  3390. HPDF_STREAM_READLN_CONTINUE               
  3391. HPDF_STRING_OUT_OF_RANGE                  
  3392. HPDF_THIS_FUNC_WAS_SKIPPED                
  3393. HPDF_TTF_CANNOT_EMBEDDING_FONT            
  3394. HPDF_TTF_INVALID_CMAP                     
  3395. HPDF_TTF_INVALID_FOMAT                    
  3396. HPDF_TTF_MISSING_TABLE                    
  3397. HPDF_UNSUPPORTED_FONT_TYPE                
  3398. HPDF_UNSUPPORTED_FUNC                     
  3399. HPDF_UNSUPPORTED_JPEG_FORMAT              
  3400. HPDF_UNSUPPORTED_TYPE1_FONT               
  3401. HPDF_XREF_COUNT_ERR                       
  3402. HPDF_ZLIB_ERROR                           
  3403. HPDF_INVALID_PAGE_INDEX                   
  3404. HPDF_INVALID_URI                          
  3405. HPDF_PAGE_LAYOUT_OUT_OF_RANGE             
  3406. HPDF_PAGE_MODE_OUT_OF_RANGE               
  3407. HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          
  3408. HPDF_ANNOT_INVALID_ICON                   
  3409. HPDF_ANNOT_INVALID_BORDER_STYLE           
  3410. HPDF_PAGE_INVALID_DIRECTION               
  3411. HPDF_INVALID_FONT                         
  3412. HPDF_PAGE_INSUFFICIENT_SPACE              
  3413. HPDF_PAGE_INVALID_DISPLAY_TIME            
  3414. HPDF_PAGE_INVALID_TRANSITION_TIME         
  3415. HPDF_INVALID_PAGE_SLIDESHOW_TYPE          
  3416. HPDF_EXT_GSTATE_OUT_OF_RANGE              
  3417. HPDF_INVALID_EXT_GSTATE                   
  3418. HPDF_EXT_GSTATE_READ_ONLY                 
  3419. Unknown Error
  3420. TNSTATUS*
  3421. TNSTATUS
  3422. _STAT2
  3423. _STAT
  3424. fffff
  3425. fffff
  3426. Collection
  3427. TNWIDTH
  3428. TNHEIGHT
  3429. CLEARPDFERRORS
  3430. LCFILE
  3431. GETPAGEIMG
  3432. LNHOR
  3433. LNVERT    
  3434. LCNEWFILE    
  3435. CROPIMAGE
  3436. PROCESSPICTURES
  3437. OTEMPIMAGESCOLLECTION
  3438. REPORTLISTENER
  3439. LOLISTENER
  3440. OACTIVELISTENER
  3441. LNPAGE
  3442. NCURRENTPAGE
  3443. COMMANDCLAUSES    
  3444. RANGEFROM
  3445. APAGESIMGS
  3446. LNDEVICETYPE
  3447. LCFILE
  3448. LNHANDLE
  3449. GETTEMPFILE
  3450. OUTPUTPAGE[
  3451. LNHPDF_ERR
  3452. LCHEX
  3453. HPDF_GETERROR
  3454. THIS    
  3455. PDFHANDLE
  3456. HPDF_RESETERROR
  3457. LCDATA
  3458. LCRETURN
  3459. LCCONTENTS
  3460. LADUMMY
  3461. TCFONTSTYLE    
  3462. LCNEWFONT
  3463. LNPOS
  3464. AFONTSREPLACED
  3465. CDEFAULTFONTm
  3466. LOBJTYPEMODE
  3467. OFOXYPREVIEWER
  3468. COMMANDCLAUSES
  3469. LOPENVIEWER
  3470. PREVIEW
  3471. TOFILE
  3472. CTARGETFILENAME    
  3473. CDESTFILE
  3474. LCDESTFILE
  3475. COUTPUTPATH
  3476. LCFILE
  3477. _REPORTLISTENER
  3478. CANCELREPORT    
  3479. QUIETMODE
  3480. LQUIETMODE
  3481. LEMBEDFONT
  3482. LPDFEMBEDFONTS    
  3483. LCANPRINT
  3484. LPDFCANPRINT
  3485. LCANEDIT
  3486. LPDFCANEDIT
  3487. LCANCOPY
  3488. LPDFCANCOPY
  3489. LCANADDNOTES
  3490. LPDFCANADDNOTES
  3491. LENCRYPTDOCUMENT
  3492. LPDFENCRYPTDOCUMENT
  3493. CMASTERPASSWORD
  3494. CPDFMASTERPASSWORD
  3495. CUSERPASSWORD
  3496. CPDFUSERPASSWORD
  3497. LSHOWERRORS
  3498. LPDFSHOWERRORS
  3499. CSYMBOLFONTSLIST
  3500. CPDFSYMBOLFONTSLIST
  3501. CPDFAUTHOR    
  3502. CPDFTITLE
  3503. CPDFSUBJECT
  3504. CPDFKEYWORDS
  3505. CPDFCREATOR
  3506. CDEFAULTFONT
  3507. CPDFDEFAULTFONT    
  3508. CCODEPAGE
  3509. LNPGMODE
  3510. NPDFPAGEMODE    
  3511. NPAGEMODE
  3512. GETWATERMARK0
  3513. LCFILE
  3514. LASIZEARRAY
  3515. LCFONTFACE
  3516. LIFONTSTYLE
  3517. _LSCHINESE
  3518. _LTCHINESE
  3519. _LJAPANESE
  3520. _LKOREAN
  3521. LNFONTHANDLE
  3522. HPDF_GETFONT    
  3523. PDFHANDLE
  3524. CDEFAULTFONT
  3525. GETFONTSTYLENAME    
  3526. CCODEPAGE    
  3527. LCPDFFONT
  3528. SEARCHFONT
  3529. CLEARPDFERRORS
  3530. STRING
  3531. Italic
  3532. TISTYLE
  3533. LCFONTSTYLEW
  3534. FP_TMP_
  3535. TCTYPE
  3536. _CTEMPFOLDERF
  3537. FP_TMP_
  3538. TCFILE
  3539. _CTEMPFOLDER
  3540. GPBITMAP
  3541. \ffc\_gdiplus.vcx
  3542. GpBitmap
  3543. COLORMATRIX
  3544. PR_GdiplusHelper.Prg
  3545. GpAttrib
  3546. PR_GdiplusHelper.Prg
  3547. 333333
  3548. 333333
  3549. 333333
  3550. TEMP5
  3551. Temp_WM_
  3552. image/
  3553. OFOXYPREVIEWER
  3554. LCWATERMARKIMAGE
  3555. LNWATERMARKTYPE
  3556. LNWATERMARKTRANSPARENCY
  3557. LNWATERMARKWIDTHRATIO
  3558. LNWATERMARKHEIGHTRATIO
  3559. CWATERMARKIMAGE
  3560. NWATERMARKTYPE
  3561. NWATERMARKTRANSPARENCY
  3562. NWATERMARKWIDTHRATIO
  3563. NWATERMARKHEIGHTRATIO
  3564. LUSINGWATERMARK
  3565. LOBMP
  3566. CREATEFROMFILE
  3567. LOATT
  3568. LCMATRIX
  3569. COLORMATRIX
  3570. APPLYCOLORMATRIX
  3571. LCTEMPFILE
  3572. LCTYPE
  3573. SAVETOFILE
  3574. _CWMPICTURE
  3575. LNWIDTH
  3576. LNHEIGHT    
  3577. LNPGWIDTH
  3578. LNPGHEIGHT
  3579. GETPAGEWIDTH
  3580. GETPAGEHEIGHT
  3581. NPAGEHEIGHT
  3582. NPAGEWIDTH
  3583. _NWMX
  3584. _NWMY
  3585. _NWMW
  3586. _NWMH2
  3587. GetSystemDefaultLangID
  3588. kernel32
  3589. GETSYSTEMDEFAULTLANGID
  3590. KERNEL32
  3591. LNLANGID
  3592. NSYSTEMLANGID
  3593. GETLANGUAGEFROMSYSTEM
  3594. THIS    
  3595. CLEARDLLS
  3596. UPDATEPROPERTIES3
  3597. STRING
  3598. EXCEPTION
  3599. _TempDynamics
  3600. _TempDynamics
  3601. SET CONSOLE &llConsole.
  3602. SET TALK &llTalk.
  3603. LDEFAULTMODE
  3604. WAITFORNEXTREPORT
  3605. OTEMPIMAGESCOLLECTION
  3606. LCITEM
  3607. LOEXC
  3608. ISTEMPFILE    
  3609. ODYNAMICS    
  3610. LLCONSOLE
  3611. LLTALK
  3612. _LSETCONSOLE    
  3613. _LSETTALK
  3614. LCFILE
  3615. APAGESIMGS
  3616. Collection
  3617. Courier New
  3618. Courier
  3619. Courier New Bold
  3620. Courier-Bold
  3621. Courier New Italic
  3622. Courier-Oblique
  3623. Courier New Bold Italic
  3624. Courier-BoldOblique
  3625. Monotype Sorts
  3626. ZapfDingbats
  3627. Wingdings
  3628. ZapfDingbats
  3629. Arial
  3630. Helvetica
  3631. Arial Bold
  3632. Helvetica-Bold
  3633. Arial Italic
  3634. Helvetica-Oblique
  3635. Arial Bold Italic
  3636. Helvetica-BoldOblique
  3637. Times New Roman
  3638. Times-Roman
  3639. Times New Roman Bold
  3640. Times-Bold
  3641. Times New Roman Italic
  3642. Times-Italic
  3643. Times New Roman Bold Italic
  3644. Times-BoldItalic
  3645. Courier
  3646. Courier
  3647. Courier Bold
  3648. Courier-Bold
  3649. Courier Italic
  3650. Courier-Oblique
  3651. Courier Bold Italic
  3652. Courier-BoldOblique
  3653. Helvetica
  3654. Helvetica
  3655. Helvetica Bold
  3656. Helvetica-Bold
  3657. Helvetica Italic
  3658. Helvetica-Oblique
  3659. Helvetica Bold Italic
  3660. Helvetica-BoldOblique
  3661. Times-Roman
  3662. Times-Roman
  3663. Times-Roman Bold
  3664. Times-Bold
  3665. Times-Roman Italic
  3666. Times-Italic
  3667. Times-Roman Bold Italic
  3668. Times-BoldItalic
  3669. Consolev
  3670. Talkv
  3671. WING-DINGS
  3672. WEBDINGS
  3673. BARRAS BIRO
  3674. PF BARCODE 128
  3675. BARRA25
  3676. BARRA25I
  3677. BARRA39
  3678. BARRAEAN8
  3679. BARRAEAN13
  3680. BARRA128B
  3681. IDAUTOMATIONHC39M
  3682. PF BARCODE 39
  3683. PF EAN P36
  3684. PF EAN P72
  3685. PF INTERLEAVED 2 of 5
  3686. PF INTERLEAVED 2 OF 5 WIDE
  3687. PF INTERLEAVED 2 OF 5 TEXT
  3688. CODE 128AB
  3689. CODE 128AB SHORT
  3690. CODE 128AB TALL
  3691. CODE 128AB HR
  3692. CODE 128AB SHORT
  3693. CODE 128AB TALL HR
  3694. CODE 128C
  3695. CODE 128C SHORT
  3696. CODE 128C TALL
  3697. CODE 128C HR
  3698. CODE 128C HR SHORT
  3699. CODE 128C HR TALL
  3700. CODIGO DE BARRAS CYT
  3701. C39HRP24DHTT
  3702. C39HRP48DHTT
  3703. INTERLEAVED 2OF5 NT
  3704. 3 of 9 Barcode
  3705. windir5
  3706. Courier
  3707. Helvetica
  3708. Times-Roman
  3709. Helvetica
  3710. LDEFAULTMODE
  3711. OACTIVELISTENER
  3712. OFONTS
  3713. AFONTSSYMBOL
  3714. ADDPDFSTANDARDFONTS
  3715. DECLAREDLL    
  3716. CCODEPAGE
  3717. LREPLACEFONTS
  3718. AFONTSREPLACED
  3719. _LSETCONSOLE    
  3720. _LSETTALK
  3721. LNFONTS
  3722. LNFONTSTOADD
  3723. CSYMBOLFONTSLIST
  3724. _CTEMPFOLDER
  3725. _CWINFOLDER
  3726. LCDEFAULTFONT
  3727. CDEFAULTFONT
  3728. STRING
  3729. EXCEPTION
  3730. LABEL: 
  3731. FIELD: 
  3732. PICTURE: 
  3733. RECTANGLE
  3734. NFRXRECNO
  3735. NLEFT
  3736. NWIDTH
  3737. NHEIGHT
  3738. NOBJECTCONTINUATIONTYPE
  3739. CCONTENTSTOBERENDERED
  3740. GDIPLUSIMAGE
  3741. TWOPASSPROCESS
  3742. CURRENTPASS
  3743. LDEFAULTMODE
  3744. PAGENO
  3745. NGLOBALPGCOUNTER
  3746. NPGCOUNTER    
  3747. LNRANGETO
  3748. COMMANDCLAUSES
  3749. RANGETO    
  3750. RANGEFROM
  3751. NLEFT0
  3752. NTOP0
  3753. NWIDTH0
  3754. NHEIGHT0
  3755. LCCONTENTS
  3756. LOERROR
  3757. NPDFLEFT
  3758. NPDFTOP    
  3759. NPDFWIDTH
  3760. NPDFHEIGHT
  3761. LNPAGENO
  3762. SETFRXDATASESSION
  3763. NCURRENTPAGE
  3764. LSTARTED
  3765. STARTPDFDOCUMENT
  3766. NLASTPAGEPROCCESED
  3767. ADDBLANKPAGE
  3768. NPAGEWIDTH
  3769. NPAGEHEIGHT
  3770. OFRX    
  3771. LLSUCCESS
  3772. RESETDATASESSION
  3773. OBJTYPE
  3774. RESOID
  3775. COBJECTTORENDER
  3776. PROCESSLABEL
  3777. FONTFACE    
  3778. FONTSTYLE
  3779. FONTSIZE
  3780. PENRED
  3781. PENGREEN
  3782. PENBLUE
  3783. FILLRED    
  3784. FILLGREEN
  3785. FILLBLUE
  3786. FILLCHAR
  3787. OFFSET
  3788. PICTURE
  3789. STYLE
  3790. GETPICTUREFROMLISTENER
  3791. PROCESSFIELDS
  3792. STRETCH
  3793. _STAT2
  3794. LNWORDS
  3795. LNCHARWIDTH
  3796. LNLEN
  3797. LNCHARSALLOWED
  3798. LNCHARSTOINSERT
  3799. LCTEXT
  3800. CTEXTSTYLE
  3801. LNTXTWIDTH
  3802. PROCESSLINES
  3803. PENSIZE
  3804. PENPAT
  3805. PROCESSPICTURES
  3806. GENERAL
  3807. LCPICVAL
  3808. LCTMPIMG
  3809. FOXYGETIMAGE
  3810. _CTEMPFOLDER
  3811. LOEXC
  3812. CLEARPDFERRORS
  3813. PROCESSSHAPES
  3814. FILLPAT
  3815. LDEFAULTMODE
  3816. _CWMPICTURE
  3817. LOBJTYPEMODE
  3818. WAITFORNEXTREPORT
  3819. COMMANDCLAUSES
  3820. NOPAGEEJECT
  3821. LCFILE
  3822. CTARGETFILENAME    
  3823. HPDF_FREE    
  3824. PDFHANDLE
  3825. LSTARTED
  3826. _STAT
  3827. HPDF_SAVETOFILE
  3828. NPGCOUNTER
  3829. APAGESIMGS
  3830. CTEXTSTYLE
  3831. NCURRENTPAGE
  3832. NDIVISIONFACTOR
  3833. NGLOBALPGCOUNTER
  3834. NLASTPAGEPROCCESED
  3835. OPICTUREHANDLES    
  3836. ODYNAMICS
  3837. OTEMPIMAGESCOLLECTION
  3838. LLSAVED
  3839. OFOXYPREVIEWER
  3840. LSAVED
  3841. LOPENVIEWER    
  3842. SHELLEXEC
  3843. OACTIVELISTENER*
  3844. CURRENTDATASESSION
  3845. DATASESSIONv
  3846. FRXDataSession
  3847. FRXDATASESSION
  3848. RESETTODEFAULT
  3849. RESETDATASESSION
  3850. declaredll,
  3851. writepdfinformation[
  3852. searchfont
  3853. startpdfdocumentM
  3854. cleardlls
  3855. encryptpdf
  3856. addblankpage7,
  3857. addpdfstandardfontsR.
  3858. findfontfilename
  3859. cropimageD5
  3860. parseunderlinetextP:
  3861. processdynamics
  3862. processfieldsmC
  3863. processshapes!W
  3864. processlabel
  3865. processpicturesmw
  3866. processlines
  3867. getpicturehandle=
  3868. ispixelalpha
  3869. outputfromdata
  3870. getparheight
  3871. stringtopic
  3872. processpictures2t
  3873. _stat_assign
  3874. _errorinfo
  3875. _stat2_assign,
  3876. getpicturefromlistenery
  3877. getpageimg
  3878. clearpdferrors`
  3879. getimgtype
  3880. getdefaultfont
  3881. updateproperties
  3882. filesize
  3883. getfonthandle
  3884. getfontstylename
  3885. gettempfile
  3886. istempfile
  3887. getwatermarkx
  3888. getlanguagefromsystem
  3889. Destroy@
  3890. LoadReportn
  3891. UnloadReport
  3892. BeforeReport
  3893. Render
  3894. AfterReport
  3895. resetdatasession
  3896. setfrxdatasession    
  3897. @PROCEDURE declaredll
  3898. *!*    * Check if the library HPDF.DLL is in the disk
  3899. *!*    LOCAL lcPDFFile
  3900. *!*    lcPDFFile = "libhpdf.dll"
  3901. *!*    IF EMPTY(SYS(2000,lcPDFFile))
  3902. *!*        MESSAGEBOX("Could not locate the library LIBHPDF.DLL ." + CHR(13) + ;
  3903. *!*                "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")
  3904. *!*        RETURN .F.
  3905. *!*    ENDIF
  3906. Declare Integer HPDF_New In libhpdf.dll Integer, Integer
  3907. Declare Integer HPDF_Free In libhpdf.dll Integer
  3908. Declare Integer HPDF_SaveToFile In libhpdf.dll Integer, String
  3909. Declare Integer HPDF_GetError In libhpdf.dll Integer
  3910. Declare Integer HPDF_ResetError In libhpdf.dll Integer
  3911. Declare Integer HPDF_SetPageMode In libhpdf.dll Integer, Integer
  3912. Declare Integer HPDF_GetCurrentPage In libhpdf.dll Integer
  3913. Declare Integer HPDF_AddPage In libhpdf.dll Integer
  3914. Declare Integer HPDF_Page_SetWidth In libhpdf.dll Integer, Single
  3915. Declare Integer HPDF_Page_SetHeight In libhpdf.dll Integer, Single
  3916. Declare Integer HPDF_GetFont In libhpdf.dll Integer, String, String
  3917. Declare String  HPDF_LoadTTFontFromFile In libhpdf.dll Integer, String, Integer
  3918. Declare Integer HPDF_GetEncoder In libhpdf.dll Integer, String
  3919. Declare Integer HPDF_GetCurrentEncoder In libhpdf.dll Integer
  3920. Declare Integer HPDF_SetCurrentEncoder In libhpdf.dll Integer, String
  3921. Declare Integer HPDF_Encoder_GetType In libhpdf.dll Integer
  3922. Declare Integer HPDF_Encoder_GetByteType In libhpdf.dll Integer, String, Integer
  3923. Declare String  HPDF_Encoder_GetUnicode In libhpdf.dll Integer, String
  3924. Declare Integer HPDF_Encoder_GetWritingMode In libhpdf.dll Integer
  3925. Declare Integer HPDF_UseJPEncodings In libhpdf.dll Integer
  3926. Declare Integer HPDF_UseKREncodings In libhpdf.dll Integer
  3927. Declare Integer HPDF_UseCNSEncodings In libhpdf.dll Integer
  3928. Declare Integer HPDF_UseCNTEncodings In libhpdf.dll Integer
  3929. Declare Integer HPDF_UseJPFonts In libhpdf.dll Integer
  3930. Declare Integer HPDF_UseKRFonts In libhpdf.dll Integer
  3931. Declare Integer HPDF_UseCNSFonts In libhpdf.dll Integer
  3932. Declare Integer HPDF_UseCNTFonts In libhpdf.dll Integer
  3933. Declare Integer HPDF_LoadPngImageFromFile In libhpdf.dll Integer, String
  3934. Declare Integer HPDF_LoadJpegImageFromFile In libhpdf.dll Integer, String
  3935. Declare Integer HPDF_Image_GetWidth In libhpdf.dll Integer
  3936. Declare Integer HPDF_Image_GetHeight In libhpdf.dll Integer
  3937. Declare Integer HPDF_SetInfoAttr In libhpdf.dll Integer, Integer, String
  3938. Declare Integer HPDF_SetPassword In libhpdf.dll Integer, String, String
  3939. Declare Integer HPDF_SetPermission In libhpdf.dll Integer, Integer
  3940. Declare Integer HPDF_SetEncryptionMode In libhpdf.dll Integer, Integer, Integer
  3941. Declare Integer HPDF_SetCompressionMode In libhpdf.dll Integer, Integer
  3942. Declare Integer HPDF_Font_MeasureText In libhpdf.dll Integer, String, Integer, Single, Single, Single, Single, Integer, Single @
  3943. Declare Single  HPDF_Page_GetWidth In libhpdf.dll Integer
  3944. Declare Single  HPDF_Page_GetHeight In libhpdf.dll Integer
  3945. Declare Single  HPDF_Page_TextWidth In libhpdf.dll Integer, String
  3946. Declare Integer HPDF_Page_GetCurrentFont In libhpdf.dll Integer
  3947. Declare Integer HPDF_Page_MeasureText In libhpdf.dll Integer, String, Single, Integer, Single @
  3948. Declare Integer HPDF_Page_GetRGBFill In libhpdf.dll Integer
  3949. Declare Integer HPDF_Page_GetCurrentFont In libhpdf.dll Integer
  3950. Declare Single  HPDF_Page_GetCurrentFontSize In libhpdf.dll Integer
  3951. Declare Integer HPDF_Page_SetLineWidth In libhpdf.dll Integer, Single
  3952. Declare Integer HPDF_Page_SetDash In libhpdf.dll Integer, String, Integer, Integer
  3953. Declare Integer HPDF_Page_MoveTo In libhpdf.dll Integer, Single, Single
  3954. Declare Integer HPDF_Page_LineTo In libhpdf.dll Integer, Single, Single
  3955. Declare Integer HPDF_Page_ClosePath In libhpdf.dll Integer
  3956. Declare Integer HPDF_Page_Rectangle In libhpdf.dll Integer, Single, Single, Single, Single
  3957. Declare Integer HPDF_Page_Concat In libhpdf.dll Integer, Single, Single, Single, Single, Single, Single
  3958. Declare Integer HPDF_Page_SetCharSpace In libhpdf.dll Integer, Single
  3959. Declare Integer HPDF_Page_SetWordSpace In libhpdf.dll Integer, Single
  3960. Declare Integer HPDF_Page_SetHorizontalScalling In libhpdf.dll Integer, Single
  3961. Declare Integer HPDF_Page_SetTextLeading In libhpdf.dll Integer, Single
  3962. Declare Integer HPDF_Page_SetTextRise In libhpdf.dll Integer, Single
  3963. Declare Integer HPDF_Page_Stroke In libhpdf.dll Integer
  3964. Declare Integer HPDF_Page_ClosePathStroke In libhpdf.dll Integer
  3965. Declare Integer HPDF_Page_Fill In libhpdf.dll Integer
  3966. Declare Integer HPDF_Page_FillStroke In libhpdf.dll Integer
  3967. Declare Integer HPDF_Page_EndPath In libhpdf.dll Integer
  3968. Declare Integer HPDF_Page_BeginText In libhpdf.dll Integer
  3969. Declare Integer HPDF_Page_EndText In libhpdf.dll Integer
  3970. Declare Integer HPDF_Page_SetFontAndSize In libhpdf.dll Integer, Integer, Single
  3971. Declare Integer HPDF_Page_SetTextRenderingMode In libhpdf.dll Integer, Integer
  3972. Declare Integer HPDF_Page_MoveTextPos In libhpdf.dll Integer, Single, Single
  3973. Declare Integer HPDF_Page_MoveToNextLine In libhpdf.dll Integer
  3974. Declare Integer HPDF_Page_SetRGBFill In libhpdf.dll Integer, Single, Single, Single
  3975. Declare Integer HPDF_Page_SetRGBStroke In libhpdf.dll Integer, Single, Single, Single
  3976. Declare Integer HPDF_Page_Ellipse In libhpdf.dll Integer, Single, Single, Single, Single
  3977. Declare Integer HPDF_Page_DrawImage In libhpdf.dll Integer, Integer, Single, Single, Single, Single
  3978. Declare Integer HPDF_Page_TextRect In libhpdf.dll Integer, Single, Single, Single, Single, String, Integer, Integer
  3979. Declare Integer HPDF_Page_TextOut In libhpdf.dll Integer, Single, Single, String
  3980. Declare Integer HPDF_Page_SetTextMatrix In libhpdf.dll Integer ,Single, Single, Single, Single, Single, Single
  3981. Declare Integer HPDF_Page_ShowText In libhpdf.dll Integer, String
  3982. Declare Integer HPDF_Page_CurveTo In libhpdf.dll Integer, Single, Single, Single, Single, Single, Single
  3983. * CChalom 2010-01-17
  3984. * Removed the dependance of having "System.App" from GdiPlusX
  3985. * Now using _Gdiplus.vcx that is already embedded in ReportOutput.App
  3986. * Added a GdiPlus.dll declaration missing in the embedded classes
  3987. * Function used in the CropImage method
  3988. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  3989. * Function to revert strings
  3990. DECLARE STRING _strrev IN msvcrt20.dll as xfcRevertString STRING @
  3991. ENDPROC
  3992. PROCEDURE writepdfinformation
  3993. With This
  3994.     If !Empty(.cPdfAuthor) Then
  3995.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_AUTHOR, .cPdfAuthor)
  3996.     EndIf
  3997.     If !Empty(.cPdfTitle) Then
  3998.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_TITLE, .cPdfTitle)
  3999.     EndIf
  4000.     If !Empty(.cPdfSubject) Then
  4001.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_SUBJECT, .cPdfSubject)
  4002.     EndIf
  4003.     If !Empty(.cPdfKeyWords) Then
  4004.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_KEYWORDS, .cPdfKeywords)
  4005.     EndIf
  4006.     If !Empty(.cPdfCreator) Then
  4007.         This._Stat = HPDF_SetInfoAttr(.pdfHandle, HPDF_INFO_CREATOR, .cPdfCreator)
  4008.     EndIf
  4009. EndWith
  4010. ENDPROC
  4011. PROCEDURE searchfont
  4012. LPARAMETERS lcFontName As String, lnStyle As Integer &&, lnCodePage As Integer
  4013. LOCAL lnPos0
  4014. lnPos0 = ASCAN(This.aFontsSymbol, UPPER(lcFontName))
  4015. IF lnPos0 > 0
  4016.     RETURN ""
  4017. ENDIF 
  4018. LOCAL lcRetorno As String, lcFontRegular as String, lcFontStyle as String 
  4019. lcFontRegular = lcFontName
  4020. lcFontStyle   = ""
  4021. WITH This
  4022.     .cTextStyle=""
  4023.     If Bittest(lnStyle, 0) Then &&Bold 
  4024.         lcFontStyle  = lcFontStyle + " Bold"
  4025.         * lcFontName = lcFontName + " Bold"
  4026.         .cTextStyle="B"
  4027.     EndIf
  4028.     If Bittest(lnStyle, 1) Then &&Italic
  4029.         lcFontStyle  = lcFontStyle + " Italic"
  4030.         * lcFontName = lcFontName + " Italic"
  4031.         .cTextStyle = .cTextStyle + "I"
  4032.     EndIf
  4033.     Local lbResult As Boolean, lnI As Integer
  4034.     *!* Look for the font in the current collection
  4035.     lcFontName = lcFontName + lcFontStyle
  4036.     For lnI=1 To .oFonts.Count
  4037.         If This.oFonts.GetKey(lnI)==lcFontName Then
  4038.             lbResult = .T.
  4039.             Exit
  4040.         EndIf
  4041.     EndFor
  4042.     * Check if the font is at the replacement list
  4043.     LOCAL lnReplCount, lnPos
  4044.     lnReplCount = ALEN(This.aFontsReplaced, 1)
  4045.     lnPos       = ASCAN(This.aFontsReplaced, lcFontName)
  4046.     IF lnPos > 0
  4047.         lnPos = (lnPos + 1) / 2
  4048.         lcFontName = This.aFontsReplaced(lnPos, 2)
  4049.         lbResult = .T.
  4050.     ENDIF 
  4051.     IF !lbResult THEN && Font does NOT exist, let's add it to the collection
  4052.         LOCAL lcKey AS String, lcNewFont
  4053.         lcKey = .FindFontFileName(lcFontName)
  4054.         && If it didnt find the full name of the font, with style,
  4055.         && try at least to get the regular font
  4056.         IF EMPTY(lcKey)
  4057.             lcKey = .FindFontFileName(lcFontRegular)
  4058.             lcFontName = lcFontRegular
  4059.         ENDIF
  4060.         IF !Empty(lcKey) THEN
  4061.             .oFonts.Add(lcKey, lcFontName)
  4062.         ELSE && Can't add fonts
  4063.             lcNewFont  = This.GetDefaultFont(lcFontStyle) && "Times-Roman"
  4064.             DIMENSION This.aFontsReplaced(lnReplCount + 1, 2)
  4065.             This.aFontsReplaced(lnReplCount + 1, 1) = lcFontName
  4066.             This.aFontsReplaced(lnReplCount + 1, 2) = lcNewFont
  4067.             lcFontName = lcNewFont
  4068.         ENDIF
  4069.     ENDIF
  4070.     lcRetorno = .oFonts.Item(.oFonts.GetKey(lcFontName))
  4071. ENDWITH 
  4072. RETURN lcRetorno
  4073. ENDPROC
  4074. PROCEDURE startpdfdocument
  4075. WITH This
  4076.     * CChalom 2010-01-20
  4077.     * Added "lStarted" property in order to allow merging reports
  4078.     SET TALK OFF
  4079.     SET CONSOLE OFF
  4080.     IF .pdfHandle = 0 AND NOT .lStarted
  4081.         LOCAL llError
  4082.         TRY
  4083.             .pdfHandle = HPDF_New(0, 0) && Create a New Document
  4084.             llError = .F.
  4085.         CATCH
  4086.             llError = .T.
  4087.         ENDTRY
  4088.         IF .pdfHandle = 0 OR llError
  4089.             * Check if the library HPDF.DLL is in the disk
  4090.             MESSAGEBOX("Could not load the library LIBHPDF.DLL ." + CHR(13) + ;
  4091.                 "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")
  4092.             This.CancelReport()
  4093.             RETURN .F.
  4094.         ENDIF
  4095.         This._Stat = HPDF_SetCompressionMode(.pdfHandle, HPDF_COMP_ALL) &&Set Document Compression Method
  4096.         * KHentschel 2010-06-15
  4097.         * Added "nPageMode" property: how Document should be displayed HPDF_PAGE_MODE_USE_OUTLINE
  4098.         * HPDF_SetPageMode(.pdfHandle, HPDF_PAGE_MODE_USE_OUTLINE) &&Set the how Document should be displayed
  4099.         * Available possibilities:
  4100.         * #define    HPDF_PAGE_MODE_USE_NONE        0
  4101.         * #define    HPDF_PAGE_MODE_USE_OUTLINE        1
  4102.         * #define    HPDF_PAGE_MODE_USE_THUMBS        2
  4103.         * #define    HPDF_PAGE_MODE_FULL_SCREEN        3
  4104.         * Make a special call to enable the Chinese characters
  4105.         * http://libharu.sourceforge.net/fonts.html
  4106.         * GB-EUC-H    EUC-CN encoding
  4107.         * GB-EUC-V    Vertical writing virsion of GB-EUC-H
  4108.         * GBK-EUC-H   Microsoft Code Page 936 (lfCharSet 0x86) GBK encoding
  4109.         * GBK-EUC-V   Vertical writing virsion of GBK-EUC-H
  4110.         This._Stat = HPDF_SetPageMode(.pdfHandle, .nPageMode)
  4111.         .WritePdfInformation() &&Stablish PDF File Information
  4112.         .EncryptPdf()
  4113.         * Clear existing HPDF errors
  4114.         This.ClearPDFErrors()
  4115.         .AddBlankPage()
  4116.         * Clear existing HPDF errors
  4117.         This.ClearPDFErrors()
  4118.         * Identify Double-Byte languages
  4119.         * And prepare HPDF to use specific encodings, with some specific fonts
  4120.         LOCAL lcCodePage
  4121.         lcCodePage = UPPER(ALLTRIM(This.cCodePage))
  4122.         DO CASE
  4123.         CASE INLIST(lcCodePage, "GB-EUC-H", "GB-EUC-V", "GBK-EUC-H", "GBK-EUC-V", "CP936", "936", "EUC-CN")
  4124.             This._lSChinese = .T. && Simplified Chinese
  4125.             This.cDefaultFont = "SimSun"
  4126.             This._Stat = HPDF_UseCNSFonts(.pdfHandle)
  4127.             This._Stat = HPDF_UseCNSEncodings(.pdfHandle)
  4128.             IF "936" $ lcCodePage
  4129.                 This.cCodePage = "GBK-EUC-H"
  4130.             ENDIF
  4131.         CASE INLIST(lcCodePage, "ETEN-B5-H", "ETEN-B5-V", "CP950", "950")
  4132.             This._lTChinese = .T. && Traditional Chinese
  4133.             This.cDefaultFont = "MingLiU"
  4134.             This._Stat = HPDF_UseCNTFonts(.pdfHandle)
  4135.             This._Stat = HPDF_UseCNTEncodings(.pdfHandle)
  4136.             IF "950" $ lcCodePage
  4137.                 This.cCodePage = "ETen-B5-H"
  4138.             ENDIF
  4139.         CASE INLIST(lcCodePage, "90MS-RKSJ-H", "90MS-RKSJ-V", "90MSP-RKSJ-H", "EUC-H", "EUC-V", "CP932", "932")
  4140.             This._lJapanese = .T. && Japanese
  4141.             This.cDefaultFont = "MS-Mincyo"
  4142.             This._Stat = HPDF_UseJPFonts(.pdfHandle)
  4143.             This._Stat = HPDF_UseJPEncodings(.pdfHandle)
  4144.             IF "932" $ lcCodePage
  4145.                 This.cCodePage = "90ms-RKSJ-H"   && 90ms-RKSJ-H, 90ms-RKSJ-V, 90msp-RKSJ-H
  4146.             ENDIF
  4147.         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")
  4148.             This._lKorean = .T. && Korean
  4149.             This.cDefaultFont = "DotumChe"
  4150.             This._Stat = HPDF_UseKRFonts(.pdfHandle)
  4151.             This._Stat = HPDF_UseKREncodings(.pdfHandle)
  4152.             IF "949" $ lcCodePage
  4153.                 This.cCodePage = "KSC-EUC-H" && KSC-EUC-H, KSC-EUC-V, KSCms-UHC-H, KSCms-UHC-HW-H, KSCms-UHC-HW-V
  4154.             ENDIF
  4155.         CASE INLIST(lcCodePage, "CP1256", "1256") && Arabic
  4156.             This.cCodePage = "ISO8859-6"
  4157.             This.lRightToLeft = .T.
  4158.         OTHERWISE
  4159.             IF VAL(lcCodePage) > 0
  4160.                 This.cCodePage = "CP" + lcCodePage
  4161.             ENDIF
  4162.         ENDCASE
  4163.         *!*    1 - "Simplified Chinese Encodings"
  4164.         *!*        CodePages: GB-EUC-H, GB-EUC-V, GBK-EUC-H, GBK-EUC-V, CP936
  4165.         *!*             SIMSUN Font as Default
  4166.         *!*             SIMHEI font will be available, but used only if selected, with these variations:
  4167.         *!*                    SimSun
  4168.         *!*                    SimSun,Bold
  4169.         *!*                    SimSun,Italic
  4170.         *!*                    SimSun,BoldItalic
  4171.         *!*                    SimHei
  4172.         *!*                    SimHei,Bold
  4173.         *!*                    SimHei,Italic
  4174.         *!*                    SimHei,BoldItalic
  4175.         *!*    2 - "Traditional Chinese Encodings"
  4176.         *!*        CodePages: ETen-B5-H, ETen-B5-V, CP950
  4177.         *!*            MINGLIU will be the ONLY font available, with these variations:
  4178.         *!*                   MingLiU
  4179.         *!*                   MingLiU,Bold
  4180.         *!*                   MingLiU,Italic
  4181.         *!*                   MingLiU,BoldItalic
  4182.         *!*
  4183.         *!*    3 - "Japanese Encodings"
  4184.         *!*        CodePages: 90ms-RKSJ-H, 90ms-RKSJ-V, 90msp-RKSJ-H, EUC-H, EUC-V, CP932
  4185.         *!*            MS-MINCYO as Default, with these variations:
  4186.         *!*                   MS-Mincyo
  4187.         *!*                   MS-Mincyo,Bold
  4188.         *!*                   MS-Mincyo,Italic
  4189.         *!*                   MS-Mincyo,BoldItalic
  4190.         *!*                   MS-Gothic
  4191.         *!*                   MS-Gothic,Bold
  4192.         *!*                   MS-Gothic,Italic
  4193.         *!*                   MS-Gothic,BoldItalic
  4194.         *!*                   MS-PMincyo
  4195.         *!*                   MS-PMincyo,Bold
  4196.         *!*                   MS-PMincyo,Italic
  4197.         *!*                   MS-PMincyo,BoldItalic
  4198.         *!*                   MS-PGothic
  4199.         *!*                   MS-PGothic,Bold
  4200.         *!*                   MS-PGothic,Italic
  4201.         *!*                   MS-PGothic,BoldItalic
  4202.         *!*
  4203.         *!*    4 - "Korean Encodings"
  4204.         *!*        CodePages: KSC-EUC-H, KSC-EUC-V, KSCms-UHC-H, KSCms-UHC-HW-H, KSCms-UHC-HW-V, CP949
  4205.         *!*            DOTUMCHE as Default, with these variations:
  4206.         *!*                   DotumChe
  4207.         *!*                   DotumChe,Bold
  4208.         *!*                   DotumChe,Italic
  4209.         *!*                   DotumChe,BoldItalic
  4210.         *!*                   Dotum
  4211.         *!*                   Dotum,Bold
  4212.         *!*                   Dotum,Italic
  4213.         *!*                   Dotum,BoldItalic
  4214.         *!*                   BatangChe
  4215.         *!*                   BatangChe,Bold
  4216.         *!*                   BatangChe,Italic
  4217.         *!*                   BatangChe,BoldItalic
  4218.         *!*                   Batang
  4219.         *!*                   Batang,Bold
  4220.         *!*                   Batang,Italic
  4221.         *!*                   Batang,BoldItalic
  4222.         .lStarted=.T.
  4223.     ENDIF
  4224. ENDWITH
  4225. ENDPROC
  4226. PROCEDURE cleardlls
  4227. Clear Dlls "HPDF_New","HPDF_Free","HPDF_SaveToFile","HPDF_GetError","HPDF_ResetError","HPDF_SetPageMode",;
  4228. "HPDF_GetCurrentPage","HPDF_AddPage","HPDF_Page_SetWidth","HPDF_Page_SetHeight","HPDF_GetFont","HPDF_LoadTTFontFromFile",;
  4229. "HPDF_GetEncoder","HPDF_GetCurrentEncoder","HPDF_SetCurrentEncoder","HPDF_Encoder_GetType","HPDF_Encoder_GetByteType",;
  4230. "HPDF_Encoder_GetUnicode","HPDF_Encoder_GetWritingMode","HPDF_UseJPEncodings","HPDF_UseKREncodings","HPDF_UseCNSEncodings",;
  4231. "HPDF_UseCNTEncodings","HPDF_LoadPngImageFromFile","HPDF_LoadJpegImageFromFile","HPDF_Image_GetWidth","HPDF_Image_GetHeight",;
  4232. "HPDF_SetInfoAttr","HPDF_SetPassword","HPDF_SetPermission","HPDF_SetEncryptionMode","HPDF_SetCompressionMode",;
  4233. "HPDF_Font_MeasureText","HPDF_Page_GetWidth","HPDF_Page_GetHeight","HPDF_Page_TextWidth","HPDF_Page_GetCurrentFont",;
  4234. "HPDF_Page_MeasureText","HPDF_Page_GetRGBFill","HPDF_Page_GetCurrentFont","HPDF_Page_GetCurrentFontSize","HPDF_Page_SetLineWidth",;
  4235. "HPDF_Page_SetDash","HPDF_Page_MoveTo","HPDF_Page_LineTo","HPDF_Page_ClosePath","HPDF_Page_Rectangle","HPDF_Page_Concat",;
  4236. "HPDF_Page_SetCharSpace","HPDF_Page_SetWordSpace","HPDF_Page_SetHorizontalScalling","HPDF_Page_SetTextLeading",;
  4237. "HPDF_Page_SetTextRise","HPDF_Page_Stroke","HPDF_Page_ClosePathStroke","HPDF_Page_Fill","HPDF_Page_FillStroke",;
  4238. "HPDF_Page_EndPath","HPDF_Page_BeginText","HPDF_Page_EndText","HPDF_Page_SetFontAndSize","HPDF_Page_SetTextRenderingMode",;
  4239. "HPDF_Page_MoveTextPos","HPDF_Page_MoveToNextLine","HPDF_Page_SetRGBFill","HPDF_Page_SetRGBStroke","HPDF_Page_Ellipse",;
  4240. "HPDF_Page_DrawImage","HPDF_Page_TextRect","HPDF_Page_TextOut","HPDF_Page_SetTextMatrix","HPDF_Page_ShowText","HPDF_Page_CurveTo"
  4241. ENDPROC
  4242. PROCEDURE encryptpdf
  4243. With This
  4244.     If .lEncryptDocument Then &&Protect the document with password
  4245.         If !Empty(.cMasterPassword) Then
  4246.             If .cMasterPassword!=.cUserPassword Then &&User Password and Master Password can't be the same
  4247.                 HPDF_SetPassword(.pdfHandle, .cMasterPassword, .cUserPassword)
  4248.                 Local lnPermit As Integer
  4249.                 lnPermit=0
  4250.                 && Establish PDF files permissions
  4251.                 If .lCanPrint Then
  4252.                     lnPermit = lnPermit + HPDF_ENABLE_PRINT
  4253.                 EndIf
  4254.                 If .lCanEdit Then
  4255.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT_ALL
  4256.                 EndIf
  4257.                 If .lCanCopy Then
  4258.                     lnPermit = lnPermit + HPDF_ENABLE_COPY
  4259.                 EndIf
  4260.                 If .lCanAddNotes Then
  4261.                     lnPermit = lnPermit + HPDF_ENABLE_EDIT
  4262.                 EndIf
  4263.                 This._Stat = HPDF_SetPermission(.pdfHandle, lnPermit)
  4264.                 If .nEncriptionLevel!=5 Then
  4265.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R3, .nEncriptionLevel)
  4266.                 Else
  4267.                     This._Stat = HPDF_SetEncryptionMode(.pdfHandle, HPDF_ENCRYPT_R2, .nEncriptionLevel)
  4268.                 EndIf
  4269.             EndIf
  4270.         EndIf
  4271.     ENDIF
  4272. EndWith
  4273. ENDPROC
  4274. PROCEDURE addblankpage
  4275. *!* Change page coordinates and measure system
  4276. WITH This
  4277.     IF .lDefaultMode 
  4278.         LOCAL lnWidth, lnHeight
  4279.         lnWidth = .GetPageWidth()
  4280.         lnHeight = .GetPageHeight()
  4281.         .nPageHeight = (lnHeight / 960) * 72
  4282.         .nPageWidth  = (lnWidth  / 960) * 72
  4283.     ENDIF
  4284.     .oPage = HPDF_AddPage(.pdfHandle) && Add a New Page
  4285.     This._Stat = HPDF_Page_SetWidth(.oPage,  .nPageWidth ) && Establish the Width of the page
  4286.     This._Stat = HPDF_Page_SetHeight(.oPage, .nPageHeight) && Establish the Height of the page
  4287. ENDWITH
  4288. * Draw watermark
  4289. IF NOT EMPTY(This._cWMpicture) AND (This._nWmw > 20) AND (This._nWmh > 20)
  4290.     This.ProcessPictures(This._nwmy, This._nWmx, This._nWmw, This._nWmh, This._cWMpicture,;
  4291.         0, 0, 2, "")
  4292. *Lparameters nTop As Number,nLeft As Number,nWidth As Number,nHeight As Number,lcContents As String,;
  4293. *    GDIPlusImage As Number, lnOffset As Integer, liPictureMode As Integer, lcStyle As String
  4294. ENDIF
  4295. ENDPROC
  4296. PROCEDURE addpdfstandardfonts
  4297. With This.oFonts
  4298.     .Add("Courier", "Courier")
  4299.     .Add("Courier-Bold", "Courier-Bold")
  4300.     .Add("Courier-Oblique", "Courier-Oblique")
  4301.     .Add("Courier-BoldOblique", "Courier-BoldOblique")
  4302.     .Add("Helvetica", "Helvetica")
  4303.     .Add("Helvetica-Bold", "Helvetica-Bold")
  4304.     .Add("Helvetica-Oblique", "Helvetica-Oblique")
  4305.     .Add("Helvetica-BoldOblique", "Helvetica-BoldOblique")
  4306.     .Add("Times-Roman", "Times-Roman")
  4307.     .Add("Times-Bold", "Times-Bold")
  4308.     .Add("Times-Italic", "Times-Italic")
  4309.     .Add("Times-BoldItalic", "Times-BoldItalic")
  4310.     .Add("Symbol", "Symbol")
  4311.     .Add("ZapfDingbats", "ZapfDingbats")
  4312. EndWith
  4313. ENDPROC
  4314. PROCEDURE findfontfilename
  4315. LPARAMETERS lcFontName As String
  4316. Local lcFileName As String, lcFolder As String
  4317. lcFolder = Iif(Os(3) < "5","SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts","Software\Microsoft\Windows NT\CurrentVersion\Fonts")
  4318. IF VARTYPE(This.oRegistry)!="O" THEN
  4319.     This.oRegistry = NewObject("Registry", This.ClassLibrary)
  4320. ENDIF
  4321. lcFileName = This._cWinFolder + "Fonts\" + This.oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,lcFolder,ALLTRIM(lcFontName) + " (TrueType)")
  4322. IF ISNULL(lcFileName)
  4323.     lcFileName = This._cWinFolder + "Fonts\" + This.oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,lcFolder,ALLTRIM(lcFontName))
  4324.     IF ISNULL(lcFileName)
  4325.         LOCAL lnLangID
  4326.         lnLangID = This.nSystemLangID
  4327.         *!* 1029 Czech
  4328.         *!* 1031 German
  4329.         *!* 1033 English (Default)
  4330.         *!* 1034 Spanish
  4331.         *!* 1036 French
  4332.         *!* 1040 Italian
  4333.         *!* 1045 Polish
  4334.         *!* 1046 Portuguese (Brazilian)
  4335.         * http://www.science.co.il/language/locale-codes.asp
  4336.         DO CASE
  4337.         CASE lnLangID = 1046 && Portuguese
  4338.             lcFontName = STRTRAN(lcFontName, "Bold" , "Negrito")
  4339.             lcFontName = STRTRAN(lcFontName, "Italic", "It
  4340. lico")
  4341.         CASE lnLangID = 1034 && Spanish
  4342.             lcFontName = STRTRAN(lcFontName, "Bold" , "negrita")
  4343.             lcFontName = STRTRAN(lcFontName, "Italic", "cursiva")
  4344.         CASE lnLangID = 1036 && French
  4345.             lcFontName = STRTRAN(lcFontName, "Bold" , "Gras")
  4346.             lcFontName = STRTRAN(lcFontName, "Italic", "Italique")
  4347.         OTHERWISE
  4348.         ENDCASE
  4349.         lcFileName = This._cWinFolder + "Fonts\" + This.oRegistry.ReadRegistryString(HKEY_LOCAL_MACHINE,lcFolder,ALLTRIM(lcFontName) + " (TrueType)")
  4350.     ENDIF
  4351. ENDIF
  4352. LOCAL luReturn
  4353. luReturn = ""
  4354. If !ISNULL(lcFileName) THEN
  4355.         luReturn = HPDF_LoadTTFontFromFile(This.pdfHandle, lcFileName, IIF(This.lEmbedFont,1,0))
  4356.     CATCH TO loExc
  4357.         * SET STEP ON
  4358.     ENDTRY
  4359. ENDIF
  4360. DEBUGOUT lcFontName, lcFileName, luReturn
  4361. This.ClearPDFErrors()
  4362. RETURN luReturn
  4363. *********************************************
  4364. *!*            TRY
  4365. *!*                Declare String  HPDF_LoadType1FontFromFile In libhpdf.dll Integer, String, String
  4366. *!*                luReturn =      HPDF_LoadType1FontFromFile(This.pdfHandle, lcFileName, NULL)
  4367. *!*            CATCH TO loExc2
  4368. *!*                * SET STEP ON
  4369. *!*            ENDTRY
  4370. *********************************************
  4371. *!*    LOCAL lcRegKey
  4372. *!*    lcRegKey = ;
  4373. *!*        "HKEY_LOCAL_MACHINE\" + ;
  4374. *!*        ADDBS(lcFolder) + ;
  4375. *!*        lcFontName + " (TrueType)"
  4376. *!*    LOCAL loWSH AS wscript.shell
  4377. *!*    loWSH = CREATEOBJECT("wscript.shell")
  4378. *!*    lcFileName = loWSH.RegRead(lcRegKey)
  4379. *!*    * ? loWSH.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductId")
  4380. *!*    lcFileName = GETENV("windir") + "\Fonts\" + lcFileName
  4381. ENDPROC
  4382. PROCEDURE cropimage
  4383. LPARAMETERS lcFile As String, tnX, tnY, tnWidth As Integer, tnHeight As Integer, tlFile
  4384. * CChalom 2010-01-17
  4385. * Removed the dependance of having "System.App" from GdiPlusX
  4386. * Now using _Gdiplus.vcx that is already embedded in ReportOutput.App
  4387. *!* Original code
  4388. *!*    If Vartype(_Screen.System)!="O" Then
  4389. *!*        Do System.App &&Initializes GDIPLUSX
  4390. *!*    EndIf
  4391. *!*    With _Screen.System.Drawing
  4392. *!*        .Graphics.PageUnit = .GraphicsUnit.Point 
  4393. *!*        Local loBmp As xfcBitmap
  4394. *!*        loBmp = .Bitmap.FromFile(lcFile)
  4395. *!*        * Crop Image
  4396. *!*        Local loCropped As xfcBitmap, loRect As xfcRectangle
  4397. *!*        loRect = .Rectangle.New(0, 0, tnWidth, tnHeight)
  4398. *!*        loCropped = loBmp.Clone(loRect)
  4399. *!*        lcFile = Substr(lcFile, 1, Len(lcFile)-3)+"Png"
  4400. *!*        loCropped.Save(lcFile, .Imaging.ImageFormat.Png)
  4401. *!*        Return lcFile
  4402. *!*    ENDWITH
  4403. IF NOT FILE(lcFile)
  4404.     RETURN .F.
  4405. ENDIF 
  4406. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  4407. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  4408. loBmp.CreateFromFile(lcFile)
  4409. tnHeight = MIN(tnHeight, loBmp.ImageHeight)
  4410. tnWidth  = MIN(tnWidth , loBmp.ImageWidth)
  4411. LOCAL lhBitmap, lnStatus
  4412. lhBitmap = 0
  4413. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, CEILING(tnWidth), CEILING(tnHeight), loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  4414. IF (lhBitmap = 0) OR (lnStatus <> 0)
  4415.     loBmp = NULL
  4416.     lnHandle = 0
  4417.     RETURN lnHandle
  4418. ENDIF 
  4419. Local loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  4420. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  4421. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  4422. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  4423. LOCAL lcEXT, lcEncoder
  4424. lcEXT = UPPER(JUSTEXT(lcFile))
  4425. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  4426. LOCAL lcCroppedFile
  4427. lcCroppedFile = This.GetTempFile(lcEXT)
  4428. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  4429. loCropped = NULL
  4430. loBMP     = NULL
  4431. IF tlFile
  4432.     RETURN lcCroppedFile
  4433. ENDIF 
  4434. IF lcEXT = "PNG"
  4435.     lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcCroppedFile)
  4436.     lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, lcCroppedFile)
  4437. ENDIF 
  4438.     IF This.IsTempFile(lcFile)
  4439.         DELETE FILE (lcFile)
  4440.     ENDIF 
  4441. CATCH TO loExc
  4442.     * SET STEP ON 
  4443. ENDTRY 
  4444.     IF This.IsTempFile(lcCroppedFile)
  4445.         DELETE FILE (lcCroppedFile)
  4446.     ENDIF 
  4447. CATCH TO loExc
  4448.     * SET STEP ON 
  4449. ENDTRY 
  4450. RETURN lnHandle
  4451. ENDPROC
  4452. PROCEDURE parseunderlinetext
  4453. Lparameters lcText As String, nWidth As Number, lnAncho As Number
  4454. Local lnI As Integer, lcTemp As String, lnLen As Integer, lcRetorno As String
  4455. lnLen = Len(lcText)
  4456. lcTemp = ""
  4457. lcRetorno = ""
  4458. For lnI=1 To lnLen
  4459.     If HPDF_Page_TextWidth(This.oPage, lcTemp + Substr(lcText, lnI, 1)) < nWidth Then
  4460.         lcTemp = lcTemp + Substr(lcText, lnI, 1)
  4461.     Else
  4462.         lcRetorno = lcRetorno + lcTemp + " "
  4463.         lcTemp = "" 
  4464.     EndIf
  4465. EndFor
  4466. Return lcRetorno + lcTemp
  4467. ENDPROC
  4468. PROCEDURE processdynamics
  4469. LParameters lcStyle As String, lcType As String
  4470. Local lbReturn As Boolean, lcCursor As String
  4471. lcCursor=Select()
  4472.     XMLToCursor(lcStyle, "_TempDynamics")
  4473. Catch
  4474.     lbReturn = .F.
  4475. EndTry
  4476. This.oDynamics = Null
  4477. * CChalom 2010-06-15
  4478. * Included verification for IF USED("_TempDynamics")
  4479. * for the case of an invalid XML
  4480. IF USED("_TempDynamics") AND Reccount("_TempDynamics") > 0 Then
  4481.     This.oDynamics = CreateObject("Empty")
  4482.     Select _TempDynamics
  4483.     If InList(lcType,"FIELD","SHAPE","PICTURE")
  4484.         Scan For !Empty(_TempDynamics.ExecWhen)
  4485.             Try
  4486.                 If Evaluate(_TempDynamics.ExecWhen)
  4487.                     Do Case
  4488.                         Case lcType="FIELD"
  4489.                             AddProperty(This.oDynamics, "cValue", _TempDynamics.Script) &&Corresponds to the Replace Expression With
  4490.                             AddProperty(This.oDynamics, "cExecWhen", _TempDynamics.ExecWhen) &&Corresponds to the expresion to be evaluate it
  4491.                             AddProperty(This.oDynamics, "cFontName", _TempDynamics.FName) &&Corresponds to the font name applied if expresion is true
  4492.                             AddProperty(This.oDynamics, "nFontSize", Iif(Vartype(_TempDynamics.FSize)="N", _TempDynamics.FSize, 0)) &&Corresponds to the font size applied if expresion is true
  4493.                             AddProperty(This.oDynamics, "nFontStyle",Iif(Vartype(_TempDynamics.FStyle)="N", _TempDynamics.FStyle, 0)) &&Corresponds to the font style applied if expresion is true
  4494.                             If Cast(_TempDynamics.PenRgb As I)!= -1 Then
  4495.                                 *!* This color transformation was taken from samples provided by 
  4496. etin Bas
  4497.                                 AddProperty(This.oDynamics, "nPenRed", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.PenRgb)="C", Int(Val(_TempDynamics.PenRgb)), _TempDynamics.PenRgb), 0x0000FF),0))
  4498.                                 AddProperty(This.oDynamics, "nPenGreen", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.PenRgb)="C", Int(Val(_TempDynamics.PenRgb)), _TempDynamics.PenRgb), 0x00FF00),8))
  4499.                                 AddProperty(This.oDynamics, "nPenBlue", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.PenRgb)="C", Int(Val(_TempDynamics.PenRgb)), _TempDynamics.PenRgb), 0xFF0000),16))
  4500.                             Else
  4501.                                 AddProperty(This.oDynamics, "nPenRed", -1)
  4502.                                 AddProperty(This.oDynamics, "nPenGreen", -1)
  4503.                                 AddProperty(This.oDynamics, "nPenBlue", -1)
  4504.                             EndIf
  4505.                             If Cast(_TempDynamics.FillRgb As I)!= -1 Then
  4506.                                 AddProperty(This.oDynamics, "nFillRed", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.FillRgb)="C", Int(Val(_TempDynamics.FillRgb)), _TempDynamics.FillRgb), 0x0000FF),0))
  4507.                                 AddProperty(This.oDynamics, "nFillGreen", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.FillRgb)="C", Int(Val(_TempDynamics.FillRgb)), _TempDynamics.FillRgb), 0x00FF00),8))
  4508.                                 AddProperty(This.oDynamics, "nFillBlue", Bitrshift(Bitand(Iif(Vartype(_TempDynamics.FillRgb)="C", Int(Val(_TempDynamics.FillRgb)), _TempDynamics.FillRgb), 0xFF0000),16))
  4509.                             Else
  4510.                                 AddProperty(This.oDynamics, "nFillRed", -1)
  4511.                                 AddProperty(This.oDynamics, "nFillGreen", -1)
  4512.                                 AddProperty(This.oDynamics, "nFillBlue", -1)
  4513.                             EndIf
  4514.                             lbReturn = .T.
  4515.                             Exit
  4516.                         Case lcType="SHAPE" Or lcType="IMAGE"
  4517.                             AddProperty(This.oDynamics, "cExecWhen", _TempDynamics.ExecWhen) &&Corresponds to the expresion to be evaluate it
  4518.                             AddProperty(This.oDynamics, "nWidth", Iif(Vartype(_TempDynamics.Width)="C", Int(Val(_TempDynamics.Width)), _TempDynamics.Width)) &&Corresponds to the width assigned
  4519.                             AddProperty(This.oDynamics, "nHeight", Iif(Vartype(_TempDynamics.Height)="C", Int(Val(_TempDynamics.Height)), _TempDynamics.Height)) &&Corresponds to the width assigned
  4520.                             lbReturn = .T.
  4521.                             Exit
  4522.                     EndCase
  4523.                 EndIf
  4524.             Catch
  4525.                 lbReturn = .F.
  4526.             EndTry
  4527.         EndScan
  4528.     EndIf
  4529.     *!* No check for Rotation Values
  4530.     Scan For _TempDynamics.Name="Microsoft.VFP.Reporting.Builder.Rotate"
  4531.         AddProperty(This.oDynamics, "nRotationDegree", Iif(Vartype(_TempDynamics.Execute)="C", Int(Val(_TempDynamics.Execute)), _TempDynamics.Execute))
  4532.         lbReturn = .T.
  4533.     EndScan
  4534.     Select (lcCursor)
  4535.     Return lbReturn
  4536.     lbReturn = .F.
  4537. EndIf
  4538. Select (lcCursor)
  4539. Return lbReturn
  4540. ENDPROC
  4541. PROCEDURE processfields
  4542. LPARAMETERS lcFontFace As String, liFontStyle As Integer, lnFontSize As Number, lnPenRed As Number, lnPenGreen As Number,;
  4543.     lnPenBlue As Number, lnFillRed As Number, lnFillGreen As Number, lnFillBlue As Number, nLeft As Number, nTop As Number,;
  4544.     lcContents As String, lcFillChar As String, lnOffset As Integer, lbStretch As Boolean, lnCodePage As Integer, nHeight As Number, ;
  4545.     nWidth As Integer, lcStyle As String, lnMode As Integer, lcUser As String
  4546. IF EMPTY(lcContents)
  4547.     RETURN .T.
  4548. ENDIF
  4549. LOCAL lcOrigContents, lnTimes, lcTabRepl
  4550. lnTimes        = 8
  4551. lcTabRepl      = REPLICATE(CHR(160),lnTimes)
  4552. lcOrigContents = lcContents
  4553. lcOrigContents = STRTRAN(lcOrigContents,CHR(9), lcTabRepl) && Replaces the <TAB> With a CHR(160) to keep paragraphs
  4554. lcContents     = STRTRAN(lcContents, CHR(9), lcTabRepl)
  4555. IF This.lRightToLeft
  4556.     lcContents = xfcRevertString(lcContents + CHR(0))
  4557. ENDIF
  4558. LOCAL lnOcurrences As Integer, lnAncho As Integer, lnFontHandle As Integer, lnAlto As Integer, lcUnderLineText As String, lnRotate As Integer, lnCharWidth As Integer
  4559. lnRotate = 0
  4560. WITH This
  4561.     *!* Code to handle the Dynamic Options added in SP2
  4562.     IF !Empty(lcStyle) ;
  4563.             AND (This.lDefaultMode OR (VARTYPE(_goHelper) = "O" AND USED(_goHelper.oListener.cMainAlias)))
  4564.         && AND This.lDefaultMode Then && Dynamic Properties are stored here as xml
  4565.         TRY
  4566.             * Get the current field data
  4567.             IF NOT This.lDefaultMode
  4568.                 LOCAL lcAlias, lcMainAlias, lnRec
  4569.                 lnRec = DBFRECNO
  4570.                 lcAlias = ALIAS()
  4571.                 lcMainAlias = _goHelper.oListener.cMainAlias
  4572.                 SELECT(lcMainAlias)
  4573.                 GO (lnRec)
  4574.             ENDIF
  4575.             If .ProcessDynamics(lcStyle, "FIELD") Then
  4576.                 lcFontFace = Iif(PemStatus(.oDynamics, "cFontName", 5), .oDynamics.cFontName, lcFontFace)
  4577.                 lnFontSize = Iif(PemStatus(.oDynamics, "nFontSize",5),  Iif(.oDynamics.nFontSize!=0, .oDynamics.nFontSize, lnFontSize), lnFontSize)
  4578.                 liFontStyle = Iif(PemStatus(.oDynamics, "nFontStyle",5), Iif(.oDynamics.nFontStyle!=0, .oDynamics.nFontStyle, liFontStyle), liFontStyle)
  4579.                 lcContents = Iif(PemStatus(.oDynamics, "cValue",5), Iif(!Empty(.oDynamics.cValue), .oDynamics.cValue, lcContents), lcContents)
  4580.                 lnPenRed = Iif(PemStatus(.oDynamics, "nPenRed",5), .oDynamics.nPenRed, lnPenRed)
  4581.                 lnPenBlue = Iif(PemStatus(.oDynamics, "nPenBlue",5), .oDynamics.nPenBlue, lnPenBlue)
  4582.                 lnPenGreen = Iif(PemStatus(.oDynamics, "nPenGreen",5), .oDynamics.nPenGreen, lnPenGreen)
  4583.                 lnFillRed = Iif(PemStatus(.oDynamics, "nFillRed",5), .oDynamics.nFillRed, lnFillRed)
  4584.                 lnFillBlue = Iif(PemStatus(.oDynamics, "nFillBlue",5), .oDynamics.nFillBlue, lnFillBlue)
  4585.                 lnFillGreen = Iif(PemStatus(.oDynamics, "nFillGreen",5), .oDynamics.nFillGreen, lnFillGreen)
  4586.                 lnRotate = Iif(PemStatus(.oDynamics, "nRotationDegree", 5), .oDynamics.nRotationDegree, 0)
  4587.             EndIf
  4588.             * Restore the driving table
  4589.             IF NOT This.lDefaultMode
  4590.                 SELECT(lcAlias)
  4591.             ENDIF
  4592.         CATCH TO loExc
  4593.             * SET STEP ON
  4594.         ENDTRY
  4595.     ENDIF
  4596.     If lnFillRed=-1 And lnFillBlue=-1 And lnFillGreen=-1 Then &&Default Colors of VFP Report Designer
  4597.         Store 255 To lnFillRed, lnFillBlue, lnFillGreen
  4598.     EndIf
  4599.     * Draw the field background
  4600.     IF lnMode = 0 && Mode: 0 = Opaque background; 1 = Transparent
  4601.         lnPenSize = 0
  4602.         lnPenPat  = 0
  4603.         lnFillPat = 1
  4604.         lcStyle   = ""
  4605.         LOCAL lnObjContType
  4606.         lnObjContType = 0
  4607.         This.ProcessShapes(lnFillRed, lnFillGreen, lnFillBlue, ;
  4608.             lnFillRed, lnFillGreen, lnFillBlue, ;
  4609.             nLeft, nTop, nWidth, nHeight, lnOffset, ;
  4610.             lnPenSize, lnPenPat, lnFillPat, lcStyle, lnMode, lnObjContType, .T.)
  4611.         && Last parameter is to inform 'ProcessShapes' not to draw a line border
  4612.     ENDIF
  4613.     nTop = .nPageHeight - nTop && Change the Top Coordinates Because of the PDF Coordinate System
  4614.     * Get the font Handle
  4615.     * If no font is retrieved, then draw the string as an image
  4616.     lnFontHandle = This.Getfonthandle(lcFontFace, liFontStyle)
  4617.     IF lnFontHandle = 0
  4618.         LOCAL lcImage, lnTxtW, lnTxtH
  4619.         lnTxtW  = nWidth
  4620.         lnTxtH  = nHeight
  4621.         lcImage = This.StringToPic(lcContents, lcFontFace, lnFontSize, ;
  4622.             IIF(lnPenRed   = -1, 0, lnPenRed), ;
  4623.             IIF(lnPenGreen = -1, 0, lnPenGreen), ;
  4624.             IIF(lnPenBlue  = -1, 0, lnPenBlue), ;
  4625.             0, @lnTxtW, @lnTxtH)
  4626.         This.ProcessPictures2(lcImage, nLeft, nTop, lnTxtW, lnTxtH)
  4627.         RETURN
  4628.     ENDIF
  4629.     This._Stat = HPDF_Page_BeginText(.oPage) &&Change to Text Mode
  4630.     This._Stat = HPDF_Page_SetFontAndSize(.oPage, lnFontHandle, lnFontSize) &&Find and choose the font
  4631.     lnCharWidth = FontMetric(7, lcFontFace, lnFontSize, .cTextStyle)
  4632.     IF lnPenRed=-1 And lnPenBlue=-1 And lnPenGreen=-1 Then &&Default Colors of VFP Report Designer
  4633.         STORE 0 TO lnPenBlue, lnPenRed, lnPenGreen
  4634.     ENDIF
  4635.     lnAncho = HPDF_Page_TextWidth(.oPage, lcContents) &&Get the size of the text width
  4636.     lnAlto  = HPDF_Page_GetCurrentFontSize(.oPage) && Get the height of the current font
  4637.     * Not precise at all
  4638.     LOCAL lnFontHeight2
  4639.     lnFontHeight2 = FontMetric(1, lcFontFace, lnFontSize, .cTextStyle)
  4640.     * Process Underline, currently being tested
  4641.     IF BITTEST(liFontStyle, 2) THEN
  4642.         lcUnderLineText = REPLICATE("_", ROUND(lnAncho / HPDF_Page_TextWidth(.oPage, "_"), 0))
  4643.         IF HPDF_Page_TextWidth(.oPage, lcUnderLineText) > nWidth THEN
  4644.             lcUnderLineText = .ParseUnderLineText(lcUnderLineText, nWidth, lnAncho)
  4645.         ENDIF
  4646.         .lUnderline = .T.
  4647.     ELSE
  4648.         .lUnderline = .F.
  4649.     ENDIF
  4650.     This._Stat = HPDF_Page_SetRGBFill(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255) &&Convert colors to PDF mode
  4651.     This._Stat = HPDF_Page_SetTextLeading(.oPage, lnFontSize) && Space between lines
  4652.     IF lnRotate = 0 THEN && No Text Rotation
  4653. *!*            LOCAL lnLines
  4654. *!*            lnLines = CEILING(nHeight / lnFontHeight2)
  4655. *!*            IF lbStretch OR (CHR(10) $ lcContents) && OR (lnLines > 1)
  4656. *!*                nHeight = This.GetParHeight(lcContents, lcFontFace, lnFontSize, liFontStyle, nLeft, nTop, nWidth, nHeight)
  4657. *!*            ELSE
  4658. *!*                * 2010-12-19 - by Fabio Vieira
  4659. *!*                DO WHILE HPDF_Page_TextWidth(.oPage, lcContents) > nWidth
  4660. *!*                    lcContents = PADR(lcContents,LEN(lcContents)-1)
  4661. *!*                ENDDO
  4662. *!*                lnAlto = 0
  4663. *!*            ENDIF
  4664.         *!*    HPDF_Font_MeasureText()
  4665.         *!*    HPDF_UINT HPDF_Font_MeasureText (HPDF_Font          font,
  4666.         *!*                                     const HPDF_BYTE   *text,
  4667.         *!*                                     HPDF_UINT          len,
  4668.         *!*                                     HPDF_REAL          width,
  4669.         *!*                                     HPDF_REAL          font_size,
  4670.         *!*                                     HPDF_REAL          char_space,
  4671.         *!*                                     HPDF_REAL          word_space,
  4672.         *!*                                     HPDF_BOOL          wordwrap,
  4673.         *!*                                     HPDF_REAL         *real_width);
  4674.         *!*
  4675.         *!* Declare Integer HPDF_Font_MeasureText In libhpdf.dll
  4676.         *!*         Integer, String, Integer, Single, Single, Single, Single, Integer, Single @
  4677.         *!*
  4678.         *!*    calculates the byte length which can be included within the specified width.
  4679.         *!*
  4680.         *!*    Parameters
  4681.         *!*     font - Specify the handle of a font object.
  4682.         *!*     text - The text to use for calculation.
  4683.         *!*     len - The length of the text.
  4684.         *!*     width - The width of the area to put the text.
  4685.         *!*     font_size  - The size of the font.
  4686.         *!*     char_space - The character spacing.
  4687.         *!*     word_space - The word spacing.
  4688.         *!*     wordwrap - Suppose there are three words: "ABCDE", "FGH", and "IJKL".
  4689.         *!*     Also, suppose the substring until "J" can be included within the width (12 bytes).
  4690.         *!*     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).
  4691.         LOCAL lnLen, lnChars, lnRealWidth, lcCurrText, lcRemainingText, lnLineHeight, lnLinesAvail, lnCurrLine
  4692.         STORE "" TO lcCurrText
  4693.         STORE  0 TO lnLen, lnChars, lnRealWidth
  4694.         lcRemainingText = lcOrigContents
  4695.         lnLineHeight = This.GetParHeight("AB", lcFontFace, lnFontSize, liFontStyle, 0, 0, 10000, 10000)
  4696.         lnLinesAvail = ROUND(nHeight / lnLineHeight, 0)
  4697.         lnCurrLine   = 1
  4698.         DO WHILE .T.
  4699.             lnRealWidth = 0
  4700.             lnLen = LEN(lcRemainingText)
  4701.             lnChars = HPDF_Font_MeasureText( lnFontHandle, ;
  4702.                 lcRemainingText, ;
  4703.                 LEN(lcRemainingText), ;
  4704.                 nWidth, ;
  4705.                 lnFontSize, ;
  4706.                 0, ;
  4707.                 0, ;
  4708.                 1, ;
  4709.                 @lnRealWidth)
  4710.             IF lnChars = 0 && it seems that we had one single word, so we'll cut the word in the middle
  4711.                 && Changing the WordWrap parameter to 0
  4712.                 lnChars = HPDF_Font_MeasureText( lnFontHandle, ;
  4713.                     lcRemainingText, ;
  4714.                     LEN(lcRemainingText), ;
  4715.                     nWidth, ;
  4716.                     lnFontSize, ;
  4717.                     0, ;
  4718.                     0, ;
  4719.                     0, ;
  4720.                     @lnRealWidth)
  4721.             ENDIF
  4722.             lcCurrText = LEFT(lcRemainingText, lnChars)
  4723.             lcRemainingText = ALLTRIM(SUBSTR(lcRemainingText, lnChars + 1))
  4724.             IF NOT "<FJ>" $ lcUser
  4725.                 lcCurrText = ALLTRIM(lcCurrText)
  4726.                 * lcCurrText = CHRTRAN(lcCurrText, CHR(10), CHR(13))
  4727.                 lcCurrText = CHRTRAN(lcCurrText, CHR(10), "")
  4728.                 lcCurrText = CHRTRAN(lcCurrText, CHR(13), "")
  4729.             ELSE
  4730.                 IF (CHR(10) $ lcCurrText) OR (EMPTY(lcRemainingText))
  4731.                     lcCurrText = ALLTRIM(lcCurrText)
  4732.                 ELSE
  4733.                     && Trick to force the justification, telling the HPDF engine that we'll have a next line, forcing it to continue justifying
  4734.                     lcCurrText = ALLTRIM(lcCurrText) + CHR(10) + CHR(10)
  4735.                 ENDIF
  4736.             ENDIF
  4737.             lcContents = lcCurrText
  4738.             DO CASE
  4739.             CASE "<FJ>" $ lcUser
  4740.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_JUSTIFY, 0)
  4741.             CASE lnOffset = 0 && Left Aligned
  4742.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_LEFT, 0)
  4743.                 IF .lUnderline Then &&Draw fake underline text
  4744.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth , nTop - nHeight - lnAlto, lcUnderLineText, HPDF_TALIGN_LEFT, 0)
  4745.                 ENDIF
  4746.             CASE lnOffset = 1 && Right Aligned
  4747.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_RIGHT, 0)
  4748.                 If .lUnderline Then &&Draw fake underline text
  4749.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcUnderLineText, HPDF_TALIGN_RIGHT, 0)
  4750.                 EndIf
  4751.             Case lnOffset = 2 && Center Aligned
  4752.                 This._Stat2 = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcContents, HPDF_TALIGN_CENTER, 0)
  4753.                 If .lUnderline Then &&Draw fake underline text
  4754.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcUnderLineText, HPDF_TALIGN_CENTER, 0)
  4755.                 EndIf
  4756.             EndCase
  4757.             nTop = nTop - lnLineHeight
  4758.             lnCurrLine = lnCurrLine + 1
  4759.             IF (NOT lbStretch) AND (lnCurrLine > lnLinesAvail)
  4760.                 EXIT
  4761.             ENDIF
  4762.             IF (EMPTY(lcRemainingText))
  4763.                 EXIT
  4764.             ENDIF
  4765.         ENDDO
  4766.     Else
  4767.         *!* Let's Draw the rotated text
  4768.         Local lnRad As Number
  4769.         lnRad = ((lnRotate * -1) / 180) * Pi()
  4770.         This._Stat = HPDF_Page_SetTextMatrix(.oPage, Cos(lnRad), Sin(lnRad), -Sin(lnRad), Cos(lnRad), nLeft, nTop)
  4771.         This._Stat2 = HPDF_Page_ShowText(.oPage, lcContents)
  4772.     EndIf
  4773.     This._Stat = HPDF_Page_EndText(.oPage)
  4774. ENDWITH
  4775. LOCAL llSuccess
  4776. llSuccess = This._Stat2 = 0
  4777. RETURN llSuccess
  4778. ENDPROC
  4779. PROCEDURE processshapes
  4780. LPARAMETERS lnFillRed As Integer,lnFillGreen As Integer,lnFillBlue As Integer,lnPenRed As Integer,lnPenGreen As Integer,;
  4781.     lnPenBlue As Integer,nLeft As Number,nTop As Number,nWidth As Number,nHeight As Number,lnOffset As Integer, ;
  4782.     lnPenSize As Integer, lnPenPat As Integer, lnFillPat As Integer, lcStyle As String, lnMode as Integer, lnObjectContinuationType as Integer, ;
  4783.     tlSkipBorder
  4784. *!*    Value    Continuation Type  
  4785. *!*    ------- --------------------------------------------------------------------------
  4786. *!*    0        Complete (no continuation).
  4787. *!*    1        Start of layout element occurrence, will not finish on the current page.
  4788. *!*    2        Mid-element, neither started nor finished on the current page.
  4789. *!*    3        End of element, completed on the current page.
  4790. IF TYPE("lnObjectContinuationType") <> "N"
  4791.     lnObjectContinuationType = 0
  4792. ENDIF
  4793. LOCAL lcDash As String, nTop2 As Integer
  4794. LOCAL lDecomposeRect as Boolean, lDoTopLine as Boolean, lDoLeftLine as Boolean, lDoRightLine as Boolean, ;
  4795.       lDoBottomLine as Boolean, Line_lnPenRed as Integer, Line_lnPenGreen as Integer, Line_lnPenBlue as Integer
  4796. *!* 2010-08-25 - Jacques Parent - Let multiple band shape be printed correctly
  4797. DO CASE
  4798. *    CASE lnOffSet <> 0
  4799.         *!* Other than rectangle...
  4800.         *!* OK, we proceed!
  4801. *        lDecomposeRect = .F.
  4802.     CASE lnObjectContinuationType == 0
  4803.         *!* No continuation
  4804.         *!* OK, we proceed!
  4805.         lDecomposeRect = .F.
  4806.     CASE lnObjectContinuationType == 1
  4807.         *!* Top element
  4808.         *!* OK, we proceed!
  4809.         lDecomposeRect     = .T.
  4810.         lDoTopLine         = .T.
  4811.         lDoLeftLine        = .T.
  4812.         lDoRightLine    = .T.
  4813.         lDoBottomLine    = .F.
  4814.     CASE lnObjectContinuationType == 2
  4815.         *!* Mid element... 
  4816.         lDecomposeRect     = .T.
  4817.         lDoTopLine        = .F.
  4818.         lDoLeftLine        = .T.
  4819.         lDoRightLine    = .T.
  4820.         lDoBottomLine    = .F.
  4821.     CASE lnObjectContinuationType == 3
  4822.         *!* Bottom element
  4823.         *!* OK, we proceed!
  4824.         lDecomposeRect     = .T.
  4825.         lDoTopLine        = .F.
  4826.         lDoLeftLine        = .T.
  4827.         lDoRightLine    = .T.
  4828.         lDoBottomLine    = .T.
  4829. ENDCASE
  4830. With This
  4831.     *!* Code to handle the Dynamic Options added in SP2
  4832.     IF !EMPTY(lcStyle) THEN &&Dynamic Properties are stored here as xml
  4833.         If .ProcessDynamics(lcStyle, "SHAPE") Then
  4834.             nHeight = Iif(PemStatus(.oDynamics, "nHeight",5), Iif(.oDynamics.nHeight!=-1, (.oDynamics.nHeight / 960) * 72, nHeight), nHeight)
  4835.             nWidth = Iif(PemStatus(.oDynamics, "nWidth",5), Iif(.oDynamics.nWidth!=-1, (.oDynamics.nWidth / 960) * 72, nWidth), nWidth)
  4836.         EndIf
  4837.     EndIf
  4838.     nTop2 = nTop
  4839.     nTop = .nPageHeight - nTop
  4840.     If lnFillRed = -1
  4841.         lnFillRed     = 255
  4842.         lnFillGreen = 255
  4843.         lnFillBlue     = 255
  4844.     ENDIF
  4845. *    IF lnMode = 0 OR lnFillPat > 0 && Opaque
  4846.     IF lnFillPat > 0 && Opaque    => 2010-08-25 - Jacques Parent - Let transparent be transparent, not RGB(255,255,255)
  4847.         This._Stat = HPDF_Page_SetRGBFill(This.oPage, lnFillRed / 255, lnFillGreen / 255, lnFillBlue / 255)
  4848.         lnMode = 0
  4849.     ELSE
  4850.         lnMode = 1
  4851.     ENDIF 
  4852.     IF lDecomposeRect
  4853.         *!* The rectangle that will be traced will have border same color as the filling!
  4854.         Line_lnPenRed     = lnPenRed
  4855.         Line_lnPenGreen = lnPenGreen
  4856.         Line_lnPenBlue     = lnPenBlue
  4857.         IF lnMode == 0
  4858.             lnPenRed     = lnFillRed
  4859.             lnPenGreen     = lnFillGreen
  4860.             lnPenBlue     = lnFillBlue
  4861.         ENDIF
  4862.     ELSE
  4863.         If lnPenRed = -1
  4864.             IF lnPenPat = 0
  4865.                 lnPenRed     = 255
  4866.                 lnPenGreen     = 255
  4867.                 lnPenBlue     = 255
  4868.             ELSE 
  4869.                 lnPenRed     = 0
  4870.                 lnPenGreen     = 0
  4871.                 lnPenBlue     = 0
  4872.             ENDIF 
  4873.         ENDIF 
  4874.     ENDIF
  4875. * From CChalom to JParent
  4876. * Jacques,
  4877. * Please check the lines below. I didn't apply any major change cause you did a big
  4878. * refactoring in this method months ago.
  4879. * A "hidden" error was happening if the value lnPenRed, lnPenGreen or lnPenBlue is -1
  4880. * I've included a basic checking, just skipping this line for now
  4881. * Please revise this, the recommended is to change from -1 to 0 or 255,
  4882. * depending on the situation. 
  4883. IF lnPenRed <> -1 && AND lnPenPat <> 0 && None
  4884.     This._Stat = HPDF_Page_SetRGBStroke(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255)
  4885. ENDIF 
  4886. *!*    * Check if we are done
  4887. *!*    IF tlSkipBorder ;   && Called from ProcessFields
  4888. *!*        OR lnPenPat = 0 && Don't need to draw border
  4889. *!*        RETURN 
  4890. *!*    ENDIF 
  4891.     IF (lnPenSize >= 1) AND (lnPenPat > 0) AND (NOT tlSkipBorder)
  4892.         This._Stat = HPDF_Page_SetLineWidth(.oPage, lnPenSize)
  4893.     ELSE
  4894.         This._Stat = HPDF_Page_SetLineWidth(.oPage, 0)
  4895.     ENDIF
  4896.     DO CASE
  4897.         Case lnPenPat=8 &&Normal Mode
  4898.             This._Stat = HPDF_Page_SetDash(.oPage, Null, 0, 0)
  4899.         Case lnPenPat=1 &&Dotted
  4900.             lcDash=Chr(3) + Chr(0) + Chr(0)
  4901.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 1, 1)
  4902.         Case lnPenPat=2 &&Dashed
  4903.             lcDash = Chr(18)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  4904.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 2, 2)
  4905.         Case lnPenPat=3 &&Dash-dot
  4906.             lcDash = Chr(9)+Chr(0)+Chr(6)+Chr(0)+Chr(3)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  4907.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 4, 0)
  4908.         Case lnPenPat=4 &&Dash-dot-dot
  4909.             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)
  4910.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 6, 0)        
  4911.     ENDCASE
  4912.     IF NOT lDecomposeRect OR (lnMode==0 AND lDecomposeRect)    && If mode == 1, then there is no reason to draw a rectangle!
  4913.         *!* Draw the rectangle
  4914.         Do Case
  4915.             Case lnOffSet=0 &&Normal Rectangle
  4916.                 This._Stat = HPDF_Page_Rectangle(.oPage, nLeft, nTop - nHeight, nWidth, nHeight)
  4917.             Case Between(lnOffSet, 1, 98) &&Rounded Rectangle
  4918.                 *!* Code to Draw Rounded Rectangle Courtesy of Dorin Vasilescu
  4919.                 Local nRay As Number, nb As Number
  4920.                 nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 2)), Min(lnOffSet, Int(nWidth / 2))), 0)
  4921.                   nB = .nPageHeight - (nTop2 + nHeight) 
  4922.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  4923.                 This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  4924.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) 
  4925.                 This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  4926.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop)
  4927.                 This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  4928.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  4929.                 This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  4930.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  4931.             Case lnOffSet=99 &&Ellipsis
  4932.                 This._Stat = HPDF_Page_Ellipse(.oPage, nLeft + (nWidth / 2), nTop - (nHeight / 2), nWidth / 2, nHeight / 2)
  4933.         EndCase
  4934.         *!* Refresh page
  4935.         * Mode: 0 = Opaque background; 1 = Transparent
  4936.         IF lnMode = 1 && Transparent
  4937.             This._Stat = HPDF_Page_Stroke(.oPage)
  4938.         ELSE && 0 = Opaque
  4939.             This._Stat = HPDF_Page_FillStroke(.oPage)
  4940.         ENDIF 
  4941.     ENDIF
  4942.     IF lDecomposeRect AND Line_lnPenRed <> lnFillRed AND Line_lnPenGreen <> lnFillGreen AND Line_lnPenBlue <> lnFillBlue
  4943.         *!* Draw the necessary lines
  4944.         IF Between(lnOffSet, 1, 98) &&Rounded Rectangle
  4945. *!*                    Local nRay As Number, nb As Number
  4946. *!*                    nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 2)), Min(lnOffSet, Int(nWidth / 2))), 0)
  4947. *!*                      nB = .nPageHeight - (nTop2 + nHeight) 
  4948. *!*                    This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  4949. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  4950. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) 
  4951. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  4952. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop)
  4953. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  4954. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  4955. *!*                    This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  4956. *!*                    This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  4957.             IF lDoTopLine
  4958.                 Local nRay As Number, nb As Number
  4959.                 nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 1)), Min(lnOffSet, Int(nWidth / 2))), 0) * 1
  4960.                   nB = .nPageHeight - (nTop2 + nHeight) 
  4961.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  4962. ***                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  4963. *                This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) && Inferior
  4964. *                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  4965.                 This._Stat = HPDF_Page_MoveTo(.oPage, (nLeft + nWidth), nTop - nRay)
  4966.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop)
  4967. *                This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  4968.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nTop)
  4969.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  4970. *                This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  4971. *                This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  4972.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2, nLeft-0.5 + nRay, nWidth+0.5 - nRay - nRay,;
  4973.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  4974.             ENDIF
  4975.             IF lDoBottomLine
  4976.                 Local nRay As Number, nb As Number
  4977.                 nRay = Round(Iif(nWidth > nHeight, Min(lnOffSet, Int(nHeight / 1)), Min(lnOffSet, Int(nWidth / 2))), 0) * 1
  4978.                   nB = .nPageHeight - (nTop2 + nHeight) 
  4979.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nB)
  4980. *                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth) - nRay, nB)
  4981.                 This._Stat = HPDF_Page_MoveTo(.oPage, (nLeft + nWidth) - nRay, nB)
  4982.                 This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nB, (nLeft + nWidth), nB, (nLeft + nWidth), nB + nRay) && Inferior direito
  4983. *                This._Stat = HPDF_Page_LineTo(.oPage, (nLeft + nWidth), nTop - nRay)
  4984.                 This._Stat = HPDF_Page_MoveTo(.oPage, (nLeft + nWidth), nTop - nRay)
  4985. *                This._Stat = HPDF_Page_CurveTo(.oPage, (nLeft + nWidth), nTop, (nLeft + nWidth), nTop, (nLeft + nWidth) - nRay, nTop) && Superior direito
  4986. ****                This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nRay, nTop)
  4987. *                This._Stat = HPDF_Page_MoveTo(.oPage, nLeft + nRay, nTop)
  4988. *                This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nTop, nLeft, nTop, nLeft, nTop - nRay)
  4989. *                This._Stat = HPDF_Page_LineTo(.oPage, nLeft , nB + nRay)
  4990.                 This._Stat = HPDF_Page_MoveTo(.oPage, nLeft , nB + nRay)
  4991.                 This._Stat = HPDF_Page_CurveTo(.oPage, nLeft, nB , nLeft, nB, nLeft + nRay, nB)
  4992.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2 + nHeight, nLeft-0.5 + nRay, nWidth+0.5 -nRay -nRay,;
  4993.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  4994.             ENDIF
  4995.             IF lDoLeftLine AND (lDoBottomLine = .F.) AND (lDoTopLine = .F.) && AND (lDoRightLine = .F.)
  4996.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft, 0,;
  4997.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  4998.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft+nWidth, 0,;
  4999.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5000.             ENDIF
  5001. *!*                IF lDoRightLine AND (lDoBottomLine = .F.) AND (lDoTopLine = .F.) AND (lDoLeftLine = .F.)
  5002. *!*                    This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft+nWidth, 0,;
  5003. *!*                                  nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5004. *!*                ENDIF
  5005.         ELSE 
  5006.             IF lDoTopLine
  5007.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2, nLeft-0.5, nWidth+0.5,;
  5008.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  5009.             ENDIF
  5010.             IF lDoLeftLine
  5011.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft, 0,;
  5012.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5013.             ENDIF
  5014.             IF lDoRightLine
  5015.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2-0.5, nLeft+nWidth, 0,;
  5016.                               nHeight+0.5, lnPenSize, 0, lnPenPat, lcStyle)
  5017.             ENDIF
  5018.             IF lDoBottomLine
  5019.                 This.ProcessLines(Line_lnPenRed, Line_lnPenGreen, Line_lnPenBlue, nTop2 + nHeight, nLeft-0.5, nWidth+0.5,;
  5020.                               0, lnPenSize, 1, lnPenPat, lcStyle)
  5021.             ENDIF
  5022.         ENDIF
  5023.     ENDIF
  5024. ENDWITH
  5025. ENDPROC
  5026. PROCEDURE processlabel
  5027. Lparameters lcFontFace As String, liFontStyle As Integer, lnFontSize As Number, lnPenRed As Number, lnPenGreen As Number,;
  5028.     lnPenBlue As Number, lnFillRed As Number, lnFillGreen As Number, lnFillBlue As Number, nLeft As Number, nTop As Number,;
  5029.     lcContents As String, lcFillChar As String, lnOffset As Integer, nWidth As Integer, lnCodePage As Integer, nHeight As Number,;
  5030.     lcPicture As String, lcStyle As String, lnMode as Integer
  5031. Local lnAlto As Number, lnTxtWidth As String, lnFontHandle As Integer, lcUnderLineText As String, lnRotate As Integer, lnCharWidth As Integer
  5032. lnRotate = 0
  5033. With This
  5034.     If !Empty(lcStyle) Then &&Dynamic Properties are stored here as xml
  5035.         If .ProcessDynamics(lcStyle, "LABEL") Then
  5036.             lnRotate = Iif(PemStatus(.oDynamics, "nRotationDegree", 5),. oDynamics.nRotationDegree, 0)
  5037.         EndIf
  5038.     EndIf
  5039.     If lnPenRed=-1 And lnPenBlue=-1 And lnPenGreen=-1 Then &&Replace the Default forecolor of VFP with Black
  5040.         Store 0 To lnPenBlue, lnPenRed, lnPenGreen
  5041.     EndIf
  5042.     If lnFillRed=-1 And lnFillBlue=-1 And lnFillGreen=-1 Then &&Default Colors of VFP Report Designer
  5043.         Store 255 To lnFillRed, lnFillBlue, lnFillGreen
  5044.     EndIf
  5045.     * Draw the field background
  5046.     IF lnMode = 0 && Mode: 0 = Opaque background; 1 = Transparent
  5047.         lnPenSize = 0
  5048.         lnPenPat = 0
  5049.         lnFillPat = 1
  5050.         lcStyle = ""
  5051.         This.ProcessShapes(lnFillRed, lnFillGreen, lnFillBlue, ;
  5052.                 lnFillRed, lnFillGreen, lnFillBlue, ;
  5053.                 nLeft, nTop, nWidth + 5, nHeight, lnOffset, ;
  5054.                 lnPenSize, lnPenPat, lnFillPat, lcStyle, lnMode)
  5055.     ENDIF
  5056.     nTop = .nPageHeight - nTop &&Change the Top Coordinates Because of the PDF Coordinate System
  5057. * Get the font Handle
  5058. * If no font is retrieved, then draw the string as an image
  5059. lnFontHandle = This.Getfonthandle(lcFontFace, liFontStyle)
  5060. IF lnFontHandle = 0
  5061.     LOCAL lcImage, lnTxtW, lnTxtH
  5062.     lnTxtW  = nWidth
  5063.     lnTxtH  = nHeight
  5064.     lcImage = This.StringToPic(lcContents, lcFontFace, lnFontSize, ;
  5065.         IIF(lnPenRed   = -1, 0, lnPenRed), ;
  5066.         IIF(lnPenGreen = -1, 0, lnPenGreen), ;
  5067.         IIF(lnPenBlue  = -1, 0, lnPenBlue), ;
  5068.         0, @lnTxtW, @lnTxtH)
  5069.     This.ProcessPictures2(lcImage, nLeft, nTop, lnTxtW, lnTxtH)
  5070.     RETURN
  5071. ENDIF
  5072. *    lnFontHandle = HPDF_GetFont(.pdfHandle, .SearchFont(lcFontFace, liFontStyle), Iif(Empty(.cCodePage), NULL, .cCodePage)) &&Find and select the font
  5073.     lnCharWidth = FontMetric(6, lcFontFace, lnFontSize, .cTextStyle)
  5074.     This._Stat = HPDF_Page_BeginText(.oPage) &&Start text proccesing mode
  5075.     This._Stat = HPDF_Page_SetFontAndSize(.oPage, lnFontHandle, lnFontSize) 
  5076.     lnTxtWidth = HPDF_Page_TextWidth(.oPage, lcContents) &&Get the size of the text width
  5077. *    lnAlto = HPDF_Page_GetCurrentFontSize(.oPage)
  5078.     lnAlto = FontMetric(1, lcFontFace, lnFontSize, .cTextStyle)
  5079.     This._Stat = HPDF_Page_SetRGBStroke(.oPage, lnFillRed / 255, lnFillGreen / 255, lnFillBlue / 255) &&Set Forecolor of the text
  5080.     This._Stat = HPDF_Page_SetRGBFill(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255) &&Set Forecolor of the text
  5081.     If Bittest(liFontStyle, 2) Then
  5082.         lcUnderLineText=Replicate("_", Round(lnTxtWidth/HPDF_Page_TextWidth(.oPage, "_"), 0))
  5083.         .lUnderline= .T.
  5084.     Else
  5085.         .lUnderline= .F.
  5086.     EndIf
  5087.     If lnRotate=0 Then
  5088.         LOCAL lcOrigContents
  5089.         lcOrigContents = lcContents
  5090.         LOCAL lnParag, lnParHeight, n, lcPar, lnParTop, lnAlignMode, lnParWidth
  5091.         lnParTop = 0
  5092.         lnParag  = GETWORDCOUNT(lcContents, CHR(10))
  5093.         DO CASE
  5094.         CASE EMPTY(lcPicture)  && Left aligned
  5095.             lnAlignMode = HPDF_TALIGN_LEFT
  5096.         CASE lcPicture = '"@I"'  && Center aligned
  5097.             lnAlignMode = HPDF_TALIGN_CENTER
  5098.         OTHERWISE && Right aligned
  5099.             lnAlignMode = HPDF_TALIGN_RIGHT
  5100.         ENDCASE
  5101.         FOR m.n = 1 TO lnParag
  5102.             lcPar = GETWORDNUM(lcOrigContents, m.n, CHR(10))
  5103.             IF .lUnderline
  5104.                 lnParWidth = HPDF_Page_TextWidth(.oPage, lcPar) && Get the size of the text width
  5105.                 lcUnderLineText = Replicate("_", Round(lnParWidth/HPDF_Page_TextWidth(.oPage, "_"), 0) + 0.3)
  5106.             ENDIF
  5107.             * Because in labels we don't have a width limit,
  5108.             * here we multiply by 1000 the width, to make sure the text for that line
  5109.             * will fit
  5110.             lnParHeight = This.GetParHeight(lcPar, lcFontFace, lnFontSize, liFontStyle, nLeft, nTop, nWidth * 1000, nHeight)
  5111.             DO CASE
  5112.             CASE lnAlignMode = HPDF_TALIGN_CENTER
  5113.                 This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth + 20, nTop - nHeight - lnAlto, lcPar, lnAlignMode,0)
  5114.                 If .lUnderline Then
  5115.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth + 20, nTop - nHeight - lnAlto, lcUnderLineText, lnAlignMode, 0)
  5116.                 EndIf
  5117.             CASE lnAlignMode = HPDF_TALIGN_RIGHT
  5118.                 This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcPar, lnAlignMode,0)
  5119.                 If .lUnderline Then
  5120.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft - 20, nTop - lnParTop, nLeft + nWidth, nTop - nHeight - lnAlto, lcUnderLineText, lnAlignMode, 0)
  5121.                 EndIf
  5122.             OTHERWISE
  5123.                 This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop - lnParTop, nLeft + lnTxtWidth + lnCharWidth, nTop - nHeight - lnAlto, lcPar, lnAlignMode,0)
  5124.                 If .lUnderline Then
  5125.                     This._Stat = HPDF_Page_TextRect(.oPage, nLeft, nTop - lnParTop, nLeft + lnTxtWidth + lnCharWidth, nTop - nHeight - lnAlto, lcUnderLineText, lnAlignMode, 0)
  5126.                 EndIf
  5127.             ENDCASE
  5128.             lnParTop    = lnParTop + lnParHeight
  5129.         ENDFOR
  5130.     Else
  5131.         *!* Let's Draw the rotated text
  5132.         Local lnRad As Number
  5133.         lnRad = ((lnRotate * -1) / 180) * Pi()
  5134.         This._Stat = HPDF_Page_SetTextMatrix (.oPage, Cos(lnRad), Sin(lnRad), -Sin(lnRad), Cos(lnRad), nLeft, nTop)
  5135.         This._Stat = HPDF_Page_ShowText (.oPage, lcContents)
  5136.     EndIf
  5137.     This._Stat = HPDF_Page_EndText(.oPage)
  5138. ENDWITH
  5139. ENDPROC
  5140. PROCEDURE processpictures
  5141. Lparameters nTop As Number,nLeft As Number,nWidth As Number,nHeight As Number,lcContents As String,;
  5142.     GDIPlusImage As Number, lnOffset As Integer, liPictureMode As Integer, lcStyle As String
  5143. #Define PICTURE_SOURCE_FILENAME         0  && stored in PICTURE column
  5144. #Define PICTURE_SOURCE_GENERAL          1  && stored in NAME    column
  5145. #Define PICTURE_SOURCE_EXPRESSION       2  && stored in NAME    column
  5146. IF EMPTY(GDIPlusImage) AND EMPTY(lcContents) && Nothing to render
  5147.                     && try drawing directly, from the original canvas
  5148.     RETURN .F.
  5149. ENDIF
  5150. Local lcFile As String, lcFile2 As String, lnHandle As Integer
  5151. nTop = This.nPageHeight - nTop
  5152. lnHandle = 0
  5153. Local lnPicWidth, lnPicHeight
  5154. Store 0 TO lnPicWidth, lnPicHeight
  5155. * liPictureMode = MAX(liPictureMode, 1)
  5156. If GDIPlusImage != 0 Then &&General Field or Expresion
  5157.     * CChalom 2010-01-17
  5158.     * Removed the dependance of having "System.App" from GdiPlusX
  5159.     * Now using _Gdiplus.vcx that is already embedded in ReportOutput.App
  5160.     *!* Original code
  5161.     *!*        Do System.App &&Initialize GDIPLUSX library
  5162.     *!*        Local loImage As xfcBitmap
  5163.     *!*        With _Screen.System.Drawing
  5164.     *!*            loImage = .Bitmap.New()
  5165.     *!*            loImage.Handle = GDIPlusImage
  5166.     *!*            lcFile = This._cTempFolder + Sys(2015) + ".Png"
  5167.     *!*            loImage.Save(lcFile, .Imaging.Imageformat.Png)
  5168.     *!*        EndWith
  5169.         lcFile = This.GetTempFile("Png")
  5170.         Local loImage As GpImage Of (ADDBS(HOME()) + "FFC\_GdiPlus.vcx")
  5171.         loImage = NEWOBJECT("GpImage", "_GdiPlus.vcx")
  5172.         loImage.SetHandle(GDIPlusImage)
  5173.         lnPicWidth = loImage.ImageWidth
  5174.         lnPicHeight = loImage.ImageHeight
  5175.         loImage.SaveToFile(lcFile,"image/png")
  5176.         loImage = NULL
  5177.     *---
  5178.         lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcFile)
  5179. Else &&File Name
  5180.     *!* 10/03/2010 Change to reuse image handles
  5181.     IF FILE(lcContents) AND (liPictureMode <> 0) THEN && If using 'CLIP'
  5182.                                             && We wont store the image handle
  5183.         * lcFile = lcContents
  5184.         lcFile = This.GetTempFile(JustExt(lcContents))
  5185. *        lcFile = This._cTempFolder + Sys(2015) + "." + JustExt(lcContents)
  5186.         ** lnHandle = This.GetPictureHandle(lcContents, lcFile, @lnPicWidth, @lnPicHeight)
  5187.         *!* 2010-08-25 - Jacques Parent
  5188.         *!* Add @ to lcFile parameters so the new lcFile can be updated by the GetPictureHandle method
  5189.         *!* The lcFile will then be added to oTempImagesCollection and will be cleaned up later.
  5190.         lnHandle = This.GetPictureHandle(lcContents, @lcFile, @lnPicWidth, @lnPicHeight)
  5191.     ENDIF
  5192.     IF FILE(lcContents) AND (liPictureMode = 0) THEN && If using 'CLIP'
  5193.         lcFile = lcContents
  5194.     ENDIF
  5195. ENDIF
  5196. IF (!ISNULL(lnHandle) And lnHandle > 0) ; && Valid Image Handle
  5197.             OR (liPictureMode = 0) &&Clip
  5198.     DO CASE 
  5199.         CASE liPictureMode = 0 AND (NOT EMPTY(lcFile)) && 0 &&Clip
  5200.             lnHandle = This.CropImage(lcFile, 0, 0, @nWidth, @nHeight)
  5201. *!*                IF lcFile = lcContents
  5202. *!*                    lcFile = ""
  5203. *!*                ENDIF
  5204.             IF lnHandle > 0
  5205.                 This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, nLeft, nTop - nHeight, nWidth, nHeight)
  5206.             ELSE 
  5207.                 RETURN .F.
  5208.             ENDIF 
  5209.         Case liPictureMode = 1 &&Scale Keeping the Shape
  5210.             * CChalom
  5211.             * Calculating the image size for isometric images
  5212.             If lnPicWidth = 0
  5213.                 Local loVFPImg as Image
  5214.                 loVFPImg = CreateObject("Image")
  5215.                 *!* loVFPImg.Picture = lcFile
  5216.                 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.
  5217.                 lnPicWidth = loVFPImg.Width
  5218.                 lnPicHeight = loVFPImg.Height
  5219.                 loVFPImg = NULL
  5220.             EndIf
  5221.             lnPicWidth = (lnPicWidth / 960) * 72
  5222.             lnPicHeight = (lnPicHeight / 960) * 72 
  5223.             * Isometric Adjustment
  5224.             Local lnHorFactor, lnVertFactor, lnResizeFactor, lnIsoWidth, lnIsoHeight
  5225.             m.lnHorFactor = m.nWidth / m.lnPicWidth
  5226.             m.lnVertFactor = m.nHeight / m.lnPicHeight
  5227.             m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  5228.             m.lnIsoWidth = m.lnPicWidth * m.lnResizeFactor
  5229.             m.lnIsoHeight = m.lnPicHeight * m.lnResizeFactor
  5230.             This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, nLeft, nTop - lnIsoHeight, lnIsoWidth, lnIsoHeight)
  5231.             * ---
  5232.         Otherwise &&Stretch
  5233.             IF lnHandle <= 0
  5234.                 RETURN .F.
  5235.             ENDIF 
  5236.             This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, nLeft, nTop - nHeight, nWidth, nHeight)
  5237.     ENDCASE 
  5238. ELSE 
  5239.     RETURN .F.  && did not succeed to load the image, so try from the report canvas
  5240. EndIf
  5241. *!* 10/03/2010 Luis Navas
  5242. *!* Changed the name of this property from oImagesCollection to oTempImagesCollection to avoid confusion of users
  5243. If Vartype(This.oTempImagesCollection) != "O" Then
  5244.     This.oTempImagesCollection= CreateObject("Collection")
  5245. EndIf
  5246. This.oTempImagesCollection.Add(lcFile)
  5247. ENDPROC
  5248. PROCEDURE processlines
  5249. Lparameters lnPenRed As Integer,lnPenGreen As Integer,lnPenBlue As Integer,nTop As Number,nLeft As Number,nWidth As Number,;
  5250. nHeight As Number, lnPenSize As Integer, lnOffSet As Number, lnPenPat As Integer, lcStyle As String
  5251. Local lcDash As String
  5252. With This
  5253.     If lnPenRed!=-1 And lnPenGreen!=-1 And lnPenBlue!=-1 Then
  5254.         This._Stat = HPDF_Page_SetRGBStroke(.oPage, lnPenRed / 255, lnPenGreen / 255, lnPenBlue / 255)
  5255.     Else
  5256.         This._Stat = HPDF_Page_SetRGBStroke(.oPage, 0, 0, 0)
  5257.     EndIf
  5258.     nTop = .nPageHeight - nTop
  5259.     Do Case
  5260.         Case lnPenPat=8 &&Normal Mode
  5261.             This._Stat = HPDF_Page_SetDash(.oPage, Null, 0, 0)
  5262.         Case lnPenPat=1 &&Dotted
  5263.             lcDash=Chr(3) + Chr(0) + Chr(0)
  5264.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 1, 1)
  5265.         Case lnPenPat=2 &&Dashed
  5266.             lcDash = Chr(18)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  5267.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 2, 2)
  5268.         Case lnPenPat=3 &&Dash-dot
  5269.             lcDash = Chr(9)+Chr(0)+Chr(6)+Chr(0)+Chr(3)+Chr(0)+Chr(6)+Chr(0)+Chr(0)
  5270.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 4, 0)
  5271.         Case lnPenPat=4 &&Dash-dot-dot
  5272.             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)
  5273.             This._Stat = HPDF_Page_SetDash(.oPage, lcDash, 6, 0)        
  5274.     EndCase
  5275.     If lnOffSet=1 Then &&Horizontal Line
  5276.         If lnPenSize>=1 Then
  5277.             This._Stat = HPDF_Page_SetLineWidth(.oPage, lnPenSize)
  5278.         Else
  5279.             This._Stat = HPDF_Page_SetLineWidth(.oPage, 0)
  5280.         EndIf
  5281.         This._Stat = HPDF_Page_MoveTo(.oPage, nLeft, nTop) &&Move to the screen position
  5282.         This._Stat = HPDF_Page_LineTo(.oPage, nLeft + nWidth, nTop)
  5283.     Else &&Vertical Line
  5284.         If lnPenSize>=1 Then
  5285.             This._Stat = HPDF_Page_SetLineWidth(.oPage, lnPenSize)
  5286.         Else
  5287.             This._Stat = HPDF_Page_SetLineWidth(.oPage, 0)
  5288.         EndIf
  5289.         This._Stat = HPDF_Page_MoveTo(.oPage, nLeft, nTop - nHeight) 
  5290.         This._Stat = HPDF_Page_LineTo(.oPage, nLeft, nTop )
  5291.     EndIf
  5292.     This._Stat = HPDF_Page_Stroke(.oPage)
  5293. EndWith
  5294. ENDPROC
  5295. PROCEDURE getpicturehandle
  5296. LPARAMETERS lcInternalName As String, lcExternalName As String, lnPicWidth As Integer, lnPicHeight As Integer
  5297. LOCAL lcFileStream As String, lnHandle As Integer, lcExtension As String 
  5298. IF VARTYPE(This.oPictureHandles) != "O" Then
  5299.     This.oPictureHandles = CreateObject("Collection")
  5300. ENDIF
  5301. lnHandle = This.oPictureHandles.GetKey(lcInternalName)
  5302. If lnHandle = 0 Then
  5303.     lcFileStream = FILETOSTR(lcInternalName)
  5304.     TRY 
  5305.         STRTOFILE(lcFileStream, lcExternalName, 0)
  5306.     CATCH TO loExc
  5307.         * SET STEP ON 
  5308.     ENDTRY
  5309.     lcExtension = Upper(JustExt(lcExternalName))
  5310.     Do Case
  5311.         *!* 2011-04-22 - Fabio Vieira
  5312.         *!* <Begin
  5313.         *!* Picture recompresion 
  5314.         *!* Case lcExtension = "JPG" Or lcExtension = "JPEG"
  5315.         *!*     lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, lcExternalName)
  5316.         Case lcExtension = "JPG" Or lcExtension = "JPEG" Or lcExtension = "BMP"
  5317.             Local loVfpImg, lcFile
  5318.             loVFPImg = CreateObject("Image")
  5319.             loVFPImg.Picture = lcExternalName
  5320.             lcFile = This.GetTempFile("JPG")
  5321. *            lcFile = This._cTempFolder + "FP_Tmp_" + Sys(2015) + ".jpg"
  5322.             loImage = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  5323.             loImage.CreateFromFile(lcExternalName)
  5324.             loImage.SetResolution(m.loVFPImg.Width,m.loVFPImg.Height)            
  5325.             loImage.SaveToFile(m.lcFile ,"image/jpeg")
  5326.             If  this.FileSize(m.lcFile) < this.FileSize(m.lcExternalName)
  5327.                 lcExternalName = m.lcFile
  5328.             ELSE
  5329.                 IF This.IsTempFile(lcFile)
  5330.                     DELETE FILE (lcFile)
  5331.                 ENDIF 
  5332.             EndIf 
  5333.             loImage = NULL 
  5334.             loVFPImg = null 
  5335.         *!* End>                        
  5336.             lnHandle = HPDF_LoadJpegImageFromFile(This.pdfHandle, m.lcExternalName)
  5337.         Case lcExtension = "PNG"
  5338.             *!* 2010-09-27 - Jacques Parent - Checking for transparency
  5339.             Local loBmpTmp as GpBitmap
  5340.             loBmpTmp = NewObject("GpBitmap", "_GdiPlus.vcx")
  5341.             loBmpTmp.CreateFromFile(lcExternalName)
  5342.             lnPicWidth = loBmpTmp.ImageWidth
  5343.             lnPicHeight = loBmpTmp.ImageHeight
  5344.             IF     This.IsPixelALPHA(loBmpTmp.GetPixel(0              , 0               ));
  5345.                     OR     This.IsPixelALPHA(loBmpTmp.GetPixel(0              , lnPicHeight - 1));
  5346.                     OR     This.IsPixelALPHA(loBmpTmp.GetPixel(lnPicWidth - 1, 0               ));
  5347.                     OR     This.IsPixelALPHA(loBmpTmp.GetPixel(lnPicWidth - 1, lnPicHeight - 1))
  5348.                 *!* Then, we will convert the file as if it were a GIF
  5349.                 *!* This will let the transparency to be converted with a white background.
  5350.                 *!* To do this, simply do not call the HPDF_LoadPngImageFromFile function.
  5351.             ELSE
  5352.                 *!* Treat as normal PNG
  5353.                 lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcExternalName)
  5354.             ENDIF
  5355.             loBmpTmp = NULL
  5356.             *!* Original code
  5357.             *!*                lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcExternalName)
  5358.         Otherwise
  5359.     EndCase
  5360.     IF lnHandle = 0
  5361.         * CChalom
  5362.         * This is being done outside the DOCASE statement because sometimes HARU may fail loading the image
  5363.         * So, here we give it another chance to load the image, this time using a converted image by GdiPlus
  5364.         * Clear the existing HPDF errors
  5365.         * As the image could not be loaded, we probably have an error, that needs to be cleared
  5366.         * Here we can see if an error occurred during the rendering process of the 
  5367.         * current field
  5368.         This.ClearPDFErrors()
  5369.         * Not Supported Format, will never happen when is a general field
  5370.         * Convert all images to PNG, that is a safer image type for HPDF
  5371.         Local loBmp2 as GpBitmap, lcFile as String, lcFile2 As String
  5372.         lcFile  = lcExternalName
  5373.         lcFile2 = This.GetTempFile("PNG")
  5374. *        lcFile2 = This._cTempFolder + "FP_Tmp_" + Sys(2015) + ".PNG"
  5375.         loBmp2 = NewObject("GpBitmap", "_GdiPlus.vcx")
  5376.         loBmp2.CreateFromFile(lcFile)
  5377.         lnPicWidth = loBmp2.ImageWidth
  5378.         lnPicHeight = loBmp2.ImageHeight
  5379.         * Check if we have an invalid size
  5380.         IF lnPicWidth = 0 OR lnPicHeight = 0
  5381.             RETURN 0
  5382.         ENDIF
  5383.         LOCAL loBmp3 as GpBitmap OF HOME() + "\ffc\_Gdiplus.vcx"
  5384.         loBmp3 = NewObject("GpBitmap", "_GdiPlus.vcx") &&, "", lnPicWidth, lnPicHeight)
  5385.         loBmp3.Create(lnPicWidth, lnPicHeight)
  5386.         loBmp3.SetResolution(loBmp2.HorizontalResolution, loBmp2.VerticalResolution)    && Jacques Parent - 2010-12-01 - Set original resolution of the file
  5387.         LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  5388.         loGfx  = NewObject("GpGraphics", "_GdiPlus.vcx")
  5389.         loGfx.CreateFromImage(loBmp3)
  5390.         loGfx.Clear(0xFFFFFFFF)
  5391.         loGfx.DrawImageAt(loBmp2, 0, 0)
  5392.         loBmp3.SaveToFile(lcFile2, "image/png")
  5393.         loBmp2 = Null
  5394.         loBmp3 = NULL
  5395.         IF This.IsTempFile(lcFile)
  5396.             DELETE FILE (lcFile)
  5397.         ENDIF 
  5398.         lcFile = lcFile2
  5399.         * Try loading the image
  5400.         lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, lcFile)
  5401.         *!* 2010-08-25 - Jacques Parent - Update the image filename
  5402.         lcExternalName = lcFile
  5403.     ENDIF 
  5404.     This.oPictureHandles.Add(lnHandle, lcInternalName)
  5405.     lnHandle = This.oPictureHandles.Item(lnHandle)
  5406. EndIf
  5407. Return lnHandle
  5408. ENDPROC
  5409. PROCEDURE ispixelalpha
  5410. LPARAMETERS tnARGB
  5411. IF ISNULL(tnARGB)
  5412.     tnARGB = 0xFF000000    && OPAQUE BLACK
  5413. ENDIF
  5414. LOCAL tlAlphaIsUsed
  5415. tlAlphaIsUsed = .T.
  5416. *!* Alpha = BITAND(BITRSHIFT(tnARGB, 24), 0xFF)
  5417. *!* Red   = BITAND(BITRSHIFT(tnARGB, 16), 0xFF)
  5418. *!* Green = BITAND(BITRSHIFT(tnARGB,  8), 0xFF)
  5419. *!* Blue  = BITAND(BITRSHIFT(tnARGB,  0), 0xFF)
  5420. *!*    tlAlphaIsUsed = (BITAND(tnARGB, 0xFF000000) / 16^6) < 255
  5421. tlAlphaIsUsed = BITAND(BITRSHIFT(tnARGB, 24), 0xFF) < 255
  5422. RETURN tlAlphaIsUsed
  5423. ENDPROC
  5424. PROCEDURE outputfromdata
  5425. LPARAMETERS toListener as ReportListener, tcOutputDBF, tnWidth, tnHeight
  5426. * lnSecs = SECONDS()
  5427. IF VARTYPE(toListener) <> "O"
  5428.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  5429.     RETURN
  5430. ENDIF
  5431. This.oActiveListener = toListener
  5432. * =DoFoxyTherm(90, "Texto label", "Titulo")
  5433. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  5434. * =DoFoxyTherm() && Desliga
  5435. IF NOT This.QuietMode
  5436.     LOCAL lnSecs
  5437.     lnSecs = SECONDS()
  5438.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  5439.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  5440.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  5441.     =DoFoxyTherm(1, "0%", _goHelper._InitStatusText)
  5442. ENDIF 
  5443. * Ensure we are at the correct DataSession
  5444. * SET DATASESSION TO (toListener.CurrentDataSession)
  5445. SET DATASESSION TO (toListener.ListenerDataSession)
  5446. * toListener.SetCurrentDataSession()
  5447. LOCAL lnSelect,llExit
  5448. lnSelect = SELECT()
  5449. llExit   = .F.
  5450. SELECT (tcOutputDBF)
  5451. * Generate PDF using the stored information
  5452. This.lDefaultMode = .F.
  5453. This.nPageWidth  = (tnWidth / 960) * 72
  5454. This.nPageHeight = (tnHeight / 960) * 72
  5455. LOCAL lnPgFrom, lnPgTo
  5456. lnPgFrom = _goHelper._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  5457. lnPgTo   = IIF(_goHelper._ClausenRangeTo = -1, 999999, _goHelper._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  5458. * Prepare Watermark
  5459. IF toListener.lUsingWaterMark
  5460.     LOCAL lnX, lnY, lnW, lnH, lcTempFile, lcType
  5461.     LOCAL loBmp as GpImage OF HOME() + "\FFC\_Gdiplus.vcx"
  5462.     lcType = LOWER(JUSTEXT(toListener.cWatermarkImage))
  5463.     DO CASE
  5464.     CASE INLIST(lcType, "jpg", "jpeg", "tif", "tiff")
  5465.         lcType = "jpeg"
  5466.     OTHERWISE
  5467.         lcType = "png"
  5468.     ENDCASE
  5469.     lcTempFile = ADDBS(GETENV("TEMP")) + "Temp_WM_" + SYS(2015) + "." + lcType
  5470.     IF VARTYPE(toListener.oWaterMarkBmp) = "O"
  5471.         toListener.oWaterMarkBmp.SaveToFile(lcTempFile, "image/" + lcType)
  5472.         This._cWMpicture = lcTempFile
  5473.     ENDIF
  5474.     LOCAL lnX, lnY, lnWidth, lnHeight
  5475.     lnX = (1 - toListener.nWatermarkWidthRatio) / 2
  5476.     lnY = (1 - toListener.nWatermarkHeightRatio) / 2
  5477.     lnWidth  = toListener.nWatermarkWidthRatio
  5478.     lnHeight = toListener.nWatermarkHeightRatio
  5479.     This._nWMx = lnx * This.nPageWidth
  5480.     This._nWMy = lnY * This.nPageHeight
  5481.     This._nWMw = This.nPageWidth * lnWidth
  5482.     This._nWMh = This.nPageHeight * lnHeight
  5483. ENDIF
  5484. * Initialize class
  5485. This.BeforeReport()
  5486. IF This.QuietMode 
  5487.     SCAN
  5488.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  5489.             IF NOT This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  5490.                 llExit = .T.
  5491.                 EXIT 
  5492.             ENDIF
  5493.         ENDIF
  5494.     ENDSCAN
  5495. ELSE 
  5496.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  5497.     lnLastPercent = 0
  5498.     lnDelay       = 1
  5499.     lnTotRecs     = RECCOUNT()
  5500.     lnRec         = 0
  5501.     SCAN
  5502.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  5503.             lnRec = lnRec + 1
  5504.             lnPercent = CEILING(100*lnRec/lnTotRecs)
  5505.             IF (lnLastPercent > 0 AND ;
  5506.                     lnPercent - lnLastPercent < lnDelay  AND ;
  5507.                     lnPercent <> 100)
  5508.             ELSE 
  5509.                 =DoFoxyTherm(lnPercent, ;
  5510.                     ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  5511.                     _goHelper._RunStatusText)
  5512.             ENDIF 
  5513.             IF NOT This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  5514.                 llExit = .T.
  5515.                 EXIT 
  5516.             ENDIF
  5517.         ENDIF
  5518.     ENDSCAN
  5519.     =DoFoxyTherm(100, ;
  5520.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  5521.                 _goHelper._RunStatusText)
  5522. ENDIF 
  5523. IF NOT llExit
  5524.     * Finalize
  5525.     This.AfterReport()
  5526.     This.UnloadReport()
  5527. ENDIF
  5528. USE IN SELECT (tcOutputDBF)
  5529. SELECT (lnSelect)
  5530. * MESSAGEBOX("Elapsed " + TRANSFORM(SECONDS() - lnSecs) + " secs.")
  5531. * Delete temp watermark image
  5532. IF toListener.lUsingWaterMark AND FILE(lcTempFile)
  5533.     TRY 
  5534.         DELETE FILE (lcTempFile)
  5535.     CATCH 
  5536.     ENDTRY
  5537. ENDIF 
  5538. IF NOT This.QuietMode 
  5539.     =DoFoxyTherm()
  5540. ENDIF
  5541. RETURN
  5542. ENDPROC
  5543. PROCEDURE getparheight
  5544. LPARAMETERS tcText, tcFontName, tnSize, tcStyle, tnLeft, tnTop, tnWidth, tnHeight
  5545. LOCAL lnX0, lnY0, lnW0, lnH0, lnFactor
  5546. lnX0 = tnLeft   * 960 / 72
  5547. lnY0 = tnTop    * 960 / 72
  5548. lnW0 = tnWidth  * 960 / 72
  5549. lnH0 = tnHeight * 960 / 72
  5550. LOCAL loFont, lnChars, lnLines, lnHeight, lnWidth
  5551. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  5552. loRect = NEWOBJECT("GPRectangle", "_Gdiplus.vcx", "", lnX0, lnY0, lnW0, lnH0)
  5553. * Create a font object using the text object's settings.
  5554. loFont = NEWOBJECT("GPFont", "_Gdiplus.vcx")
  5555. loFont.Create(tcFontName, tnSize, tcStyle, 3)
  5556. LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  5557. loGfx  = NEWOBJECT("GpGraphics", "_Gdiplus.vcx")
  5558. IF This.lDefaultMode 
  5559.     lnFactor = 1
  5560.     loGfx.SetHandle(IIF(This.IsSuccessor, ;
  5561.         This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  5562. ELSE 
  5563.     lnFactor = 10
  5564.     loGfx.CreateFromHWND(_Screen.HWnd)
  5565.     loGfx.PageUnit  = 1
  5566.     loGfx.PageScale = 0.3
  5567.     loRect.w = lnW0 / lnFactor
  5568.     loRect.h = lnH0 / lnFactor
  5569. ENDIF
  5570. LOCAL loSize as GpSize OF HOME() + "\ffc\_Gdiplus.vcx"
  5571. loSize = loGfx.MeasureStringA(tcText, loFont, loRect.GdipRectF, .F., @lnChars, @lnLines)
  5572. lnWidth  = loSize.w
  5573. lnHeight = loSize.h
  5574. * loGfx.SetHandle(0)
  5575. RETURN (lnHeight / 960) * 72 * lnFactor
  5576. ENDPROC
  5577. PROCEDURE stringtopic
  5578. * CChalom 2010-12-18
  5579. * Converts the string to image
  5580. LPARAMETERS tcString, tcFont, tnSize, tnR, tnG, tnB, tnAlign, tnW, tnH
  5581. #define GDIPLUS_Unit_Point            3
  5582. #define GDIPLUS_FontStyle_Regular     0
  5583. LOCAL lnW0, lnH0, lnFactor
  5584. lnW0 = tnW * 960 / 72
  5585. lnH0 = tnH * 960 / 72
  5586. lnFactor = 10
  5587. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  5588. loRect = NEWOBJECT("GPRectangle")
  5589. loRect.w = lnW0 / lnFactor
  5590. loRect.h = lnH0 / lnFactor
  5591. LOCAL loGfx0 as GpGraphics OF HOME(1) + "ffc\_gdiplus.vcx"
  5592. loGfx0 = NEWOBJECT("gpGraphics", "_gdiplus.vcx")
  5593. loGfx0.CreateFromHWND(_Screen.HWnd)
  5594. loGfx0.PageUnit  = 1
  5595. loGfx0.PageScale = 0.3
  5596. LOCAL loFont as GpFont OF HOME(1) + "ffc\_gdiplus.vcx"
  5597. loFont = NEWOBJECT("gpFont", "_gdiplus.vcx")
  5598. loFont.Create(tcFont, tnSize, GDIPLUS_FontStyle_Regular, GDIPLUS_Unit_Point)
  5599. LOCAL loStrFmt as GpStringFormat OF HOME(1) + "ffc\_gdiplus.vcx"
  5600. loStrFmt = NEWOBJECT("gpStringFormat", "_gdiplus.vcx")
  5601. loStrFmt.Create()
  5602. LOCAL loColor as GpColor OF HOME(1) + "ffc\_gdiplus.vcx"
  5603. loColor = NEWOBJECT("gpColor", "_gdiplus.vcx", "", tnR, tnG, tnB)
  5604. LOCAL loBrush as GpSolidBrush OF HOME(1) + "ffc\_gdiplus.vcx"
  5605. loBrush = NEWOBJECT("gpSolidBrush", "_gdiplus.vcx")
  5606. loBrush.Create(loColor)
  5607. LOCAL loSize as GpSize OF HOME(1) + "ffc\_gdiplus.vcx"
  5608. loSize = loGfx0.MeasureStringA(tcString, loFont, loRect.GdipRectF)
  5609. tnW = loSize.W
  5610. tnH = loSize.H
  5611. IF EMPTY(tnH) OR EMPTY(tnW)
  5612.     RETURN ""
  5613. ENDIF
  5614. LOCAL loBmp as GpBitmap OF HOME(1) + "ffc\_gdiplus.vcx"
  5615. loBmp = NEWOBJECT("gpBitmap", "_gdiplus.vcx", "", tnW, tnH)
  5616. * loBmp.SetResolution(loBmp2.HorizontalResolution, loBmp2.VerticalResolution)
  5617. LOCAL loGfx as GpGraphics OF HOME(1) + "ffc\_gdiplus.vcx"
  5618. loGfx = NEWOBJECT("gpGraphics", "_gdiplus.vcx")
  5619. loGfx.CreateFromImage(loBmp)
  5620. loGfx.PageUnit  = 1
  5621. loGfx.PageScale = 0.3
  5622. loGfx.Clear(0xFFFFFFFF)
  5623. loGfx.DrawStringA(tcString, loFont, 0h0000000000000000, loStrFmt, loBrush)
  5624. lcTempFile = This.GetTempFile("png")
  5625. * lcTempFile = This._cTempFolder + SYS(2015) + ".png"
  5626. loBmp.SaveToFile(lcTempFile, "image/png")
  5627. loBmp = NULL
  5628. RETURN lcTempFile
  5629. *!*    lcCommand = "RUN /N6 Explorer.Exe " + lcTempFile
  5630. *!*    &lcCommand.
  5631. ENDPROC
  5632. PROCEDURE processpictures2
  5633. * CChalom 2010-12-18
  5634. * Draws the image of the string in the PDF document
  5635. LPARAMETERS tcFile, tnLeft, tnTop, tnWidth, tnHeight
  5636. *tnWidth  = (tnWidth  / 960) * 72
  5637. *tnHeight = (tnHeight / 960) * 72
  5638. tnWidth  = tnWidth  * .75
  5639. tnHeight = tnHeight &&* .75
  5640. LOCAL lnHandle
  5641. lnHandle = HPDF_LoadPngImageFromFile(This.pdfHandle, tcFile)
  5642. This._Stat = HPDF_Page_DrawImage(This.oPage, lnHandle, tnLeft, tnTop - tnHeight, tnWidth, tnHeight)
  5643.     IF This.IsTempFile(lcFile)
  5644.         DELETE FILE (lcFile)
  5645.     ENDIF 
  5646. CATCH 
  5647. ENDTRY
  5648. ENDPROC
  5649. PROCEDURE _stat_assign
  5650. LPARAMETERS tnStatus
  5651. This._Stat = tnStatus
  5652. IF tnStatus != 0
  5653.     * Clear existing the HPDF errors
  5654.     * Here we can see if an error occurred during the rendering process of the 
  5655.     * current field
  5656.     LOCAL lnHPDF_err, lcHex
  5657.     lnHPDF_err = HPDF_GetError(This.pdfHandle)
  5658.     IF lnHPDF_err <> 0
  5659.         lcHex = TRANSFORM(lnHPDF_err, "@0")
  5660.         * SET STEP ON 
  5661.         HPDF_ResetError(This.pdfHandle)
  5662.     ENDIF
  5663.     IF This.lShowErrors = .T.
  5664.         IF _VFP.StartMode = 0 && Development
  5665.             LOCAL lnOption
  5666.             lnOption = MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  5667.                 + "Error code : " + TRANSFORM(tnStatus) + CHR(13) ;
  5668.                 + "Description: " + This._ErrorInfo(tnStatus) + CHR(13) ;
  5669.                 + "Page: " + TRANSFORM(This.nCurrentPage) + CHR(13) ;
  5670.                 + "Object: " + This.cObjectToRender + CHR(13) + CHR(13) ;
  5671.                 + "Press 'Retry' to debug the application.", 16 + 2, "Error")
  5672.             IF lnOption = 3
  5673.                 CANCEL
  5674.             ENDIF
  5675.             IF lnOption = 4
  5676.                 SUSPEND
  5677.             ENDIF
  5678.         ELSE 
  5679.             MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  5680.                 + "Error code  : " + TRANSFORM(tnStatus) + CHR(13) ;
  5681.                 + "Description : " + This._ErrorInfo(tnStatus) + CHR(13) ;
  5682.                 + "Object: " + This.cObjectToRender, 16, "Error")
  5683.         ENDIF 
  5684.     ENDIF
  5685. ENDIF
  5686. ENDPROC
  5687. PROCEDURE _errorinfo
  5688. LPARAMETERS tnStatus
  5689. DO CASE
  5690.     CASE tnStatus = 0x1001
  5691.         RETURN "HPDF_ARRAY_COUNT_ERR                      "    &&  0x1001
  5692.     CASE tnStatus = 0x1002
  5693.         RETURN "HPDF_ARRAY_ITEM_NOT_FOUND                 "    &&  0x1002
  5694.     CASE tnStatus = 0x1003
  5695.         RETURN "HPDF_ARRAY_ITEM_UNEXPECTED_TYPE           "    &&  0x1003
  5696.     CASE tnStatus = 0x1004
  5697.         RETURN "HPDF_BINARY_LENGTH_ERR                    "    &&  0x1004
  5698.     CASE tnStatus = 0x1005
  5699.         RETURN "HPDF_CANNOT_GET_PALLET                    "    &&  0x1005
  5700.     CASE tnStatus = 0x1007
  5701.         RETURN "HPDF_DICT_COUNT_ERR                       "    &&  0x1007
  5702.     CASE tnStatus = 0x1008
  5703.         RETURN "HPDF_DICT_ITEM_NOT_FOUND                  "    &&  0x1008
  5704.     CASE tnStatus = 0x1009
  5705.         RETURN "HPDF_DICT_ITEM_UNEXPECTED_TYPE            "    &&  0x1009
  5706.     CASE tnStatus = 0x100A
  5707.         RETURN "HPDF_DICT_STREAM_LENGTH_NOT_FOUND         "    &&  0x100A
  5708.     CASE tnStatus = 0x100B
  5709.         RETURN "HPDF_DOC_ENCRYPTDICT_NOT_FOUND            "    &&  0x100B
  5710.     CASE tnStatus = 0x100C
  5711.         RETURN "HPDF_DOC_INVALID_OBJECT                   "    &&  0x100C
  5712.     CASE tnStatus = 0x100E
  5713.         RETURN "HPDF_DUPLICATE_REGISTRATION               "    &&  0x100E
  5714.     CASE tnStatus = 0x100F
  5715.         RETURN "HPDF_EXCEED_JWW_CODE_NUM_LIMIT            "    &&  0x100F
  5716.     CASE tnStatus = 0x10011
  5717.         RETURN "HPDF_ENCRYPT_INVALID_PASSWORD             "    &&  0x1011
  5718.     CASE tnStatus = 0x1013
  5719.         RETURN "HPDF_ERR_UNKNOWN_CLASS                    "    &&  0x1013
  5720.     CASE tnStatus = 0x1014
  5721.         RETURN "HPDF_EXCEED_GSTATE_LIMIT                  "    &&  0x1014
  5722.     CASE tnStatus = 0x1015
  5723.         RETURN "HPDF_FAILD_TO_ALLOC_MEM                   "    &&  0x1015
  5724.     CASE tnStatus = 0x1016
  5725.         RETURN "HPDF_FILE_IO_ERROR                        "    &&  0x1016
  5726.     CASE tnStatus = 0x1017
  5727.         RETURN "HPDF_FILE_OPEN_ERROR                      "    &&  0x1017
  5728.     CASE tnStatus = 0x1019
  5729.         RETURN "HPDF_FONT_EXISTS                          "    &&  0x1019
  5730.     CASE tnStatus = 0x101A
  5731.         RETURN "HPDF_FONT_INVALID_WIDTHS_TABLE            "    &&  0x101A
  5732.     CASE tnStatus = 0x101B
  5733.         RETURN "HPDF_INVALID_AFM_HEADER                   "    &&  0x101B
  5734.     CASE tnStatus = 0x101C
  5735.         RETURN "HPDF_INVALID_ANNOTATION                   "    &&  0x101C
  5736.     CASE tnStatus = 0x101E
  5737.         RETURN "HPDF_INVALID_BIT_PER_COMPONENT            "    &&  0x101E
  5738.     CASE tnStatus = 0x101F
  5739.         RETURN "HPDF_INVALID_CHAR_MATRICS_DATA            "    &&  0x101F
  5740.     CASE tnStatus = 0x1020
  5741.         RETURN "HPDF_INVALID_COLOR_SPACE                  "    &&  0x1020
  5742.     CASE tnStatus = 0x1021
  5743.         RETURN "HPDF_INVALID_COMPRESSION_MODE             "    &&  0x1021
  5744.     CASE tnStatus = 0x1022
  5745.         RETURN "HPDF_INVALID_DATE_TIME                    "    &&  0x1022
  5746.     CASE tnStatus = 0x1023
  5747.         RETURN "HPDF_INVALID_DESTINATION                  "    &&  0x1023
  5748.     CASE tnStatus = 0x1025
  5749.         RETURN "HPDF_INVALID_DOCUMENT                     "    &&  0x1025
  5750.     CASE tnStatus = 0x1026
  5751.         RETURN "HPDF_INVALID_DOCUMENT_STATE               "    &&  0x1026
  5752.     CASE tnStatus = 0x1027
  5753.         RETURN "HPDF_INVALID_ENCODER                      "    &&  0x1027
  5754.     CASE tnStatus = 0x1028
  5755.         RETURN "HPDF_INVALID_ENCODER_TYPE                 "    &&  0x1028
  5756.     CASE tnStatus = 0x102B
  5757.         RETURN "HPDF_INVALID_ENCODING_NAME                "    &&  0x102B
  5758.     CASE tnStatus = 0x102C
  5759.         RETURN "HPDF_INVALID_ENCRYPT_KEY_LEN              "    &&  0x102C
  5760.     CASE tnStatus = 0x102D
  5761.         RETURN "HPDF_INVALID_FONTDEF_DATA                 "    &&  0x102D
  5762.     CASE tnStatus = 0x102E
  5763.         RETURN "HPDF_INVALID_FONTDEF_TYPE                 "    &&  0x102E
  5764.     CASE tnStatus = 0x102F
  5765.         RETURN "HPDF_INVALID_FONT_NAME                    "    &&  0x102F
  5766.     CASE tnStatus = 0x1030
  5767.         RETURN "HPDF_INVALID_IMAGE                        "    &&  0x1030
  5768.     CASE tnStatus = 0x1031
  5769.         RETURN "HPDF_INVALID_JPEG_DATA                    "    &&  0x1031
  5770.     CASE tnStatus = 0x1032
  5771.         RETURN "HPDF_INVALID_N_DATA                       "    &&  0x1032
  5772.     CASE tnStatus = 0x1033
  5773.         RETURN "HPDF_INVALID_OBJECT                       "    &&  0x1033
  5774.     CASE tnStatus = 0x1034
  5775.         RETURN "HPDF_INVALID_OBJ_ID                       "    &&  0x1034
  5776.     CASE tnStatus = 0x1035
  5777.         RETURN "HPDF_INVALID_OPERATION                    "    &&  0x1035
  5778.     CASE tnStatus = 0x1036
  5779.         RETURN "HPDF_INVALID_OUTLINE                      "    &&  0x1036
  5780.     CASE tnStatus = 0x1037
  5781.         RETURN "HPDF_INVALID_PAGE                         "    &&  0x1037
  5782.     CASE tnStatus = 0x1038
  5783.         RETURN "HPDF_INVALID_PAGES                        "    &&  0x1038
  5784.     CASE tnStatus = 0x1039
  5785.         RETURN "HPDF_INVALID_PARAMETER                    "    &&  0x1039
  5786.     CASE tnStatus = 0x103B
  5787.         RETURN "HPDF_INVALID_PNG_IMAGE                    "    &&  0x103B
  5788.     CASE tnStatus = 0x103C
  5789.         RETURN "HPDF_INVALID_STREAM                       "    &&  0x103C
  5790.     CASE tnStatus = 0x103D
  5791.         RETURN "HPDF_MISSING_FILE_NAME_ENTRY              "    &&  0x103D
  5792.     CASE tnStatus = 0x103F
  5793.         RETURN "HPDF_INVALID_TTC_FILE                     "    &&  0x103F
  5794.     CASE tnStatus = 0x1040
  5795.         RETURN "HPDF_INVALID_TTC_INDEX                    "    &&  0x1040
  5796.     CASE tnStatus = 0x1041
  5797.         RETURN "HPDF_INVALID_WX_DATA                      "    &&  0x1041
  5798.     CASE tnStatus = 0x1042
  5799.         RETURN "HPDF_ITEM_NOT_FOUND                       "    &&  0x1042
  5800.     CASE tnStatus = 0x1043
  5801.         RETURN "HPDF_LIBPNG_ERROR                         "    &&  0x1043
  5802.     CASE tnStatus = 0x1044
  5803.         RETURN "HPDF_NAME_INVALID_VALUE                   "    &&  0x1044
  5804.     CASE tnStatus = 0x1045
  5805.         RETURN "HPDF_NAME_OUT_OF_RANGE                    "    &&  0x1045
  5806.     CASE tnStatus = 0x1048
  5807.         RETURN "HPDF_PAGE_INVALID_PARAM_COUNT             "    &&  0x1048
  5808.     CASE tnStatus = 0x1049
  5809.         RETURN "HPDF_PAGES_MISSING_KIDS_ENTRY             "    &&  0x1049
  5810.     CASE tnStatus = 0x104A
  5811.         RETURN "HPDF_PAGE_CANNOT_FIND_OBJECT              "    &&  0x104A
  5812.     CASE tnStatus = 0x104B
  5813.         RETURN "HPDF_PAGE_CANNOT_GET_ROOT_PAGES           "    &&  0x104B
  5814.     CASE tnStatus = 0x104C
  5815.         RETURN "HPDF_PAGE_CANNOT_RESTORE_GSTATE           "    &&  0x104C
  5816.     CASE tnStatus = 0x104D
  5817.         RETURN "HPDF_PAGE_CANNOT_SET_PARENT               "    &&  0x104D
  5818.     CASE tnStatus = 0x104E
  5819.         RETURN "HPDF_PAGE_FONT_NOT_FOUND                  "    &&  0x104E
  5820.     CASE tnStatus = 0x104F
  5821.         RETURN "HPDF_PAGE_INVALID_FONT                    "    &&  0x104F
  5822.     CASE tnStatus = 0x1050
  5823.         RETURN "HPDF_PAGE_INVALID_FONT_SIZE               "    &&  0x1050
  5824.     CASE tnStatus = 0x1051
  5825.         RETURN "HPDF_PAGE_INVALID_GMODE                   "    &&  0x1051
  5826.     CASE tnStatus = 0x1052
  5827.         RETURN "HPDF_PAGE_INVALID_INDEX                   "    &&  0x1052
  5828.     CASE tnStatus = 0x1053
  5829.         RETURN "HPDF_PAGE_INVALID_ROTATE_VALUE            "    &&  0x1053
  5830.     CASE tnStatus = 0x1054
  5831.         RETURN "HPDF_PAGE_INVALID_SIZE                    "    &&  0x1054
  5832.     CASE tnStatus = 0x1055
  5833.         RETURN "HPDF_PAGE_INVALID_XOBJECT                 "    &&  0x1055
  5834.     CASE tnStatus = 0x1056
  5835.         RETURN "HPDF_PAGE_OUT_OF_RANGE                    "    &&  0x1056
  5836.     CASE tnStatus = 0x1057
  5837.         RETURN "HPDF_REAL_OUT_OF_RANGE                    "    &&  0x1057
  5838.     CASE tnStatus = 0x1058
  5839.         RETURN "HPDF_STREAM_EOF                           "    &&  0x1058
  5840.     CASE tnStatus = 0x1059
  5841.         RETURN "HPDF_STREAM_READLN_CONTINUE               "    &&  0x1059
  5842.     CASE tnStatus = 0x105B
  5843.         RETURN "HPDF_STRING_OUT_OF_RANGE                  "    &&  0x105B
  5844.     CASE tnStatus = 0x105C
  5845.         RETURN "HPDF_THIS_FUNC_WAS_SKIPPED                "    &&  0x105C
  5846.     CASE tnStatus = 0x105D
  5847.         RETURN "HPDF_TTF_CANNOT_EMBEDDING_FONT            "    &&  0x105D
  5848.     CASE tnStatus = 0x105E
  5849.         RETURN "HPDF_TTF_INVALID_CMAP                     "    &&  0x105E
  5850.     CASE tnStatus = 0x105F
  5851.         RETURN "HPDF_TTF_INVALID_FOMAT                    "    &&  0x105F
  5852.     CASE tnStatus = 0x1060
  5853.         RETURN "HPDF_TTF_MISSING_TABLE                    "    &&  0x1060
  5854.     CASE tnStatus = 0x1061
  5855.         RETURN "HPDF_UNSUPPORTED_FONT_TYPE                "    &&  0x1061
  5856.     CASE tnStatus = 0x1062
  5857.         RETURN "HPDF_UNSUPPORTED_FUNC                     "    &&  0x1062
  5858.     CASE tnStatus = 0x1063
  5859.         RETURN "HPDF_UNSUPPORTED_JPEG_FORMAT              "    &&  0x1063
  5860.     CASE tnStatus = 0x1064
  5861.         RETURN "HPDF_UNSUPPORTED_TYPE1_FONT               "    &&  0x1064
  5862.     CASE tnStatus = 0x1065
  5863.         RETURN "HPDF_XREF_COUNT_ERR                       "    &&  0x1065
  5864.     CASE tnStatus = 0x1066
  5865.         RETURN "HPDF_ZLIB_ERROR                           "    &&  0x1066
  5866.     CASE tnStatus = 0x1067
  5867.         RETURN "HPDF_INVALID_PAGE_INDEX                   "    &&  0x1067
  5868.     CASE tnStatus = 0x1068
  5869.         RETURN "HPDF_INVALID_URI                          "    &&  0x1068
  5870.     CASE tnStatus = 0x1069
  5871.         RETURN "HPDF_PAGE_LAYOUT_OUT_OF_RANGE             "    &&  0x1069
  5872.     CASE tnStatus = 0x1070
  5873.         RETURN "HPDF_PAGE_MODE_OUT_OF_RANGE               "    &&  0x1070
  5874.     CASE tnStatus = 0x1071
  5875.         RETURN "HPDF_PAGE_NUM_STYLE_OUT_OF_RANGE          "    &&  0x1071
  5876.     CASE tnStatus = 0x1072
  5877.         RETURN "HPDF_ANNOT_INVALID_ICON                   "    &&  0x1072
  5878.     CASE tnStatus = 0x1073
  5879.         RETURN "HPDF_ANNOT_INVALID_BORDER_STYLE           "    &&  0x1073
  5880.     CASE tnStatus = 0x1074
  5881.         RETURN "HPDF_PAGE_INVALID_DIRECTION               "    &&  0x1074
  5882.     CASE tnStatus = 0x1075
  5883.         RETURN "HPDF_INVALID_FONT                         "    &&  0x1075
  5884.     CASE tnStatus = 0x1076
  5885.         RETURN "HPDF_PAGE_INSUFFICIENT_SPACE              "    &&  0x1076
  5886.     CASE tnStatus = 0x1077
  5887.         RETURN "HPDF_PAGE_INVALID_DISPLAY_TIME            "    &&  0x1077
  5888.     CASE tnStatus = 0x1078
  5889.         RETURN "HPDF_PAGE_INVALID_TRANSITION_TIME         "    &&  0x1078
  5890.     CASE tnStatus = 0x1079
  5891.         RETURN "HPDF_INVALID_PAGE_SLIDESHOW_TYPE          "    &&  0x1079
  5892.     CASE tnStatus = 0x1080
  5893.         RETURN "HPDF_EXT_GSTATE_OUT_OF_RANGE              "    &&  0x1080
  5894.     CASE tnStatus = 0x1081
  5895.         RETURN "HPDF_INVALID_EXT_GSTATE                   "    &&  0x1081
  5896.     CASE tnStatus = 0x1082
  5897.         RETURN "HPDF_EXT_GSTATE_READ_ONLY                 "    &&  0x1082
  5898.     OTHERWISE
  5899.         RETURN "Unknown Error"
  5900. ENDCASE
  5901. ENDPROC
  5902. PROCEDURE _stat2_assign
  5903. LPARAMETERS tnStatus
  5904. This._Stat2 = tnStatus
  5905. This._Stat = tnStatus
  5906. ENDPROC
  5907. PROCEDURE getpicturefromlistener
  5908. *!* 2011/02/25 CChalom
  5909. *!* When we can't render the PDF text or image correctly, we still can get 
  5910.         * an image of the object, and draw it to the PDF document
  5911. LPARAMETERS tnX, tnY, tnWidth, tnHeight
  5912. * Clear any existing HPDF errors
  5913. * Here we can see if an error occurred during the rendering process of the 
  5914. * current field
  5915. This.ClearPDFErrors()
  5916. LOCAL lcFile
  5917. lcFile = This.GetPageImg()
  5918. * RUN /n explorer.exe &lcFile.
  5919. IF EMPTY(lcFile)
  5920.     RETURN .F. && Could not load image
  5921. ENDIF 
  5922. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  5923. LOCAL lnHor, lnVert
  5924. lnHor  = 9.972
  5925. lnVert = 9.996
  5926. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, .T.)
  5927. * RUN /n explorer.exe &lcNewFile.
  5928. lnHor  = 13.45
  5929. lnVert = 13.45
  5930. This.ProcessPictures(tnY / lnVert, tnX / lnHor, tnWidth / lnHor, tnHeight / lnVert, ;
  5931.         lcNewFile, 0, 0, 2, "")
  5932. IF VARTYPE(This.oTempImagesCollection) != "O" THEN
  5933.     This.oTempImagesCollection = CreateObject("Collection")
  5934. ENDIF
  5935. This.oTempImagesCollection.Add(lcNewFile)
  5936. This.oTempImagesCollection.Add(lcFile)
  5937. ENDPROC
  5938. PROCEDURE getpageimg
  5939. #DEFINE OutputJPEG     102
  5940. #DEFINE OutputPNG     104
  5941. LOCAL loListener as ReportListener 
  5942. loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  5943. LOCAL lnPage
  5944. lnPage = This.nCurrentPage - loListener.CommandClauses.RangeFrom + 1
  5945. DIMENSION This.aPagesImgs(lnPage)
  5946. IF EMPTY(This.aPagesImgs(lnPage))
  5947.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  5948.     lnDeviceType = OutputPNG
  5949.     lcFile = This.GetTempFile("PNG")
  5950.     TRY 
  5951.         loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  5952.     CATCH 
  5953.         lcFile = ""
  5954.     ENDTRY 
  5955.     This.aPagesImgs(lnPage) = lcFile
  5956. ENDIF 
  5957. RETURN This.aPagesImgs(lnPage)
  5958. ENDPROC
  5959. PROCEDURE clearpdferrors
  5960. * Clear any existing HPDF errors
  5961. * Here we can see if an error occurred during the rendering process of the 
  5962. * current field
  5963. LOCAL lnHPDF_err, lcHex
  5964. lnHPDF_err = HPDF_GetError(This.pdfHandle)
  5965. IF lnHPDF_err <> 0
  5966.     lcHex = TRANSFORM(lnHPDF_err, "@0")
  5967.     * MESSAGEBOX("PDFx error in " + PROGRAM(PROGRAM(-1) - 1) + CHR(13);
  5968.         + "Error code : " + TRANSFORM(lnHPDF_err) + CHR(13) ;
  5969.         + "Description: " + This._ErrorInfo(lnHPDF_err) + CHR(13) ;
  5970.         + "Page: " + TRANSFORM(This.nCurrentPage) + CHR(13) ;
  5971.         + "Object: " + This.cObjectToRender, ;
  5972.         16, "Error")
  5973.     HPDF_ResetError(This.pdfHandle)
  5974. ENDIF
  5975. ENDPROC
  5976. PROCEDURE getimgtype
  5977. LPARAMETERS lcData
  5978. LOCAL lcReturn,lcContents
  5979. IF PCOUNT()=0 OR VARTYPE(lcData)#'C'
  5980.    lcReturn=''
  5981.    IF ADIR(laDummy,lcData)>0 && File
  5982.       lcContents=FILETOSTR(lcData)
  5983.    ELSE && Memory variable
  5984.       lcContents=lcData
  5985.    ENDIF
  5986.    DO CASE
  5987.    CASE LEN(lcContents)<4
  5988.       lcReturn=''
  5989.    CASE LEFT(lcContents,3)=CHR(0xFF)+CHR(0xD8)+CHR(0xFF)
  5990.       lcReturn='JPG'
  5991.    CASE LEFT(lcContents,3)='GIF'
  5992.       lcReturn='GIF'
  5993.    CASE SUBSTR(lcContents,42,3)='EMF'
  5994.       lcReturn='EMF'
  5995.    CASE LEFT(lcContents,4)=CHR(0xD7)+CHR(0xCD)+CHR(0xC6)+CHR(0x9A)
  5996.       lcReturn='WMF'
  5997.    CASE LEFT(lcContents,4)=CHR(0x4D)+CHR(0x4D)+CHR(0x00)+CHR(0x2A)
  5998.       lcReturn='TIF'
  5999.    CASE LEFT(lcContents,4)=CHR(0x89)+'PNG'
  6000.       lcReturn='PNG'
  6001.    CASE LEFT(lcContents,2)='BM'
  6002.       lcReturn='BMP'
  6003.    CASE LEFT(lcContents,3)='CWS' AND ASC(SUBSTR(lcContents,4,1))<16
  6004.       lcReturn='SWF'
  6005.    CASE LEFT(lcContents,3)='FWS' AND ASC(SUBSTR(lcContents,4,1))<16
  6006.       lcReturn='SWF'
  6007.    OTHERWISE
  6008.       lcReturn=''
  6009.    ENDCASE
  6010. ENDIF
  6011. RETURN lcReturn
  6012. ENDPROC
  6013. PROCEDURE getdefaultfont
  6014. LPARAMETERS tcFontStyle
  6015. LOCAL lcNewFont, lnPos
  6016. lnPos  = ASCAN(This.aFontsReplaced, This.cDefaultFont + tcFontStyle)
  6017. IF lnPos > 0
  6018.     lnPos = (lnPos + 1) / 2
  6019.     lcNewFont = This.aFontsReplaced(lnPos, 2)
  6020. ELSE 
  6021.     lcNewFont = This.cDefaultFont 
  6022. ENDIF
  6023. RETURN lcNewFont
  6024. ENDPROC
  6025. PROCEDURE updateproperties
  6026. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  6027.     RETURN
  6028. ENDIF 
  6029. LOCAL loFP
  6030. loFP = _Screen.oFoxyPreviewer
  6031. IF VARTYPE(This.CommandClauses) = "O"
  6032.     *!*    IF This.CommandClauses.Preview
  6033.     *!*        This.lOpenViewer = .T.
  6034.     *!*    ELSE 
  6035.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  6036.     *!*    ENDIF
  6037.     This.lOpenViewer = This.CommandClauses.Preview
  6038.     IF NOT EMPTY(This.CommandClauses.ToFile)
  6039.         This.cTargetFileName = This.CommandClauses.ToFile
  6040.     ELSE 
  6041.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  6042.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  6043.                 EMPTY(This.cTargetFileName)
  6044.             LOCAL lcDestFile
  6045.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  6046.             IF NOT "\" $ lcDestFile
  6047.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  6048.             ENDIF
  6049.             This.cTargetFileName = lcDestFile
  6050.         ELSE
  6051.             LOCAL lcFile
  6052.             lcFile = This.cTargetFileName
  6053.             IF EMPTY(lcFile)
  6054.                 lcFile = PUTFILE("","","pdf")
  6055.             ENDIF
  6056.             IF EMPTY(lcFile)
  6057.                 _ReportListener::CancelReport()
  6058.                 * This.CancelReport()
  6059.                 RETURN .F.
  6060.             ENDIF
  6061.             This.cTargetFileName = lcFile
  6062.         ENDIF
  6063.     ENDIF 
  6064. ENDIF
  6065. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  6066. This.lEmbedFont       = NVL(loFP.lPDFEmbedFonts     , .F.)
  6067. This.lCanPrint        = NVL(loFP.lPDFCanPrint       , .T.)
  6068. This.lCanEdit         = NVL(loFP.lPDFCanEdit        , .T.)
  6069. This.lCanCopy         = NVL(loFP.lPDFCanCopy        , .T.)
  6070. This.lCanAddNotes     = NVL(loFP.lPDFCanAddNotes    , .T.)
  6071. This.lEncryptDocument = NVL(loFP.lPDFEncryptDocument, .T.)
  6072. This.cMasterPassword  = NVL(loFP.cPDFMasterPassword , "")
  6073. This.cUserPassword    = NVL(loFP.cPDFUserPassword   , "")
  6074. This.lShowErrors      = NVL(loFP.lPDFShowErrors     , .F.)
  6075. This.cSymbolFontsList = NVL(loFP.cPDFSymbolFontsList, "")
  6076. This.cPdfAuthor       = NVL(loFP.cPdfAuthor         , "")
  6077. This.cPdfTitle        = NVL(loFP.cPdfTitle          , "")
  6078. This.cPdfSubject      = NVL(loFP.cPdfSubject        , "")
  6079. This.cPdfKeyWords     = NVL(loFP.cPdfKeyWords       , "")
  6080. This.cPdfCreator      = NVL(loFP.cPdfCreator        , "")
  6081. This.cDefaultFont     = NVL(loFP.cPDFDefaultFont    , "")
  6082. IF This.lObjTypeMode
  6083.     This.cCodePage    = NVL(This.cCodePage          , loFP.cCodePage)
  6084. ELSE 
  6085.     This.cCodePage    = NVL(loFP.cCodePage          , This.cCodePage)
  6086. ENDIF
  6087. *!*    This.nWMheight        = loFp.nWATERMARKHEIGHTRATIO 
  6088. *!*    This.nWMheightratio   = lofp.nwaTERMARKHEIGHTRATIO 
  6089. *!*    This.nWMWidth         = lofp.nwaTERMARKWIDTHRATIO 
  6090. *!*    This.nWMWidthratio    = lofp.nwaTERMARKWIDTHRATIO 
  6091. *!*    This.cWMpicture       = lofp.cwaTERMARKIMAGE 
  6092. *!*    This.hWMpdfhandle     = 
  6093. LOCAL lnPgMode
  6094. lnPgMode = MAX(NVL(loFP.nPDFPageMode, 0) - 1, 0)
  6095. lnPgMode = IIF(lnPgMode = 1, 2, lnPgMode)
  6096. This.nPageMode = lnPgMode
  6097. IF VARTYPE(This.CommandClauses) = "O"
  6098.     IF This.CommandClauses.Preview
  6099.         This.lOpenViewer = .T.
  6100.     ENDIF 
  6101.     IF NOT EMPTY(This.CommandClauses.ToFile)
  6102.         This.cTargetFileName = This.CommandClauses.ToFile
  6103.     ENDIF 
  6104. ENDIF
  6105. This.GetWatermark()
  6106. ENDPROC
  6107. PROCEDURE filesize
  6108. LPARAMETERS lcFile
  6109. LOCAL ARRAY laSizeArray(1)
  6110. RETURN laSizeArray(ADIR(laSizeArray,lcFile)+1)
  6111. *!*    lParameters lcFileName && File to be checked
  6112. *!*    Local lnAcFiles
  6113. *!*    Local Array laSizeArray(1)
  6114. *!*    lnAcFiles = adir(laSizeArray,m.lcFilename)
  6115. *!*    Return iif(m.lnAcFiles>0,laSizeArray(2),-1)
  6116. *!*    Local lnHandle,lnSize
  6117. *!*    lnHandle = Fopen(m.lcFile,10)
  6118. *!*    lnSize = Fseek(m.lnHandle,0,2)
  6119. *!*    Fclose(m.lnHandle)
  6120. *!*    Return m.lnSize
  6121. ENDPROC
  6122. PROCEDURE getfonthandle
  6123. LPARAMETERS lcFontFace, liFontStyle
  6124. IF This._lSChinese OR This._lTChinese OR This._lJapanese OR This._lKorean
  6125.     lnFontHandle = HPDF_GetFont (.pdfHandle, This.cDefaultFont + This.GetFontStyleName(liFontStyle), .cCodePage)
  6126. ELSE 
  6127.     LOCAL lcPDFFont
  6128.     lcPDFFont = .SearchFont(lcFontFace, liFontStyle)
  6129.     IF EMPTY(lcPDFFont)
  6130.         RETURN 0
  6131.     ENDIF
  6132.     lnFontHandle = HPDF_GetFont(.pdfHandle, lcPDFFont, IIF(Empty(.cCodePage), Null, .cCodePage)) && Find and select the font    
  6133. ENDIF
  6134. IF lnFontHandle = 0
  6135.     This.ClearPdfErrors()
  6136. ENDIF
  6137. RETURN lnFontHandle
  6138. ENDPROC
  6139. PROCEDURE getfontstylename
  6140. LPARAMETERS tiStyle
  6141. LOCAL lcFontStyle as String 
  6142. lcFontStyle   = ""
  6143. If Bittest(tiStyle, 0) Then &&Bold 
  6144.     lcFontStyle  = lcFontStyle + "Bold"
  6145. EndIf
  6146. If Bittest(tiStyle, 1) Then &&Italic
  6147.     lcFontStyle  = lcFontStyle + "Italic"
  6148. EndIf
  6149. lcFontStyle = IIF(EMPTY(lcFontStyle), "", "," + lcFontStyle)
  6150. RETURN lcFontStyle
  6151. ENDPROC
  6152. PROCEDURE gettempfile
  6153. LPARAMETERS tcType
  6154. IF EMPTY(tcType)
  6155.     tcType = "JPG"
  6156. ENDIF
  6157. RETURN ADDBS(This._cTempFolder) + "FP_TMP_" + SYS(2015) + "." + tcType
  6158. ENDPROC
  6159. PROCEDURE istempfile
  6160. LPARAMETERS tcFile
  6161. IF EMPTY(tcFile)
  6162.     RETURN .F.
  6163. ENDIF
  6164. RETURN UPPER(ADDBS(This._cTempFolder) + "FP_TMP_") $ UPPER(tcFile)
  6165. ENDPROC
  6166. PROCEDURE getwatermark
  6167. * Prepare the watermarks stuff
  6168. *!*        .AddProperty("lUsingWatermark", .F.)
  6169. *!*        .AddProperty("cWatermarkImage"       , "") && loFP.cWaterMarkImage
  6170. *!*        .AddProperty("nWatermarkType"        , 1)  && 1 = colored ; 2 = greyscale  (1)
  6171. *!*        .AddProperty("nWatermarkTransparency", 0)  && 0 = transparent ; 1 = opaque (.25)
  6172. *!*        .AddProperty("nWatermarkWidthRatio"  , 0)  && 0 - 1 (.75)
  6173. *!*        .AddProperty("nWatermarkHeightRatio" , 0)  && 0 - 1 (.75)
  6174. *!*        .AddProperty("oWatermarkBmp"         , NULL)
  6175. * Watermarks
  6176. IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  6177.     LOCAL loFP
  6178.     loFP = _Screen.oFoxyPreviewer
  6179.     LOCAL lcWatermarkImage, lnWatermarkType, lnWatermarkTransparency, lnWatermarkWidthRatio, lnWatermarkHeightRatio
  6180.     lcWatermarkImage        = loFP.cWaterMarkImage
  6181.     lnWatermarkType         = loFP.nWatermarkType         && 1 = colored ; 2 = greyscale  (1)
  6182.     lnWatermarkTransparency = loFP.nWatermarkTransparency && 0 = transparent ; 1 = opaque (.25)
  6183.     lnWatermarkWidthRatio   = loFP.nWatermarkWidthRatio   && 0 - 1 (.75)
  6184.     lnWatermarkHeightRatio  = loFP.nWatermarkHeightRatio  && 0 - 1 (.75)
  6185.     IF (NOT FILE(lcWatermarkImage)) OR ;
  6186.             (lnWatermarkTransparency = 0) OR ;
  6187.             (lnWatermarkWidthRatio   = 0) OR ;
  6188.             (lnWatermarkHeightRatio  = 0)
  6189.         This.lUsingWatermark = .F.
  6190.     ELSE
  6191.         This.lUsingWatermark = .T.
  6192.         LOCAL loBmp AS GpBitmap OF HOME() + "\ffc\_gdiplus.vcx"
  6193.         loBmp = CREATEOBJECT("GpBitmap")
  6194.         loBmp.CreateFromFile(lcWatermarkImage)
  6195.         IF (lnWatermarkTransparency < 1) OR ;
  6196.                 (lnWatermarkType = 2) && 1 = colored ; 2 = greyscale
  6197.             * Applying the effects if necessary
  6198.             LOCAL loAtt   &&  AS GPATTRIB    OF "PR_GdiplusHelper.Prg"
  6199.             LOCAL lcMatrix AS COLORMATRIX OF "PR_GdiplusHelper.Prg"
  6200.             loAtt = NEWOBJECT("GpAttrib", "PR_GdiplusHelper.Prg")
  6201.             IF lnWatermarkType = 2 && 1 = colored ; 2 = greyscale
  6202.                 lcMatrix = loAtt.COLORMATRIX(;
  6203.                     .30, .30, .30,  0,  0, ;
  6204.                     .59, .59, .59,  0,  0, ;
  6205.                     .11, .11, .11,  0,  0, ;
  6206.                     0,   0,   0,  lnWatermarkTransparency,  0, ;
  6207.                     0,   0,   0,  0,  1)
  6208.             ELSE
  6209.                 lcMatrix = loAtt.COLORMATRIX(;
  6210.                     1,   0,   0,  0,  0, ;
  6211.                     0,   1,   0,  0,  0, ;
  6212.                     0,   0,   1,  0,  0, ;
  6213.                     0,   0,   0,  lnWatermarkTransparency,  0, ;
  6214.                     0,   0,   0,  0,  1)
  6215.             ENDIF
  6216.             loAtt.ApplyColorMatrix(lcMatrix, loBmp, .F., 0xFFFFFF)
  6217.             loAtt = NULL
  6218.         ENDIF
  6219.         * Prepare Watermark
  6220.         LOCAL lcTempFile, lcType
  6221.         lcType = LOWER(JUSTEXT(lcWatermarkImage))
  6222.         DO CASE
  6223.         CASE INLIST(lcType, "jpg", "jpeg", "tif", "tiff")
  6224.             lcType = "jpeg"
  6225.         OTHERWISE
  6226.             lcType = "png"
  6227.         ENDCASE
  6228.         lcTempFile = ADDBS(GETENV("TEMP")) + "Temp_WM_" + SYS(2015) + "." + lcType
  6229.         loBmp.SaveToFile(lcTempFile, "image/" + lcType)
  6230.         This._cWMpicture = lcTempFile
  6231.         LOCAL lnX, lnY, lnWidth, lnHeight
  6232.         lnX = (1 - lnWatermarkWidthRatio) / 2
  6233.         lnY = (1 - lnWatermarkHeightRatio) / 2
  6234.         lnWidth  = lnWatermarkWidthRatio
  6235.         lnHeight = lnWatermarkHeightRatio
  6236.         LOCAL lnPgWidth, lnPgHeight
  6237.         lnPgWidth  = This.GetPageWidth()
  6238.         lnPgHeight = This.GetPageHeight()
  6239.         This.nPageHeight = (lnPgHeight / 960) * 72
  6240.         This.nPageWidth  = (lnPgWidth  / 960) * 72
  6241.         This._nWMx = CEILING(lnX * This.nPageWidth)
  6242.         This._nWMy = CEILING(lnY * This.nPageHeight)
  6243.         This._nWMw = CEILING(This.nPageWidth * lnWidth)
  6244.         This._nWMh = CEILING(This.nPageHeight * lnHeight)
  6245.     ENDIF
  6246. ENDIF
  6247. ENDPROC
  6248. PROCEDURE getlanguagefromsystem
  6249. DECLARE SHORT GetSystemDefaultLangID IN kernel32
  6250. LOCAL lnLangID
  6251. lnLangID = GetSystemDefaultLangID()
  6252. * We'll use the most common Language IDs used
  6253. DO CASE
  6254. CASE INLIST(lnLangID, 1046, 2070) && Portuguese
  6255.     lnLangID = 1046
  6256. 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
  6257.     lnLangID = 1034
  6258. CASE INLIST(lnLangID, 1036, 2060, 3084, 4108, 5132) && French
  6259.     lnLangID = 1036
  6260. OTHERWISE
  6261. ENDCASE
  6262. This.nSystemLangID = lnLangID
  6263. ENDPROC
  6264. PROCEDURE Init
  6265. DODEFAULT()
  6266. This.GetLanguageFromSystem()
  6267. ENDPROC
  6268. PROCEDURE Destroy
  6269. This.ClearDLLS()
  6270. DODEFAULT()
  6271. ENDPROC
  6272. PROCEDURE LoadReport
  6273. This.UpdateProperties()
  6274. DODEFAULT()
  6275. ENDPROC
  6276. PROCEDURE UnloadReport
  6277. IF This.lDefaultMode 
  6278.     DODEFAULT()
  6279. ENDIF 
  6280. WITH This
  6281.     * CChalom 2010-01-20
  6282.     * Added "WaitForNextReport" property in order to allow merging reports
  6283.     * If another report is expected to come, don't close the objects and handles
  6284.     If Not .WaitForNextReport 
  6285.         If VARTYPE(.oTempImagesCollection) = "O" Then && Cleanup Temporary Images Files
  6286.             LOCAL lcItem AS String
  6287.             FOR EACH lcItem IN .oTempImagesCollection FOXOBJECT
  6288.                 *!* 2010-08-25 - Jacques Parent - Add TRY CATCH ENDTRY to catch error message
  6289.                 IF VARTYPE(lcItem) = "C" AND FILE(lcItem)
  6290.                     LOCAL loExc as Exception 
  6291.                     TRY
  6292.                         IF This.IsTempFile(lcItem)
  6293.                             DELETE FILE (lcItem)
  6294.                         ENDIF 
  6295.                     CATCH TO loExc
  6296.                         * SET STEP ON 
  6297.                     ENDTRY
  6298.                 ENDIF
  6299.             ENDFOR
  6300.             .oTempImagesCollection = Null
  6301.         ENDIF
  6302.         .oDynamics = NULL
  6303.         If Used("_TempDynamics") Then
  6304.             Use In "_TempDynamics"
  6305.         EndIf
  6306.         LOCAL llConsole, llTalk
  6307.         llConsole = This._lSetConsole
  6308.         llTalk = This._lSetTalk
  6309.         SET CONSOLE &llConsole.
  6310.         SET TALK &llTalk.
  6311.     ENDIF
  6312.     * Delete the pages files
  6313.     LOCAL n, lcFile
  6314.     FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  6315.         lcFile = This.aPagesImgs(m.n)
  6316.         IF NOT EMPTY(lcFile)
  6317.             TRY 
  6318.                 IF This.IsTempFile(lcFile)
  6319.                     DELETE FILE (lcFile)
  6320.                 ENDIF 
  6321.             CATCH
  6322.             ENDTRY
  6323.         ENDIF
  6324.     ENDFOR
  6325. ENDWITH
  6326. ENDPROC
  6327. PROCEDURE BeforeReport
  6328. IF This.lDefaultMode
  6329.     This.oActiveListener = This
  6330.     DODEFAULT()
  6331. ENDIF
  6332. WITH This
  6333. * Reset values, just for security
  6334. .oFonts = NULL
  6335. DIMENSION .aFontsSymbol(1)
  6336. .aFontsSymbol = .F.
  6337.         .oFonts = CREATEOBJECT("Collection")
  6338.         .AddPDFStandardFonts()
  6339.         .DeclareDLL()
  6340.         IF "1252" $ This.cCodePage 
  6341.         ELSE
  6342.             This.lReplaceFonts = .F.
  6343.         ENDIF
  6344.         IF This.lReplaceFonts
  6345.             DIMENSION This.aFontsReplaced(26,2)
  6346.             .aFontsReplaced(1,1) = "Courier New"
  6347.             .aFontsReplaced(1,2) = "Courier"
  6348.             .aFontsReplaced(2,1) = "Courier New Bold"
  6349.             .aFontsReplaced(2,2) = "Courier-Bold"
  6350.             .aFontsReplaced(3,1) = "Courier New Italic"
  6351.             .aFontsReplaced(3,2) = "Courier-Oblique"
  6352.             .aFontsReplaced(4,1) = "Courier New Bold Italic"
  6353.             .aFontsReplaced(4,2) = "Courier-BoldOblique"
  6354.             .aFontsReplaced(5,1) = "Monotype Sorts"
  6355.             .aFontsReplaced(5,2) = "ZapfDingbats"
  6356.             .aFontsReplaced(6,1) = "Wingdings"
  6357.             .aFontsReplaced(6,2) = "ZapfDingbats"
  6358.             .aFontsReplaced(7,1) = "Arial"
  6359.             .aFontsReplaced(7,2) = "Helvetica"
  6360.             .aFontsReplaced(8,1) = "Arial Bold"
  6361.             .aFontsReplaced(8,2) = "Helvetica-Bold"
  6362.             .aFontsReplaced(9,1) = "Arial Italic"
  6363.             .aFontsReplaced(9,2) = "Helvetica-Oblique"
  6364.             .aFontsReplaced(10,1) = "Arial Bold Italic"
  6365.             .aFontsReplaced(10,2) = "Helvetica-BoldOblique"
  6366.             .aFontsReplaced(11,1) = "Times New Roman"
  6367.             .aFontsReplaced(11,2) = "Times-Roman"
  6368.             .aFontsReplaced(12,1) = "Times New Roman Bold"
  6369.             .aFontsReplaced(12,2) = "Times-Bold"
  6370.             .aFontsReplaced(13,1) = "Times New Roman Italic"
  6371.             .aFontsReplaced(13,2) = "Times-Italic"
  6372.             .aFontsReplaced(14,1) = "Times New Roman Bold Italic"
  6373.             .aFontsReplaced(14,2) = "Times-BoldItalic"
  6374.             * Other compatible possibilities
  6375.             .aFontsReplaced(15,1) = "Courier"
  6376.             .aFontsReplaced(15,2) = "Courier"
  6377.             .aFontsReplaced(16,1) = "Courier Bold"
  6378.             .aFontsReplaced(16,2) = "Courier-Bold"
  6379.             .aFontsReplaced(17,1) = "Courier Italic"
  6380.             .aFontsReplaced(17,2) = "Courier-Oblique"
  6381.             .aFontsReplaced(18,1) = "Courier Bold Italic"
  6382.             .aFontsReplaced(18,2) = "Courier-BoldOblique"
  6383.             .aFontsReplaced(19,1) = "Helvetica"
  6384.             .aFontsReplaced(19,2) = "Helvetica"
  6385.             .aFontsReplaced(20,1) = "Helvetica Bold"
  6386.             .aFontsReplaced(20,2) = "Helvetica-Bold"
  6387.             .aFontsReplaced(21,1) = "Helvetica Italic"
  6388.             .aFontsReplaced(21,2) = "Helvetica-Oblique"
  6389.             .aFontsReplaced(22,1) = "Helvetica Bold Italic"
  6390.             .aFontsReplaced(22,2) = "Helvetica-BoldOblique"
  6391.             .aFontsReplaced(23,1) = "Times-Roman"
  6392.             .aFontsReplaced(23,2) = "Times-Roman"
  6393.             .aFontsReplaced(24,1) = "Times-Roman Bold"
  6394.             .aFontsReplaced(24,2) = "Times-Bold"
  6395.             .aFontsReplaced(25,1) = "Times-Roman Italic"
  6396.             .aFontsReplaced(25,2) = "Times-Italic"
  6397.             .aFontsReplaced(26,1) = "Times-Roman Bold Italic"
  6398.             .aFontsReplaced(26,2) = "Times-BoldItalic"
  6399.         ENDIF 
  6400.         * Missing to add to corresponding fonts array
  6401.         *!*        .Add("Symbol", "Symbol")
  6402.         ._lSetConsole   = Set("Console")
  6403.         ._lSetTalk      = Set("Talk")
  6404.         Set Talk Off
  6405.         Set Console Off
  6406.         Local lnFonts, lnFontstoAdd
  6407.         lnFonts = 34
  6408.         lnFontstoAdd = Getwordcount(This.cSymbolFontsList, ",")
  6409.         Dimension .aFontsSymbol(lnFonts + lnFontstoAdd)
  6410.         .aFontsSymbol(1)  = "WING-DINGS"
  6411.         .aFontsSymbol(2)  = "WEBDINGS"
  6412.         .aFontsSymbol(3)  = "BARRAS BIRO"
  6413.         .aFontsSymbol(4)  = "PF BARCODE 128"
  6414.         .aFontsSymbol(5)  = "BARRA25"
  6415.         .aFontsSymbol(6)  = "BARRA25I"
  6416.         .aFontsSymbol(7)  = "BARRA39"
  6417.         .aFontsSymbol(8)  = "BARRAEAN8"
  6418.         .aFontsSymbol(9)  = "BARRAEAN13"
  6419.         .aFontsSymbol(10) = "BARRA128B"
  6420.         .aFontsSymbol(11) = "IDAUTOMATIONHC39M"
  6421.         .aFontsSymbol(12) = "PF BARCODE 39"
  6422.         .aFontsSymbol(13) = "PF EAN P36"
  6423.         .aFontsSymbol(14) = "PF EAN P72"
  6424.         .aFontsSymbol(15) = "PF INTERLEAVED 2 of 5"
  6425.         .aFontsSymbol(16) = "PF INTERLEAVED 2 OF 5 WIDE"
  6426.         .aFontsSymbol(17) = "PF INTERLEAVED 2 OF 5 TEXT"
  6427.         .aFontsSymbol(18) = "CODE 128AB"
  6428.         .aFontsSymbol(19) = "CODE 128AB SHORT"
  6429.         .aFontsSymbol(20) = "CODE 128AB TALL"
  6430.         .aFontsSymbol(21) = "CODE 128AB HR"
  6431.         .aFontsSymbol(22) = "CODE 128AB SHORT"
  6432.         .aFontsSymbol(23) = "CODE 128AB TALL HR"
  6433.         .aFontsSymbol(24) = "CODE 128C"
  6434.         .aFontsSymbol(25) = "CODE 128C SHORT"
  6435.         .aFontsSymbol(26) = "CODE 128C TALL"
  6436.         .aFontsSymbol(27) = "CODE 128C HR"
  6437.         .aFontsSymbol(28) = "CODE 128C HR SHORT"
  6438.         .aFontsSymbol(29) = "CODE 128C HR TALL"
  6439.         .aFontsSymbol(30) = "CODIGO DE BARRAS CYT"
  6440.         .aFontsSymbol(31) = "C39HRP24DHTT"
  6441.         .aFontsSymbol(32) = "C39HRP48DHTT"
  6442.         .aFontsSymbol(33) = "INTERLEAVED 2OF5 NT"
  6443.         .aFontsSymbol(34) = "3 of 9 Barcode"
  6444.         If lnFontstoAdd > 0
  6445.             Local N
  6446.             For m.N = 1 To lnFontstoAdd
  6447.                 .aFontsSymbol(lnFonts + m.N) = GETWORDNUM(.cSymbolFontsList, m.N, ",")
  6448.             Endfor
  6449.         Endif
  6450.         ._cTempFolder = Addbs(Sys(2023)) && ADDBS(GETENV("TEMP"))
  6451.         ._cWinFolder  = Addbs(Getenv("windir"))
  6452. *    ENDIF 
  6453. ENDWITH
  6454. * Checking the default font
  6455. LOCAL lcDefaultFont
  6456. lcDefaultFont = ALLTRIM(This.cDefaultFont)
  6457. IF EMPTY(lcDefaultFont) OR NOT INLIST(lcDefaultFont, "Courier", "Helvetica", "Times-Roman")
  6458.     This.cDefaultFont = "Helvetica"
  6459. ENDIF
  6460. ENDPROC
  6461. PROCEDURE Render
  6462. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  6463. IF This.TwoPassProcess And This.CurrentPass=0 Then &&Code to detect if report will run twice because of use of _PAGETOTAL
  6464.     DODEFAULT(nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  6465.     RETURN
  6466. ENDIF
  6467. * CChalom 2010-01-25
  6468. * If the report page is not between the page ranges asked, just skip
  6469. IF This.lDefaultMode 
  6470.     IF This.PageNo > This.nGlobalPgCounter OR This.nPgCounter = 0
  6471.         This.nPgCounter = This.nPgCounter + 1
  6472.         This.nGlobalPgCounter = This.nGlobalPgCounter + 1
  6473.     ENDIF
  6474.     LOCAL lnRangeTo
  6475.     lnRangeTo = This.CommandClauses.RangeTo
  6476.     IF lnRangeTo <> -1 AND NOT BETWEEN(This.nPgCounter, This.CommandClauses.RangeFrom, lnRangeTo)
  6477.         NODEFAULT 
  6478.         RETURN 
  6479.     ENDIF 
  6480. ENDIF 
  6481. #Define OBJ_COMMENT                  0
  6482. #Define OBJ_LABEL                    5
  6483. #Define OBJ_LINE                     6
  6484. #Define OBJ_RECTANGLE                7
  6485. #Define OBJ_FIELD                    8
  6486. #Define OBJ_PICTURE                 17
  6487. #Define OBJ_VARIABLE                18
  6488. nLeft0   = nLeft  
  6489. nTop0    = nTop   
  6490. nWidth0  = nWidth 
  6491. nHeight0 = nHeight 
  6492. LOCAL lcContents AS String, loError AS Exception
  6493. *!* Modify the measures according to the PDF library
  6494. LOCAL nPDFLeft, nPDFTop, nPDFWidth, nPDFHeight
  6495. nPDFLeft   = (nLeft   / 960) * 72
  6496. nPDFTop    = (nTop    / 960) * 72
  6497. nPDFWidth  = (nWidth  / 960) * 72
  6498. nPDFHeight = (nHeight / 960) * 72 
  6499. WITH This
  6500.     LOCAL lnPageNo
  6501.     IF This.lDefaultMode 
  6502.         .SetFRXDataSession()
  6503.         lnPageNo = .PageNo
  6504.     ELSE 
  6505.         lnPageNo = PAGE
  6506.     ENDIF 
  6507.     .nCurrentPage = lnPageNo
  6508.     If !.lStarted Then &&Start PDF Document
  6509.         IF NOT .StartPdfDocument() &&Method Called to Start the PDF Generation
  6510.             RETURN .F.
  6511.         ENDIF
  6512.         .nLastPageProccesed = lnPageNo
  6513.     EndIf
  6514.     If lnPageNo!=.nLastPageProccesed Then &&Add a New Page
  6515.         .AddBlankPage()
  6516.         .nLastPageProccesed = lnPageNo
  6517.     EndIf
  6518.     If Empty(cContentsToBeRendered) Then
  6519.         lcContents = ''
  6520.     EndIf
  6521. EndWith
  6522. IF (nPdfLeft < 0) OR (nPDFLeft > This.nPageWidth) OR ;
  6523.         (nPDFTop < 0) OR (nPdfTop > This.nPageHeight)
  6524.     * SET STEP ON
  6525.     RETURN
  6526. ENDIF
  6527. *!* Change to FRX Datasession and take out the important values
  6528. IF This.lDefaultMode 
  6529.     Go nFRXRecno In FRX
  6530. ENDIF 
  6531. Scatter Memo Name oFrx
  6532. LOCAL llSuccess
  6533. With oFrx
  6534.     *!* Restore Report Datasession
  6535.     IF This.lDefaultMode 
  6536.         This.ResetDataSession()
  6537.     ENDIF 
  6538.     *!* Start Generation Proccess depending of Object Type
  6539.     Do Case
  6540.         Case .ObjType=OBJ_LABEL &&Label
  6541.             If !Empty(.ResoId) And .ResoId!=1 Then
  6542.                 &&Convert from Unicode
  6543.                 lcContents = Strconv(cContentsToBeRendered, 6, .ResoId, 2)
  6544.                 This.Tag = lcContents
  6545.             Else
  6546.                 &&Convert from Unicode
  6547.                 lcContents = Strconv(cContentsToBeRendered, 6)
  6548.                 This.Tag = ""
  6549.             EndIf
  6550.             Try
  6551.                 This.cObjectToRender = "LABEL: " + lcContents
  6552.                 llSuccess = This.ProcessLabel(.FontFace, .FontStyle,.FontSize,.PenRed,.PenGreen,.PenBlue,.FillRed,.FillGreen,.FillBlue,nPDFLeft,nPDFTop,lcContents,.FillChar,.Offset,nPDFWidth, ;
  6553.                     .ResoId,nPDFHeight,.Picture,.Style, .Mode)
  6554.                 IF NOT llSuccess
  6555.                     This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  6556.                 ENDIF
  6557.             Catch To loError
  6558.                 *!* Handle Error Here
  6559.             EndTry
  6560.         Case .ObjType=OBJ_FIELD &&Field
  6561.             If !Empty(.ResoId) And .ResoId!=1 Then
  6562.                 &&Convert from Unicode
  6563.                 lcContents = Strconv(cContentsToBeRendered, 6, .ResoId, 2)
  6564.                 This.Tag = lcContents
  6565.             Else
  6566.                 &&Convert from Unicode
  6567.                 lcContents = Strconv(cContentsToBeRendered, 6)
  6568.                 This.Tag = ""
  6569.             EndIf
  6570.             Try
  6571.                 This.cObjectToRender = "FIELD: " + lcContents
  6572.                 llSuccess = This.ProcessFields(.FontFace,.FontStyle,.FontSize,.PenRed,.PenGreen,.PenBlue, ;
  6573.                     .FillRed,.FillGreen,.FillBlue,;
  6574.                     nPDFLeft,nPDFTop,;
  6575.                     lcContents,.FillChar,.Offset, ;
  6576.                     .Stretch,.ResoId,nPDFHeight,nPDFWidth,.Style, .Mode, .User)
  6577.                 IF NOT llSuccess
  6578.                     IF This._Stat2 = 4214 && Could not fit in space
  6579.                         LOCAL lnWords, lnCharWidth, n, lnLen, lnCharsAllowed, ;
  6580.                             lnCharsToInsert, lcText
  6581.                         lnWords = GETWORDCOUNT(lcContents)
  6582.                         IF lnWords = 1 && Add some spaces in the string to allow wordwrap
  6583.                             lnCharWidth = FONTMETRIC(6, .FontFace, .FontSize, This.cTextStyle) * 10
  6584.                             lnTxtWidth  = TXTWIDTH(lcContents,.FontFace,.FontSize, This.cTextStyle) * ;
  6585.                                 lnCharWidth && * 104.166
  6586.                             lnLen = LEN(lcContents)
  6587.                             * IF (lnTxtWidth * .70) > nWidth
  6588.                                 lnCharsAllowed = CEILING((nWidth / lnCharWidth) * 0.73)
  6589.                                 lnCharsToInsert = FLOOR(lnLen / lnCharsAllowed)
  6590.                                 lcText = lcContents
  6591.                                 FOR m.n = 1 TO lnCharsToInsert
  6592.                                     lcText = STUFF(lcText, (lnCharsAllowed * m.n) + m.n, 0, " ")
  6593.                                 ENDFOR 
  6594.                                 llSuccess = This.ProcessFields(.FontFace,.FontStyle,.FontSize,.PenRed,.PenGreen,.PenBlue, ;
  6595.                                     .FillRed,.FillGreen,.FillBlue,;
  6596.                                     nPDFLeft,nPDFTop,;
  6597.                                     lcText,.FillChar,.Offset, ;
  6598.                                     .Stretch,.ResoId,nPDFHeight,nPDFWidth,.Style, .Mode, .User)
  6599.                             * ENDIF 
  6600.                         ENDIF
  6601.                     ENDIF 
  6602.                     IF NOT llSuccess
  6603.                         This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  6604.                     ENDIF 
  6605.                 ENDIF
  6606. * Another possible way to get the width of the text
  6607. *!*    loFRXCursor = newobject('FRXCursor', home() + 'FFC\_FRXCursor.vcx')
  6608. *!*    lnWidth = loFRXCursor.GetFRUTextWidth(lcText, lcFontName, lnFontSize, lcFontStyle)
  6609.             Catch To loError
  6610.                 * SET STEP ON 
  6611.                 *!* Handle Error Here
  6612.             EndTry
  6613.         Case .ObjType=OBJ_LINE  &&Line
  6614.             Try
  6615.                 This.cObjectToRender = "LINE"
  6616.                 This.ProcessLines(.PenRed, .PenGreen, .PenBlue, nPDFTop, nPDFLeft, nPDFWidth, nPDFHeight, .PenSize, .Offset, .PenPat, .Style)
  6617.             Catch To loError
  6618.                 *!* Handle Error Here
  6619.             EndTry
  6620.         Case .ObjType=OBJ_PICTURE &&Picture or General Field
  6621.             IF nPdfWidth = 0 OR nPdfHeight = 0
  6622.                 * Nothing to render
  6623.                 RETURN
  6624.             ENDIF 
  6625.             lcContents = cContentsToBeRendered
  6626.             Try
  6627.                 This.cObjectToRender = "PICTURE: " + lcContents
  6628.                 llSuccess = This.ProcessPictures(nPDFTop, nPDFLeft, nPDFWidth, nPDFHeight, lcContents, GDIPlusImage, .Offset, .General, .Style)
  6629.                 IF NOT llSuccess AND (NOT EMPTY(lcContents)) && image is in General field 
  6630.                     TRY 
  6631.                         LOCAL lcPicVal, lcTmpImg
  6632.                         lcPicVal = FOXYGETIMAGE(lcContents)
  6633.                         
  6634.                         IF NOT EMPTY(lcPicVal)
  6635.                             lcTmpImg = ADDBS(This._cTempFolder) + JUSTFNAME(lcContents)
  6636.                             STRTOFILE(lcPicVal, lcTmpImg)
  6637.                             llSuccess = This.ProcessPictures(nPDFTop, nPDFLeft, nPDFWidth, nPDFHeight, lcTmpImg, GDIPlusImage, .Offset, .General, .Style)
  6638.                             TRY 
  6639.                                 DELETE FILE (lcTmpImg)
  6640.                             CATCH
  6641.                             ENDTRY
  6642.                         ENDIF 
  6643.                     CATCH TO loExc
  6644.                         * Clear existing the HPDF errors
  6645.                         This.ClearPDFErrors()
  6646.                     ENDTRY 
  6647.                 ENDIF 
  6648.                 IF NOT llSuccess
  6649.                     This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  6650.                     * Clear existing the HPDF errors
  6651.                     This.ClearPDFErrors()
  6652.                 ENDIF
  6653.             CATCH TO loError
  6654.                 * SET STEP ON 
  6655.                 *!* Handle Error Here
  6656.             EndTry
  6657.         Case .ObjType=OBJ_RECTANGLE &&Rectangle
  6658.             TRY
  6659.                 *!* 2010-08-25 - Jacques Parent - Add nObjectContinuationType to the call
  6660.                 This.cObjectToRender = "RECTANGLE"
  6661.                 This.ProcessShapes(.FillRed, .FillGreen, .FillBlue, .PenRed, .PenGreen, .PenBlue, nPDFLeft, nPDFTop, nPDFWidth, nPDFHeight, .Offset, .PenSize, .PenPat, .FillPat, .Style, .Mode, nObjectContinuationType)
  6662.             CATCH TO loError
  6663.                 * SET STEP ON 
  6664.                 *!* Handle Error Here
  6665.                 *!*    IF VERSION(2) = 2
  6666.                 *!*        MESSAGEBOX(loError.Message)
  6667.                 *!*    ENDIF
  6668.             ENDTRY 
  6669.     ENDCASE
  6670. * Clear existing the HPDF errors
  6671. This.ClearPDFErrors()
  6672. DODEFAULT(nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  6673. ENDWITH
  6674. ENDPROC
  6675. PROCEDURE AfterReport
  6676. IF This.lDefaultMode 
  6677.     DODEFAULT()
  6678. ENDIF 
  6679. * Delete watermark temp image file
  6680. IF NOT EMPTY(This._cWMpicture)
  6681.     TRY 
  6682.         DELETE FILE (This._cWMpicture)
  6683.     CATCH
  6684.     ENDTRY 
  6685. ENDIF 
  6686. * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  6687. IF This.lObjTypeMode
  6688.     TRY 
  6689.         This.WaitForNextReport = This.CommandClauses.NoPageEject
  6690.     CATCH
  6691.     ENDTRY 
  6692. ENDIF 
  6693. With This
  6694.     IF NOT .WaitForNextReport
  6695.         LOCAL lcFile
  6696.         lcFile = This.cTargetFileName
  6697.         IF EMPTY(lcFile)
  6698.             HPDF_Free(.pdfHandle)
  6699.             .pdfHandle = 0 
  6700.             .lStarted  = .F.
  6701.         ELSE
  6702.             ._Stat = HPDF_SaveToFile(.pdfHandle, lcFile)
  6703.             HPDF_Free(.pdfHandle)
  6704.             INKEY(.1)
  6705.             .pdfHandle  = 0 
  6706.             .lStarted   = .F.
  6707.             .nPgCounter = 0
  6708.             .aPagesImgs = ""
  6709.             .cTextStyle = ""
  6710.             .nCurrentPage = 0
  6711.             .nDivisionFactor = 0
  6712.             .nGlobalPgCounter = 0
  6713.             .nLastPageProccesed = 0
  6714.             .nPgCounter = 0
  6715.             This.oPictureHandles = ""
  6716.             This.oDynamics = ""
  6717.             This.oTempImagesCollection = ""
  6718.             LOCAL llSaved
  6719.             llSaved = FILE(lcFile)
  6720.             IF llSaved
  6721.                 IF This.lObjTypeMode
  6722.                     _Screen.oFoxyPreviewer.lSaved = llSaved
  6723.                 ENDIF
  6724.                 IF .lOpenViewer THEN
  6725.                     .ShellExec(This.cTargetFileName)
  6726.                 ENDIF
  6727.             ENDIF 
  6728.         ENDIF 
  6729.     ENDIF 
  6730.     * CChalom
  6731.     * Reset the report page counter
  6732.     This.nPgCounter = 0
  6733. ENDWITH
  6734. This.oActiveListener = ""
  6735. ENDPROC
  6736. PROCEDURE resetdatasession
  6737.     Set DataSession To (This.CurrentDataSession)
  6738. Catch When .T.
  6739.     *Can't Return DataSession to do: handle this
  6740. EndTry
  6741. ENDPROC
  6742. PROCEDURE setfrxdatasession
  6743. With This
  6744.     If (.FRXDatasession > -1) And (.FRXDatasession # Set("DATASESSION")) Then
  6745.         Try
  6746.             Set DataSession To (.FRXDatasession)
  6747.         Catch When .T.
  6748.             .ResetToDefault("FRXDataSession")
  6749.             .ResetDataSession()
  6750.         EndTry
  6751.     EndIf
  6752. EndWith
  6753. ENDPROC
  6754. Height = 23
  6755. Width = 23
  6756. ListenerType = -1
  6757. FRXDataSession = -1
  6758. SendGDIPlusImage = 1
  6759. pdfhandle = 0
  6760. nlastpageproccesed = 0
  6761. ndivisionfactor = 0
  6762. cpdfauthor = 
  6763. cpdftitle = 
  6764. cpdfsubject = 
  6765. cpdfkeywords = 
  6766. cpdfcreator = 
  6767. lcanprint = .T.
  6768. lcancopy = .T.
  6769. lcanedit = .F.
  6770. lcanaddnotes = .F.
  6771. lencryptdocument = .F.
  6772. cuserpassword = 
  6773. cmasterpassword = 
  6774. nencriptionlevel = 5
  6775. opage = .NULL.
  6776. lstarted = .F.
  6777. ctargetfilename = 
  6778. lopenviewer = .F.
  6779. ofonts = .NULL.
  6780. oregistry = .NULL.
  6781. npageheight = 0
  6782. nspacesfortab = 4
  6783. lembedfont = .T.
  6784. ccodepage = CP1252
  6785. lunderline = .F.
  6786. ctextstyle = 
  6787. odynamics = .NULL.
  6788. waitfornextreport = .F.
  6789. npgcounter = 0
  6790. nglobalpgcounter = 0
  6791. otempimagescollection = .NULL.
  6792. opicturehandles = .NULL.
  6793. _lsetconsole = .F.
  6794. _lsettalk = .F.
  6795. npagemode = 0
  6796. lextended = .T.
  6797. ldefaultmode = .T.
  6798. npagewidth = 0
  6799. _cwinfolder = 
  6800. _ctempfolder = 
  6801. _stat = .F.
  6802. lshowerrors = .F.
  6803. csymbolfontslist = 
  6804. cobjecttorender = 
  6805. _stat2 = 0
  6806. ncurrentpage = 0
  6807. oactivelistener = .NULL.
  6808. cdefaultfont = Helvetica
  6809. lobjtypemode = .F.
  6810. _lschinese = .F.
  6811. lrighttoleft = .F.
  6812. lreplacefonts = .T.
  6813. _ltchinese = .F.
  6814. _lkorean = .F.
  6815. _ljapanese = .F.
  6816. nwmwidthratio = 0
  6817. nwmheightratio = 0
  6818. nwmwidth = 0
  6819. nwmheight = 0
  6820. cwmpicture = 
  6821. hwmpdfhandle = 0
  6822. _cwmpicture = 
  6823. _nwmy = 0
  6824. _nwmx = 0
  6825. _nwmw = 0
  6826. _nwmh = 0
  6827. lusingwatermark = .F.
  6828. nsystemlangid = 0
  6829. lhasuserfld = .F.
  6830. _memberdata = .T.
  6831. Name = "pdflistener"
  6832. PLATFORM
  6833. UNIQUEID
  6834. TIMESTAMP
  6835. CLASS
  6836. CLASSLOC
  6837. BASECLASS
  6838. OBJNAME
  6839. PARENT
  6840. PROPERTIES
  6841. PROTECTED
  6842. METHODS
  6843. OBJCODE
  6844. RESERVED1
  6845. RESERVED2
  6846. RESERVED3
  6847. RESERVED4
  6848. RESERVED5
  6849. RESERVED6
  6850. RESERVED7
  6851. RESERVED8
  6852.  COMMENT Class               
  6853.  WINDOWS _1TF0Z2JS31087744875
  6854.  COMMENT RESERVED            
  6855. VERSION =   3.00
  6856. rtfreportlistener
  6857. Pixels
  6858. * VFP reports to rtf converter
  6859. * Class is based on report listener clas.
  6860. * It permits to see VFP reports in MS Word 
  6861. * Authors -Vladimir Zhuravlev, Dmitriy Petrov, Valeriy Lifshits
  6862. * with help of Vadim Pirozhkov and Andrey Petrov
  6863. Class
  6864. fxlistener
  6865. rtfreportlistener
  6866. paper_letter
  6867. handle
  6868. code_page
  6869. oldpageno
  6870. borderwidth 
  6871. lofrxrecord
  6872. waitfornextreport
  6873. npgcounter
  6874. nglobalpgcounter
  6875. orecord
  6876. targetfilename
  6877. lstarted
  6878. _llandscape
  6879. npagewidth
  6880. npageheight
  6881. ldefaultmode
  6882. nmarginleft
  6883. nmarginright
  6884. nmargintop
  6885. nmarginbottom
  6886. ncurrentpage
  6887. oactivelistener
  6888. _ctempfolder
  6889. oimages
  6890. lobjtypemode
  6891. lopenviewer
  6892. ctempfrx
  6893. cfrxalias
  6894. *getfrxrecord 
  6895. *fontstyleconvert 
  6896. *pagesetup 
  6897. *twips 
  6898. *rtf_create 
  6899. ^arfont[1,0] 
  6900. *himetrictortf 
  6901. *dectoproc 
  6902. *mabout 
  6903. ^arcolors[1,4] 
  6904. *frxtotwips 
  6905. *outputfromdata 
  6906. *renderrtf 
  6907. *getpageimg 
  6908. ^apagesimgs[1,0] 
  6909. *getpicturefromlistener 
  6910. *cropimage 
  6911. ^aimgs[1,0] 
  6912. *updateproperties 
  6913. *stringfromunicode 
  6914. PNFRXRECNO
  6915. LOFRX
  6916. SETFRXDATASESSION
  6917. RESETDATASESSION
  6918. \strike
  6919. \plain
  6920. TNFONTSTYLE
  6921. LCSTYLE
  6922. TCEXPR    
  6923. LNPGWIDTH
  6924. LNPGHEIGHT
  6925. GETPAGEWIDTH
  6926. GETPAGEHEIGHT
  6927. _LLANDSCAPE
  6928. NPAGEWIDTH
  6929. FRXTOTWIPS
  6930. NPAGEHEIGHT&
  6931. Collection
  6932. CopyFRX
  6933. \redCC
  6934. \green
  6935. \blue
  6936. \redCC
  6937. \green
  6938. \blue
  6939. TempColors
  6940. TempColors
  6941. \red0\green0\blue0
  6942. TempColors
  6943. \red255\green255\blue255
  6944. TempColors
  6945. \red0\green0\blue0
  6946. {\colortbl;
  6947. {\fonttbl{
  6948. \fnil\fcharset
  6949. Error creating file: 
  6950. Error
  6951. \paperwCC
  6952. \paperh
  6953. \margl
  6954. \margr
  6955. \margt
  6956. \margb
  6957. \landscape
  6958. {\rtf1\ansi\ansicpgCC
  6959. \uc1 \deff0\deflang1049\deflangfe1049
  6960. _CTEMPFOLDER
  6961. OIMAGES
  6962. HANDLE
  6963. LCFRXALIAS
  6964. LDEFAULTMODE
  6965. LOBJTYPEMODE
  6966. SETFRXDATASESSION
  6967. CTEMPFRX    
  6968. CFRXALIAS
  6969. _GOHELPER    
  6970. OLISTENER
  6971. FONTFACE
  6972. ARFONT
  6973. LNSELECT
  6974. DISTINCT
  6975. PENRED
  6976. PENGREEN
  6977. PENBLUE
  6978. OBJTYPE
  6979. FILLRED    
  6980. FILLGREEN
  6981. FILLBLUE
  6982. TEMPCOLORS
  6983. ARCOLORS
  6984. RESETDATASESSION
  6985. LCCOLORTABLE
  6986. LCFONTTABLE
  6987. LNFCS
  6988. TARGETFILENAME
  6989. LCPAPER
  6990. LCOUTSTR
  6991. NPAGEWIDTH
  6992. NPAGEHEIGHT
  6993. NMARGINLEFT
  6994. NMARGINRIGHT
  6995. NMARGINTOP
  6996. _LLANDSCAPE    
  6997. CODE_PAGE
  6998. HIMETRICVALUE
  6999. LNDEC
  7000. TNFRX[
  7001. Invalid parameter. Report listener not available
  7002. Error
  7003. The helper FRX table is not available. Output can't be created
  7004. Error
  7005. Datasessionv
  7006. %  - 
  7007. 100%  - CCC
  7008. TOLISTENER
  7009. TCOUTPUTDBF
  7010. TNWIDTH
  7011. TNHEIGHT
  7012. OACTIVELISTENER    
  7013. CFRXALIAS
  7014. LNSELECT
  7015. LNORIGDATASESSION
  7016. LISTENERDATASESSION    
  7017. QUIETMODE
  7018. LNSECS
  7019. DOFOXYTHERM    
  7020. _GOHELPER
  7021. _INITSTATUSTEXT
  7022. LDEFAULTMODE
  7023. NPAGEWIDTH
  7024. FRXTOTWIPS
  7025. NPAGEHEIGHT
  7026. LNPGFROM
  7027. LNPGTO
  7028. _CLAUSENRANGEFROM
  7029. _CLAUSENRANGETO
  7030. RTF_CREATE
  7031. RENDER
  7032. FRXRECNO
  7033. WIDTH
  7034. HEIGHT
  7035. CONTTYPE
  7036. UNCONTENTS    
  7037. LNPERCENT
  7038. LNLASTPERCENT
  7039. LNDELAY    
  7040. LNTOTRECS
  7041. LNREC
  7042. _SECONDSTEXT
  7043. _RUNSTATUSTEXT
  7044. AFTERREPORTq
  7045. <_CR_>
  7046. <_CR_>
  7047. <_CR_>
  7048. <_CR_>
  7049.  \par 
  7050.  \par 
  7051. {\sp{\sn WrapText}{\sv 2}}
  7052. {\sp{\sn lineColor}{\sv CC
  7053. {\sp{\sn fillColor}{\sv C
  7054. {\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}
  7055. {\shp{\*\shpinst
  7056. \shpleft
  7057. \shptop
  7058. \shpright
  7059. \shpbottom
  7060. \shpfhdr0
  7061. \shpbxmargin
  7062. \shpbxignore
  7063. \shpbymargin
  7064. \shpbyignore
  7065. {\sp{\sn fline}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}
  7066. {\sp{\sn lineWidth}{\sv 
  7067. \red0\green0\blue0
  7068. \redCC
  7069. \green
  7070. \blue
  7071. {\shp{\*\shpinst
  7072. \shpleft
  7073. \shptop
  7074. \shpright
  7075. \shpbottom
  7076. \shpfhdr0
  7077. {\sp{\sn fline}{\sv 0}}
  7078. {\sp{\sn dxTextLeft}{\sv 0}}
  7079. {\sp{\sn dyTextTop}{\sv 0}}
  7080. {\sp{\sn dxTextRight}{\sv 0}}
  7081. {\sp{\sn dyTextBottom}{\sv 0}}
  7082. {\sp{\sn fFilled}{\sv 0}}
  7083. {\sp{\sn fFitShapeToText}{\sv 1}}
  7084. { \shptxt\pard
  7085. {\sp{\sn lineColor}{\sv CC
  7086. {\shp{\*\shpinst
  7087. \shpleft
  7088. \shptop
  7089. \shpright
  7090. \shpbottom
  7091. \shpfhdr0
  7092. {\sp{\sn fline}{\sv 1}}
  7093. {\sp{\sn ShapeType}{\sv 20}}
  7094. {\sp{\sn lineWidth}{\sv 
  7095. {\shp{\*\shpinst
  7096. \shpleft
  7097. \shptop
  7098. \shpright
  7099. \shpbottom
  7100. \shpfhdr0
  7101. {\sp{\sn fline}{\sv 1}}
  7102. {\sp{\sn ShapeType}{\sv 20}}
  7103. {\sp{\sn lineWidth}{\sv 
  7104. {\sp{\sn lineColor}{\sv CC
  7105. {\sp{\sn lineColor}{\sv CC
  7106. {\sp{\sn lineColor}{\sv CC
  7107. {\sp{\sn lineColor}{\sv CC
  7108. {\sp{\sn fillColor}{\sv C
  7109. {\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}
  7110. {\sp{\sn shapeType}{\sv 2}}6
  7111. {\shp{\*\shpinst
  7112. \shpleft
  7113. \shptop
  7114. \shpright
  7115. \shpbottom
  7116. \shpfhdr0
  7117. \shpbxmargin
  7118. \shpbxignore
  7119. \shpbymargin
  7120. \shpbyignore
  7121. {\sp{\sn fline}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}
  7122. {\sp{\sn lineWidth}{\sv 
  7123. TEMP5
  7124. GPIMAGE
  7125. GpImage
  7126. _GdiPlus.vcx
  7127. image/jpeg
  7128. IMAGE
  7129. Image
  7130. {\shp{\*\shpinst
  7131. \shpleft
  7132. \shptop
  7133. \shpright
  7134. \shpbottom
  7135. {\sp{\sn ShapeType}{\sv 75}}
  7136. {\sp{\sn fline}{\sv 0}}
  7137. {\sp{\sn fLockAspectRatio}{\sv 
  7138. {\sp{\sn cropFromBottom}{\sv 
  7139. {\sp{\sn cropFromRight} {\sv 
  7140. {\sp{\sn pib}
  7141. {\sv 
  7142. {\pict
  7143. \wmetafile8\pic
  7144. \picbpp4
  7145. {\sp{\sn pibFlags}{\sv 2}}
  7146. {\sp{\sn fUseShapeAnchor}{\sv 0}}
  7147. LOFRXRECORD
  7148. NLEFT
  7149. NWIDTH
  7150. NHEIGHT
  7151. NOBJECTCONTINUATIONTYPE
  7152. CCONTENTSTOBERENDERED
  7153. GDIPLUSIMAGE
  7154. _TFORCEOBJECTTYPE
  7155. _TFORCELINEOFSET
  7156. FONTNUM
  7157. FONT_ID
  7158. _FONTSTYLE
  7159. LCRTF
  7160. _ALLG    
  7161. LCPENSIZE
  7162. LCTEXT    
  7163. LLDBLBYTE
  7164. OBJTYPE
  7165. LCWRAPTEXT
  7166. STRINGFROMUNICODE
  7167. PICTURE
  7168. OFFSET
  7169. LCCOLORRTF
  7170. LNCLRINDEX
  7171. LCCOLORTAG
  7172. LCBACKCOLORRTF
  7173. LNBACKCLRINDEX
  7174. PENSIZE
  7175. LCPENCOLOR
  7176. LCFILLCOLOR
  7177. FILLRED    
  7178. FILLGREEN
  7179. FILLBLUE
  7180. LNRGB
  7181. FRXTOTWIPS
  7182. PENRED
  7183. PENGREEN
  7184. PENBLUE
  7185. ARCOLORS
  7186. ARFONT
  7187. FONTFACE
  7188. FONTSTYLECONVERT    
  7189. FONTSTYLE
  7190. LNBORDER
  7191. FONTSIZE
  7192. FILLPAT
  7193. PENPAT    
  7194. LCROUNDED
  7195. HANDLE    
  7196. RENDERRTF
  7197. HDPICT
  7198. STRFILE
  7199. LNFILESIZE
  7200. LHFILE
  7201. OBJPICT
  7202. LNPICTWIDTH
  7203. LNPICTHEIGHT
  7204. LNWIDTH
  7205. LNHEIGHT
  7206. LLLOCK
  7207. LNCROPR
  7208. LNCROPB
  7209. LCTEMPIMGFILE
  7210. LOIMAGE    
  7211. SETHANDLE
  7212. SAVETOFILE
  7213. GETPICTUREFROMLISTENER
  7214. LCEXT
  7215. LOVFPIMG
  7216. WIDTH
  7217. HEIGHT
  7218. HIMETRICTORTF
  7219. GENERAL    
  7220. DECTOPROC
  7221. LNHORFACTOR
  7222. LNVERTFACTOR
  7223. LNRESIZEFACTOR
  7224. LOEXC
  7225. REPORTLISTENER
  7226. TEMP5
  7227. LOLISTENER
  7228. OACTIVELISTENER
  7229. LNPAGE
  7230. NCURRENTPAGE
  7231. COMMANDCLAUSES    
  7232. RANGEFROM
  7233. APAGESIMGS
  7234. LNDEVICETYPE
  7235. LCFILE
  7236. LNHANDLE
  7237. OUTPUTPAGE
  7238. TNWIDTH
  7239. TNHEIGHT
  7240. LDEFAULTMODE
  7241. LCFILE
  7242. GETPAGEIMG
  7243. LNHOR
  7244. LNVERT    
  7245. LCNEWFILE    
  7246. CROPIMAGE
  7247. STRING
  7248. INTEGER
  7249. INTEGER
  7250. GPBITMAP
  7251. ffc\_gdiplus.vcx
  7252. GpBitmap
  7253. _GdiPlus.vcx
  7254. GdipCloneBitmapAreaI
  7255. GDIPLUS.DLLQ
  7256. pdfxGdipCloneBitmapAreaI
  7257. GPBITMAP
  7258. ffc\_gdiplus.vcx
  7259. GpBitmap
  7260. _GdiPlus.vcx
  7261. image/png
  7262. image/jpeg6
  7263. LCFILE
  7264. LNWIDTH
  7265. LNHEIGHT
  7266. TLFILE
  7267. LOBMP
  7268. CREATEFROMFILE
  7269. IMAGEHEIGHT
  7270. IMAGEWIDTH
  7271. LHBITMAP
  7272. LNSTATUS
  7273. GDIPCLONEBITMAPAREAI
  7274. GDIPLUS
  7275. PDFXGDIPCLONEBITMAPAREAI
  7276. PIXELFORMAT    
  7277. GETHANDLE    
  7278. LOCROPPED    
  7279. SETHANDLE
  7280. SETRESOLUTION
  7281. HORIZONTALRESOLUTION
  7282. VERTICALRESOLUTION
  7283. LCEXT    
  7284. LCENCODER
  7285. LCCROPPEDFILE
  7286. _CTEMPFOLDER
  7287. SAVETOFILE
  7288. OIMAGES
  7289. LOBJTYPEMODE
  7290. OFOXYPREVIEWER
  7291. COMMANDCLAUSES
  7292. LOPENVIEWER
  7293. PREVIEW
  7294. TOFILE
  7295. TARGETFILENAME    
  7296. CDESTFILE
  7297. LCDESTFILE
  7298. COUTPUTPATH
  7299. LCFILE
  7300. _REPORTLISTENER
  7301. CANCELREPORT    
  7302. QUIETMODE
  7303. LQUIETMODE
  7304.  \par 
  7305. TCUNICODE
  7306. LCUNVALUE    
  7307. LNUNVALUE
  7308. LCNEWCONTENTS
  7309. LNCHARS 
  7310. LDEFAULTMODE
  7311. STRING
  7312. EXCEPTION
  7313. LDEFAULTMODE
  7314. LOBJTYPEMODE
  7315. WAITFORNEXTREPORT
  7316. COMMANDCLAUSES
  7317. NOPAGEEJECT
  7318. HANDLE
  7319. LLSAVED
  7320. OFOXYPREVIEWER
  7321. LSAVED
  7322. LOPENVIEWER    
  7323. SHELLEXEC
  7324. TARGETFILENAME
  7325. NPGCOUNTER
  7326. LCFILE
  7327. APAGESIMGS
  7328. OIMAGES
  7329. LCITEM
  7330. LOEXC
  7331. OACTIVELISTENER    
  7332. CFRXALIAS
  7333. CTEMPFRX
  7334. \page
  7335. \page
  7336. NFRXRECNO
  7337. NLEFT
  7338. NWIDTH
  7339. NHEIGHT
  7340. NOBJECTCONTINUATIONTYPE
  7341. CCONTENTSTOBERENDERED
  7342. GDIPLUSIMAGE
  7343. LNPAGENO
  7344. PAGENO
  7345. LDEFAULTMODE    
  7346. LNRANGETO    
  7347. TLNEWPAGE
  7348. NGLOBALPGCOUNTER
  7349. NPGCOUNTER
  7350. COMMANDCLAUSES
  7351. RANGETO    
  7352. RANGEFROM    
  7353. OLDPAGENO
  7354. LSTARTED
  7355. HANDLE
  7356. NCURRENTPAGE
  7357. TWOPASSPROCESS
  7358. CURRENTPASS
  7359. LOFRXRECORD
  7360. GETFRXRECORD
  7361. LOFRX    
  7362. RENDERRTFT
  7363. LDEFAULTMODE
  7364. LOBJTYPEMODE
  7365. OACTIVELISTENER    
  7366. PAGESETUP
  7367. RTF_CREATE
  7368. TCRTFFILENAME
  7369. TARGETFILENAME
  7370. NPGCOUNTER
  7371. LDEFAULTMODE
  7372. LOBJTYPEMODE
  7373. UPDATEPROPERTIES
  7374. getfrxrecord,
  7375. fontstyleconvert
  7376. pagesetup
  7377. twips
  7378. rtf_create
  7379. himetrictortf
  7380. dectoproc
  7381. mabout
  7382. frxtotwips
  7383. outputfromdata%
  7384. renderrtf]
  7385. getpageimg[1
  7386. getpicturefromlistener
  7387. cropimageC4
  7388. updateproperties
  7389. stringfromunicode
  7390. Destroy
  7391. AfterReport%=
  7392. Render
  7393. BeforeReport
  7394. LoadReportvF
  7395. PROCEDURE getfrxrecord
  7396. LPARAMETERS pnFRXRecNo
  7397. LOCAL loFRX
  7398. *-- Switch to the FRX
  7399. This.setFRXDataSession()
  7400. SET TALK OFF 
  7401. *-- Goto the record
  7402. GOTO pnFRXRecNo
  7403. *-- Get the data
  7404. SCATTER MEMO NAME loFRX 
  7405. This.resetDataSession()
  7406. *-- Return the data
  7407. RETURN loFRX
  7408. ENDPROC
  7409. PROCEDURE fontstyleconvert
  7410. *-- Convert FontStyle from numeric value
  7411. *-- to character codes
  7412. LPARAMETERS tnFontStyle
  7413. LOCAL lcStyle
  7414. lcStyle = ''
  7415. IF BITTEST(tnFontStyle, 0)
  7416.    lcStyle = lcStyle + '\b'
  7417. ENDIF
  7418. IF BITTEST(tnFontStyle, 1)
  7419.    lcStyle = lcStyle + '\i'
  7420. ENDIF
  7421. IF BITTEST(tnFontStyle, 2)
  7422.    lcStyle = lcStyle + '\ulw'
  7423. ENDIF
  7424. IF BITTEST(tnFontStyle, 7)
  7425.    lcStyle = lcStyle + '\strike'
  7426. ENDIF
  7427. IF EMPTY(lcStyle)
  7428.    lcStyle = '\plain'
  7429. ENDIF
  7430. RETURN lcStyle
  7431. ENDPROC
  7432. PROCEDURE pagesetup
  7433. LPARAMETERS tcExpr
  7434. LOCAL lnPgWidth, lnPgHeight
  7435. lnPgWidth  = This.GetPageWidth()
  7436. lnPgHeight = This.GetPageHeight()
  7437. This._lLandscape = lnPgWidth > lnPgHeight
  7438. WITH This
  7439.     .nPageWidth  = This.FrxToTwips(lnPgWidth)
  7440.     .nPageHeight = This.FrxToTwips(lnPgHeight)
  7441. ENDWITH
  7442. ENDPROC
  7443. PROCEDURE twips
  7444.  LParameters nCm_
  7445. * making Twip
  7446.   Return Int(nCm_ * 1440 / 2.54)
  7447. ENDPROC
  7448. PROCEDURE rtf_create
  7449. This._cTempFolder = ADDBS(SYS(2023)) && ADDBS(GETENV("TEMP"))
  7450. This.oImages = CREATEOBJECT("Collection")
  7451. WITH This
  7452. * Creating rtf file 
  7453. IF NOT EMPTY(.handle)
  7454.     RETURN
  7455. ENDIF 
  7456. LOCAL lcFRXAlias
  7457. IF This.lDefaultMode OR This.lObjTypeMode
  7458.     This.setFRXDataSession()
  7459.     SET TALK OFF
  7460.     This.cTempFRX  = ADDBS(SYS(2023)) + "FRX_" + SYS(2015) + '.dbf'
  7461.     This.cFRXAlias = "CopyFRX"
  7462.     lcFRXAlias = This.cFRXAlias
  7463.     * Make a copy of the FRX table and manipulate it
  7464.     SELECT FRX
  7465.     COPY TO (This.cTempFRX)
  7466.     USE (This.cTempFRX) SHARED AGAIN IN 0 ALIAS (This.cFRXalias)
  7467.     lcFRXAlias = _goHelper.oListener.cFRXAlias
  7468. *    USE (_goHelper.oListener.cFRXDBF) AGAIN ALIAS FRX IN 0
  7469. ENDIF 
  7470. * Getting all fonts sizes
  7471. SELECT ALLTRIM(Padr(Mline(fontface,1),30));
  7472.     FROM (lcFRXAlias) ;
  7473.     INTO ARRAY .arFont;
  7474.     WHERE NOT EMPTY(fontface);
  7475.     GROUP By 1
  7476. * CChalom 2010-01-23
  7477. * Creating the Color table
  7478. LOCAL lnSelect
  7479. lnSelect = SELECT()
  7480. SELECT ;
  7481.     DISTINCT ("\red" + ALLTRIM(STR(penRed)) + "\green" + ALLTRIM(STR(penGreen)) + "\blue" + ALLTRIM(STR(penBlue))) as RTF, ;
  7482.         PenRed, PenGreen, PenBlue ;
  7483.     FROM (lcFRXAlias);
  7484.     WHERE INLIST(ObjType, 5, 8) ;
  7485.         AND NOT INLIST(-1, PenRed, PenGreen, PenBlue) ;
  7486. UNION ;
  7487. SELECT;
  7488.     DISTINCT ("\red" + ALLTRIM(STR(FillRed)) + "\green" + ALLTRIM(STR(FillGreen)) + "\blue" + ALLTRIM(STR(FillBlue))) as RTF, ;
  7489.         FillRed AS PenRed, FillGreen AS PenGreen, FillBlue AS PenBlue ;
  7490.     FROM (lcFRXAlias);
  7491.     WHERE INLIST(ObjType, 5, 8) ;
  7492.         AND NOT INLIST(-1, FillRed, FillGreen, FillBlue) ;
  7493.     INTO CURSOR TempColors ;
  7494.     READWRITE 
  7495. * Check if we have the two basic colors, white and black
  7496. INSERT INTO TempColors VALUES ("\red0\green0\blue0", 0, 0, 0)
  7497. INSERT INTO TempColors VALUES ("\red255\green255\blue255", 255, 255, 255)
  7498. * Urrutia 2010-02-05
  7499. * initialize the array property in case all colors are Default
  7500. If _Tally > 0
  7501.     SELECT Distinct RTF, penRed, penGreen, penBlue ;
  7502.         FROM TempColors Into Array .ArColors NOFILTER 
  7503. ELSE 
  7504.     .ArColors(1,1)="\red0\green0\blue0"
  7505.     .ArColors(1,2)=0
  7506.     .ArColors(1,3)=0
  7507.     .ArColors(1,4)=0
  7508. Endif
  7509. USE IN TempColors
  7510. SELECT (lnSelect)
  7511. *-- Restore the datasession
  7512. IF This.lDefaultMode 
  7513.     This.ResetDataSession()
  7514. ENDIF 
  7515. ********** Making Color table
  7516. * {\colortbl;\red0\green0\blue0;\red255\green0\blue0;}
  7517. LOCAL lcColorTable
  7518. lcColorTable = '{\colortbl;'
  7519. FOR m.i = 1 TO (ALEN(.arColors) / 4)
  7520.     lcColorTable = lcColorTable + ALLTRIM(.arColors(m.i, 1)) + ";"
  7521. NEXT i
  7522. lcColorTable = lcColorTable + "}"
  7523. ********** Making font RTF features
  7524. LOCAL lcFontTable, lnFcs
  7525. lcFontTable = ""
  7526. lcFontTable = '{\fonttbl{'
  7527. FOR m.i = 1 TO ALEN(.arFont)
  7528.     lnFcs = FONTMETRIC(17, .arfont[m.i], 10)
  7529.     lcFontTable = lcFontTable+'\f' + Alltrim(Str(m.i,2,0)) + '\fnil\fcharset' + Alltrim(Str(lnFcs)) + ' ' + Alltrim(.arfont[m.i])+';'
  7530. NEXT i
  7531. lcFontTable = SUBSTR(lcFontTable, 1, LEN(lcFontTable)-1) + '}}'
  7532. .handle = FCREATE(.TargetFileName)
  7533. IF .handle <= 0
  7534.     = MESSAGEBOX("Error creating file: " + .TargetFileName, "Error")
  7535.     RETURN
  7536. ENDIF
  7537. LOCAL lcPaper, lcOutStr
  7538. * Storing paper information
  7539. lcPaper = '\paperw' + Alltrim(Str(.nPageWidth))+;
  7540.         '\paperh' + Alltrim(Str(.nPageHeight))+;
  7541.         '\margl' + Alltrim(Str(.nMarginLeft))+;
  7542.         '\margr' + Alltrim(Str(.nMarginRight))+;
  7543.         '\margt' + Alltrim(Str(.nMarginTop))+;
  7544.         '\margb' + Alltrim(Str(.nMarginTop))+;
  7545.         IIF(._lLandscape, '\landscape', '')
  7546. *        IIF(.paper_letter, '\landscape', '')
  7547. lcOutStr = "{\rtf1\ansi\ansicpg" + Alltrim(Str(.code_page)) + ;
  7548.     '\uc1 \deff0\deflang1049\deflangfe1049' +;
  7549.     lcFontTable + lcPaper + lcColorTable
  7550. = FPUTS(.handle, lcOutStr)
  7551. ENDWITH
  7552. ENDPROC
  7553. PROCEDURE himetrictortf
  7554. LPARAMETERS HiMetricValue
  7555. * metric transformation 
  7556. RETURN INT(HiMetricValue*240/635)
  7557. ENDPROC
  7558. PROCEDURE dectoproc
  7559. LPARAMETERS lnDec
  7560. RETURN ROUND(lnDec*65536, 0)
  7561. ENDPROC
  7562. PROCEDURE mabout
  7563. * VFP reports to rtf converter
  7564. * Class is based on report listener class.
  7565. * It permits to see VFP reports in MS Word 
  7566. * Authors: Vladimir Zhuravlev, Dmitriy Petrov, Valeriy Lifshits
  7567. * with help of Vadim Pirozhkov and Andrey Petrov
  7568. * Received improvements and fixes from Cesar Chalom
  7569. * - Fixed the calculated fields
  7570. * - Allowed general image fields to be printed
  7571. * - Enabled colors and backcolors in texts, and colors and backcolors in shapes and lines
  7572. * - Allowed generating a determined range of pages
  7573. * - Allowed merging more tan one report together
  7574. * Usage:
  7575. * SET CLASSLIB TO  frx_rtf
  7576. * LOCAL loRTFListener as ReportListener 
  7577. * loRTFListener = CREATEOBJECT('RtfReportListener')
  7578. * loRTFListener.TargetFileName = "MyRTFReport.RTF"
  7579. * REPORT FORM MyReport OBJECT loRTFListener
  7580. * CChalom comments
  7581. * All changed codes in this class are preceeded with comments
  7582. *!*    Removed methods, that are not used any more:
  7583. *!*    1 - PutPageBreak()
  7584. *!*    2 - DoBeforeRender
  7585. *!* 3 - GetBandName
  7586. *!* 4 - GetFormatCode
  7587. *!* 5 - GetNextNumber
  7588. *!* 6 - Pix2FRX
  7589. *!* 7 - StrTransform
  7590. *!*    8 - CalcAgrVal
  7591. *!*    9 - CommaTran
  7592. *!*    10 - CreateAgrProp
  7593. *!*    11 - ExprChange
  7594. *!*    12 - MEval
  7595. *!*    13 - StrTransform
  7596. *!*    14 - Thistran
  7597. *!*    Removed properties
  7598. *!*    This.cReportName
  7599. *!*    New properties
  7600. *!*    WaitForNextReport - logical determines if the listener object will keep
  7601. *!*    the file handles opened in order to get the next report pages
  7602. *!*    Renamed property:
  7603. *!*    "RTF_filename" to "TargetFileName"
  7604. *!*    in order to use the same property name from HTMLListener
  7605. *!*    Method Init()
  7606. *!*    Removed the need of all parameters
  7607. *!*    Just one parameter is allowed, the destination RTF file name
  7608. *!* This will fill the "TargetFileName" property
  7609. *!* Original comments from Vladimir Zhuravlev - original usage has changed !
  7610. * Not valid anymore
  7611. *    SET CLASSLIB TO  frx_rtf
  7612. *    loObjectList = CREATEOBJECT('rtfreportlistener', 'report1.frx', 'newrep.rtf', '', '')
  7613. *    loObjectList.OutputType = 1
  7614. *    REPORT FORM report1 OBJECT loObjectList PREVIEW noconsole
  7615. * in CREATEOBJECT('rtfreportlistener', 'report1.frx', 'newrep.rtf', '', '')
  7616. * first parameter is class name, second is report name to be converted, third parameters is
  7617. * MS Word document name. To This document VFP report will be converted
  7618. * Two optional parameters can be 'ThisForm','This' 
  7619. * These for reports, where ThisForm or This are used in expresions 
  7620. * Class does not cover General fields, if they were in report expresions
  7621. * Comments for future implementation
  7622. *!*    * Get color attributes
  7623. *!*    IF VARTYPE(This.oRecord) = "O"
  7624. *!*        SET STEP ON 
  7625. *!*        LOCAL lnRed, lnGreen, lnBlue, lnColorIndex
  7626. *!*        lnRed   = This.oRecord.PenRed
  7627. *!*        lnGreen = This.oRecord.PenGreen
  7628. *!*        lnBlue  = This.oRecord.PenBlue
  7629. *!*        lnColorIndex = This.AddColor(lnRed, lnGreen, lnBlue)    
  7630. *!*    ELSE
  7631. *!*    ENDIF 
  7632. ENDPROC
  7633. PROCEDURE frxtotwips
  7634. LPARAMETERS tnFrx
  7635. */  inches to  twip
  7636. RETURN  INT(tnFrx / 960 * 1440)
  7637. ENDPROC
  7638. PROCEDURE outputfromdata
  7639. LPARAMETERS toListener, tcOutputDBF, tnWidth, tnHeight
  7640. IF VARTYPE(toListener) <> "O"
  7641.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  7642.     RETURN
  7643. ENDIF 
  7644. This.oActiveListener = toListener
  7645. IF EMPTY(toListener.cFRXAlias)
  7646.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  7647.     RETURN
  7648. ENDIF 
  7649. LOCAL lnSelect, lnOrigDataSession
  7650. lnSelect          = SELECT()
  7651. lnOrigDataSession = SET("Datasession")
  7652. * Ensure we are at the correct DataSession
  7653. SET DATASESSION TO (toListener.ListenerDataSession)
  7654. * SET DATASESSION TO (toListener.CurrentDataSession)
  7655. SELECT (tcOutputDBF)
  7656. * =DoFoxyTherm(90, "Texto label", "Titulo")
  7657. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  7658. * =DoFoxyTherm() && Desliga
  7659. IF NOT This.QuietMode 
  7660.     LOCAL lnSecs
  7661.     lnSecs = SECONDS()
  7662.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  7663.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  7664.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  7665.     =DoFoxyTherm(1, "0%", _goHelper._InitStatusText)
  7666. ENDIF 
  7667. * Generate RTF using the stored information
  7668. This.lDefaultMode = .F.
  7669. This.nPageWidth  = This.FrxToTwips(tnWidth)
  7670. This.nPageHeight = This.FrxToTwips(tnHeight)
  7671. LOCAL lnPgFrom, lnPgTo
  7672. lnPgFrom = _goHelper._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  7673. lnPgTo   = IIF(_goHelper._ClausenRangeTo = -1, 999999, _goHelper._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  7674. * Initialize class
  7675. * This.BeforeReport()
  7676. This.RTF_Create()
  7677. SELECT (tcOutputDBF)
  7678. IF This.QuietMode 
  7679.     SCAN
  7680.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  7681.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  7682.         ENDIF
  7683.     ENDSCAN
  7684. ELSE 
  7685.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  7686.     lnLastPercent = 0
  7687.     lnDelay       = 1
  7688.     lnTotRecs     = RECCOUNT()
  7689.     lnRec         = 0
  7690.     SCAN
  7691.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  7692.             IF NOT This.QuietMode 
  7693.                 lnRec = lnRec + 1
  7694.                 lnPercent = CEILING(100*lnRec/lnTotRecs)
  7695.                 IF (lnLastPercent > 0 AND ;
  7696.                         lnPercent - lnLastPercent < lnDelay  AND ;
  7697.                         lnPercent <> 100)
  7698.                 ELSE 
  7699.                     =DoFoxyTherm(lnPercent, ;
  7700.                         ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  7701.                         _goHelper._RunStatusText)
  7702.                 ENDIF 
  7703.             ENDIF
  7704.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  7705.         ENDIF
  7706.     ENDSCAN
  7707.     =DoFoxyTherm(100, ;
  7708.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  7709.                 _goHelper._RunStatusText)
  7710. ENDIF 
  7711. * Finalize
  7712. This.AfterReport()
  7713. USE IN SELECT(tcOutputDBF)
  7714. * Restore DataSession, Alias
  7715. SET DATASESSION TO (lnOrigDataSession)
  7716. SELECT (lnSelect)
  7717. IF NOT This.QuietMode 
  7718.     =DoFoxyTherm()
  7719. ENDIF
  7720. RETURN 
  7721. ENDPROC
  7722. PROCEDURE renderrtf
  7723. LPARAMETERS loFRXrecord, nleft, ntop, nwidth, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, _tForceObjectType, _tForceLineOfset
  7724. *!* 2011-08-12 - Jacques Parent
  7725. *!* _tForceObjectType, _tForceLineOfset are used in cate there is a continuation for boxes
  7726. *!* Boxes are then decomposed into lines.
  7727. #Define OBJ_COMMENT                  0
  7728. #Define OBJ_LABEL                    5
  7729. #Define OBJ_LINE                     6
  7730. #Define OBJ_RECTANGLE                7
  7731. #Define OBJ_FIELD                    8
  7732. #Define OBJ_PICTURE                 17
  7733. #Define OBJ_VARIABLE                18
  7734. *!* 2011-08-12 - Jacques Parent - Some constants
  7735. #DEFINE tnConstVerticalLine            0
  7736. #DEFINE tnConstHorizontalLine        1
  7737. IF VARTYPE(_tForceObjectType) <> "N"
  7738.     _tForceObjectType = -1
  7739. ENDIF
  7740. IF VARTYPE(_tForceLineOfset) <> "N"
  7741.     _tForceLineOfset = -1
  7742. ENDIF
  7743. WITH loFrxRecord
  7744. *******
  7745. * OUTPUT
  7746. *******
  7747. ******************************************
  7748.     Local fontnum, font_id, _fontstyle, lcRTF, _allg, lcpensize
  7749.     lcRTF = ''
  7750.     LOCAL lcText, llDblByte
  7751.     lcText = STRCONV(cContentsToBeRendered,6)
  7752.     IF LEN(lcText) <> LENC(lcText) && Double-Byte characters
  7753.         llDblByte = .T.
  7754.     ELSE 
  7755.         llDblByte = .F.
  7756.     ENDIF
  7757.     Do Case
  7758. *************************************************************************
  7759. ***  Field or label into textbox
  7760. *************************************************************************
  7761.     Case _tForceObjectType == OBJ_FIELD OR _tForceObjectType == OBJ_LABEL OR (_tForceObjectType==-1 AND (.ObjType = OBJ_FIELD OR .ObjType = OBJ_LABEL))
  7762.         LOCAL lcWrapText
  7763.         lcWrapText = ""
  7764.         IF .ObjType = OBJ_FIELD
  7765.             IF llDblByte = .T.
  7766.                 lcText = This.StringFromUnicode(cContentsToBeRendered)
  7767.                 .Expr = lcText
  7768. *!*                    .Expr = STRCONV(cContentsToBeRendered,6)
  7769. *!*                    .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  7770. *!*                    .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  7771. *!*                    .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  7772. *!*                    .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  7773.             ELSE && Single-byte
  7774.                 .Expr = STRCONV(cContentsToBeRendered,6)
  7775.                 .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  7776.                 .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  7777.                 .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  7778.                 .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  7779.             ENDIF
  7780. *!*                .Expr = STRCONV(cContentsToBeRendered,6)
  7781. *!*                .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  7782. *!*                .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  7783. *!*                .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  7784. *!*                .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  7785.         ELSE 
  7786.             IF llDblByte 
  7787.                 .Expr = This.StringFromUnicode(cContentsToBeRendered)
  7788.             ELSE 
  7789.                 .Expr = CHRTRAN(loFRXRecord.Expr, ["], [])
  7790.                 * Removing CHR(13) from texts 
  7791.                 IF CHR(13) $ .Expr
  7792.                     .Expr=Strtran(.Expr, Chr(13), ' \par ')
  7793.                     * .Expr=Strtran(.Expr, Chr(13), ' \line ')
  7794.                     nWidth = nWidth + 150
  7795.                 ELSE 
  7796.                     lcWrapText = '{\sp{\sn WrapText}{\sv 2}}'
  7797.                 ENDIF
  7798.             ENDIF
  7799.         ENDIF 
  7800. ************* Making allign
  7801. *!*            If .ObjType = OBJ_LABEL
  7802. *!*                _allg = '\ql '
  7803. *!*            Else
  7804.             If  Left(.Picture, 1) = '@'
  7805.                 Do Case
  7806.                 Case 'J'$.Picture
  7807.                     _allg = '\qr '
  7808.                 Case 'I'$.Picture
  7809.                     _allg = '\qc '
  7810.                 Otherwise
  7811.                     _allg = '\ql '
  7812.                 Endcase
  7813.             Else
  7814.                 Do Case
  7815.                 * CChalom 2010-09-28
  7816.                 * Included the Full Justify option, when the tag "<FJ>" is found in the USER field
  7817.                 CASE "<FJ>" $ .User
  7818.                     _allg = '\qj '
  7819.                 *-
  7820.                 Case .offset = 0
  7821.                     _allg = '\ql '
  7822.                 Case .offset = 2
  7823.                     _allg = '\qc '
  7824.                 Case .offset = 1
  7825.                     _allg = '\qr '
  7826.                 Otherwise
  7827.                     _allg = '\ql '
  7828.                 Endcase
  7829.             Endif
  7830. *!*            Endif
  7831. * CChalom 2010-01-21
  7832. * Included color tags for "Fields" and "Labels"
  7833. ********* Color attributes
  7834.         LOCAL lcColorRTF, lnClrIndex, lcColorTag, lcBackColorRTF, lnBackClrIndex
  7835.         lcColorTag = ""
  7836.     * Draw a box as a background for the texts
  7837.         * Create a border color with the same color of the backcolor
  7838.         lcpensize = Alltrim(Str(9525*.pensize))
  7839.         LOCAL lcPenColor, lcFillColor
  7840.         IF .FillRed <> -1 && Not default
  7841.             lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.FillRed, .FillGreen, .FillBlue)) + '}}'
  7842.         ELSE 
  7843.             lcPenColor = ""
  7844.         ENDIF 
  7845.         IF .Mode = 0 AND .FillRed <> -1 && Mode: 0 = Opaque background; 1 = Transparent
  7846.             LOCAL lnRGB
  7847.             IF .FillRed = -1 
  7848.                 lnRGB = RGB(255,255,255)
  7849.             ELSE 
  7850.                 lnRGB = RGB(.FillRed, .FillGreen, .FillBlue)
  7851.             ENDIF 
  7852.             lcFillColor = '{\sp{\sn fillColor}{\sv ' + TRANSFORM(lnRGB) + '}}' + ;
  7853.                 '{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}'
  7854.         ELSE 
  7855.             lcFillColor = ""
  7856.         ENDIF 
  7857.         IF EMPTY(lcFillColor)
  7858.             lcRTF = ""
  7859.         ELSE 
  7860.             lcRTF = '{\shp{\*\shpinst' + ;
  7861.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  7862.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  7863.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft + nwidth)))+;
  7864.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop + nheight)))+;
  7865.                 '\shpfhdr0' + ;
  7866.                 '\shpbxmargin' + ;
  7867.                 '\shpbxignore' + ;
  7868.                 '\shpbymargin' + ;
  7869.                 '\shpbyignore' + ;
  7870.                 '{\sp{\sn fline}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}'+;
  7871.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  7872.                 lcFillColor + ;
  7873.                 lcPenColor + ;
  7874.                 '}}'
  7875.         ENDIF 
  7876.         IF .PenRed = -1 && Default Black
  7877.             lcColorRTF = "\red0\green0\blue0"
  7878.         ELSE 
  7879.             lcColorRTF = "\red" + ALLTRIM(STR(.penRed)) + "\green" + ALLTRIM(STR(.penGreen)) + "\blue" + ALLTRIM(STR(.penBlue))
  7880.         ENDIF 
  7881.         lnClrIndex = Ascan(This.arColors, lcColorRTF) &&, 1, 1, 1, 1)
  7882.         IF lnClrIndex = 0
  7883.             lnClrIndex = 1
  7884.         ELSE
  7885.             lnClrIndex = ((lnClrIndex -1) / 4) + 1
  7886.         ENDIF 
  7887.         lcColorTag = lcColorTag + "\cf" + ALLTRIM(STR(lnClrIndex)) + " "
  7888. ********* Font number
  7889.         fontnum = Ascan(This.arfont,Alltrim(.fontface),1)
  7890.         font_id = Iif(fontnum = 0, '0', Alltrim(Str(fontnum)))
  7891. *********** FONT features
  7892.         _fontstyle = This.fontstyleconvert(.fontstyle)
  7893.         LOCAL lnBorder
  7894.         lnBorder = 8
  7895.             lcRTF = lcRTF + '{\shp{\*\shpinst'+;
  7896.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  7897.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  7898.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft+nwidth+lnBorder)))+;
  7899.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop+nheight+lnBorder)))+;
  7900.                 '\shpfhdr0' + ;
  7901.                 '{\sp{\sn fline}{\sv 0}}'+;
  7902.                 '{\sp{\sn dxTextLeft}{\sv 0}}'+;
  7903.                 '{\sp{\sn dyTextTop}{\sv 0}}'+;
  7904.                 '{\sp{\sn dxTextRight}{\sv 0}}'+;
  7905.                 '{\sp{\sn dyTextBottom}{\sv 0}}'+;
  7906.                 '{\sp{\sn fFilled}{\sv 0}}'+;
  7907.                 '{\sp{\sn fFitShapeToText}{\sv 1}}'+;
  7908.                 lcWrapText + ;
  7909.                 '{ \shptxt\pard' + _fontstyle + '\f' + m.font_id + '\fs' + Alltrim(Str(.FontSize*2))+;
  7910.                 _allg + lcColorTag + .Expr + ' '+'}}}'
  7911. ***********************************************************
  7912. * Line
  7913. ***************************************************************
  7914.     Case _tForceObjectType == OBJ_LINE OR (_tForceObjectType==-1 AND .ObjType = OBJ_LINE)
  7915.         lcpensize = Alltrim(Str(9525*.pensize))
  7916.         * CChalom 2010-01-21
  7917.         * Included color tags for "Lines"
  7918.         LOCAL lcPenColor, lcFillColor
  7919.         IF .PenRed <> -1 && Not default
  7920.             lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.PenRed, .PenGreen, .PenBlue)) + '}}'
  7921.         ELSE 
  7922.             lcPenColor = ""
  7923.         ENDIF 
  7924.         *---
  7925.         If _tForceLineOfset == 1 OR (_tForceLineOfset==-1 AND .offset = 1) && horizontal
  7926.             lcRTF = '{\shp{\*\shpinst'+;
  7927.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  7928.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  7929.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft+nwidth)))+;
  7930.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  7931.                 '\shpfhdr0'+;
  7932.                 '{\sp{\sn fline}{\sv 1}}' + '{\sp{\sn ShapeType}{\sv 20}}'+;
  7933.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  7934.                 lcPenColor + ;
  7935.                 '}}'
  7936.         ELSE && Vertical
  7937.             lcRTF = '{\shp{\*\shpinst' + ;
  7938.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft+nwidth)))+;
  7939.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  7940.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft+nwidth)))+;
  7941.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop+nheight)))+;
  7942.                 '\shpfhdr0' + ;
  7943.                 '{\sp{\sn fline}{\sv 1}}' + '{\sp{\sn ShapeType}{\sv 20}}'+;
  7944.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  7945.                 lcPenColor + ;
  7946.                 '}}'
  7947.         Endif
  7948.     * Shape
  7949.     Case _tForceObjectType == OBJ_RECTANGLE OR (_tForceObjectType==-1 AND .ObjType = OBJ_RECTANGLE) && Rectangle, Box
  7950.         *!* --------------------------------------------------------
  7951.         *!* --------------------------------------------------------
  7952.         *!* --------------------------------------------------------
  7953.         *!* 2011-08-12 - Jacques Parent
  7954.         *!* Let boxes be printed correctly on multiple lines
  7955.         *!* Not sure how it would react with rounded corners...
  7956.         IF nobjectcontinuationtype == 0 OR (.FillPat = 1 AND .Mode = 0)
  7957.             *!* Either the continuation is COMPLETE (0) OR the box must be filled.
  7958.             lcpensize = Alltrim(Str(9525*.pensize))
  7959.             * CChalom 2010-01-21
  7960.             * Included color tags for "Shapes"
  7961.             LOCAL lcPenColor, lcFillColor
  7962.             IF nobjectcontinuationtype == 0 
  7963.                 If .PenRed = -1
  7964.                     IF .PenPat = 0
  7965.                         lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(255, 255, 255)) + '}}'
  7966.                     ELSE 
  7967.                         lcPenColor = ""
  7968.                     ENDIF 
  7969.                 ELSE
  7970.                     lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.PenRed, .PenGreen, .PenBlue)) + '}}'
  7971.                 ENDIF 
  7972.             ELSE
  7973.                 *!* Set the pen color to the fill color!
  7974.                 IF .FillRed = -1 
  7975.                     IF .PenPat = 0
  7976.                         lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(255, 255, 255)) + '}}'
  7977.                     ELSE 
  7978.                         lcPenColor = ""
  7979.                     ENDIF 
  7980.                 ELSE 
  7981.                     lcPenColor = '{\sp{\sn lineColor}{\sv ' + TRANSFORM(RGB(.FillRed, .FillGreen, .FillBlue)) + '}}'
  7982.                 ENDIF 
  7983.             ENDIF
  7984.             IF .FillPat = 1 AND (.Mode = 0 OR .FillRed <> -1) && Mode: 0 = Opaque background; 1 = Transparent
  7985.                 LOCAL lnRGB
  7986.                 IF .FillRed = -1 
  7987.                     lnRGB = RGB(255,255,255)
  7988.                 ELSE 
  7989.                     lnRGB = RGB(.FillRed, .FillGreen, .FillBlue)
  7990.                 ENDIF 
  7991.                 lcFillColor = '{\sp{\sn fillColor}{\sv ' + TRANSFORM(lnRGB) + '}}' + ;
  7992.                     '{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fFilled}{\sv 1}}'
  7993.             ELSE 
  7994.                 lcFillColor = ""
  7995.             ENDIF 
  7996.             *---
  7997.             * CChalom 2010-07-20
  7998.             * Included code for generic rounded shapes
  7999.             LOCAL lcRounded
  8000.             lcRounded = IIF(.OffSet = 0, ;
  8001.                 "", ;
  8002.                 '{\sp{\sn shapeType}{\sv 2}}')
  8003.             * Not used, allows setting the curvature parameter, change the value 40
  8004.             * lcRounded = IIF(.OffSet = 0, ;
  8005.                 "", ;
  8006.                 '{\sp{\sn shapeType}{\sv 2}}' + ;
  8007.                 '{\sp{\sn adjustValue}{\sv ' + ALLTRIM(TRANSFORM(.OffSet * 40)) + '}}')
  8008.             lcRTF = '{\shp{\*\shpinst' + ;
  8009.                 '\shpleft' + Alltrim(Str(This.FrxToTwips(nleft)))+;
  8010.                 '\shptop' + Alltrim(Str(This.FrxToTwips(ntop)))+;
  8011.                 '\shpright' + Alltrim(Str(This.FrxToTwips(nleft + nwidth)))+;
  8012.                 '\shpbottom' + Alltrim(Str(This.FrxToTwips(ntop + nheight)))+;
  8013.                 '\shpfhdr0' + ;
  8014.                 '\shpbxmargin' + ;
  8015.                 '\shpbxignore' + ;
  8016.                 '\shpbymargin' + ;
  8017.                 '\shpbyignore' + ;
  8018.                 lcRounded + ;
  8019.                 '{\sp{\sn fline}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}'+;
  8020.                 '{\sp{\sn lineWidth}{\sv ' + lcpensize + '}}'+;
  8021.                 lcFillColor + ;
  8022.                 lcPenColor + ;
  8023.                 '}}'
  8024.         ENDIF
  8025.         IF !EMPTY(lcRTF)
  8026.             = Fputs(This.handle, lcRTF)
  8027.             lcRTF = ""
  8028.         ENDIF
  8029.         *!* In case there is a continuation <> 0...
  8030.         DO CASE
  8031.             CASE nobjectcontinuationtype == 1    && Top
  8032.                 *!* Translate into lines
  8033.                 ** Top line
  8034.                 This.RenderRTF(loFRXrecord, nleft, ntop, nwidth, 0, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstHorizontalLine)
  8035.                 ** Left line
  8036.                 This.RenderRTF(loFRXrecord, nleft, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8037.                 ** Right line
  8038.                 This.RenderRTF(loFRXrecord, nleft + nwidth, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8039.             CASE nobjectcontinuationtype == 2    && Middle
  8040.                 *!* Translate into lines
  8041.                 ** Left line
  8042.                 This.RenderRTF(loFRXrecord, nleft, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8043.                 ** Right line
  8044.                 This.RenderRTF(loFRXrecord, nleft + nwidth, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8045.             CASE nobjectcontinuationtype == 3    && Bottom
  8046.                 *!* Translate into lines
  8047.                 ** Bottom line
  8048.                 This.RenderRTF(loFRXrecord, nleft, ntop + nheight, nwidth, 0, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstHorizontalLine)
  8049.                 ** Left line
  8050.                 This.RenderRTF(loFRXrecord, nleft, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8051.                 ** Right line
  8052.                 This.RenderRTF(loFRXrecord, nleft + nwidth, ntop, 0, nheight, nobjectcontinuationtype, ccontentstoberendered, gdiplusimage, OBJ_LINE, tnConstVerticalLine)
  8053.         ENDCASE
  8054.         *!* --------------------------------------------------------
  8055.         *!* --------------------------------------------------------
  8056.         *!* --------------------------------------------------------
  8057.     Case _tForceObjectType == OBJ_PICTURE OR (_tForceObjectType == -1 AND .ObjType = OBJ_PICTURE)
  8058.         LOCAL hdPict, strFile, lnFileSize, lhFile, objPict,;
  8059.             lnPictWidth, lnPictHeight, lnWidth, lnHeight, llLock, lncropr, lncropb
  8060.         * CChalom 2010-01-17
  8061.         * Dealing with images in General fields
  8062.         * Saving the image to the disk in a Temp file
  8063.         * Using _Gdiplus.vcx that is already embedded in ReportOutput.App
  8064.         LOCAL lcTempImgFile
  8065.         IF GDIPlusImage!=0 && General field
  8066.             lcTempImgFile = GetEnv("TEMP") + "\" + Sys(2015) + ".Png"
  8067.             LOCAL loImage AS GpImage OF (HOME() + _ReportOutput)
  8068.             loImage = NEWOBJECT("GpImage", "_GdiPlus.vcx")
  8069.             loImage.SetHandle(GDIPlusImage)
  8070.             loImage.SaveToFile(lcTempImgFile,"image/jpeg")
  8071.             loImage = NULL
  8072.             * Replace the original empty file
  8073.             cContentsTobeRendered = lcTempImgFile
  8074.         ENDIF 
  8075.         IF EMPTY(GDIPlusImage) AND EMPTY(cContentsTobeRendered) && Nothing to render
  8076.                     && try drawing directly, from the original canvas
  8077.             lcTempImgFile = This.GetPictureFromListener(nLeft, nTop, nWidth, nHeight)
  8078.             cContentsTobeRendered = lcTempImgFile
  8079.         ENDIF
  8080.         *---
  8081.         IF NOT EMPTY(cContentsTobeRendered) AND FILE(cContentsTobeRendered)
  8082.             * Picture size
  8083.             lcExt = JUSTEXT(cContentsTobeRendered)
  8084.             * CChalom 2010-02-19
  8085.             * Changed the way to get the image dimensions and load its binaries
  8086.             LOCAL lnWidth, lnHeight
  8087.             LOCAL loVFPImg as Image
  8088.             loVFPImg = CREATEOBJECT("Image")
  8089.             loVFPImg.Picture = cContentsTobeRendered
  8090.             lnWidth = loVFPImg.Width * 7276 / 275
  8091.             lnHeight = loVFPImg.Height * 7276 / 275
  8092.             loVFPImg = NULL
  8093.             lnPictWidth = This.HiMetricToRTF(lnWidth)
  8094.             lnPictHeight = This.HiMetricToRTF(lnHeight)
  8095.             strFile = FILETOSTR(cContentsTobeRendered)
  8096.             CLEAR RESOURCES (cContentsTobeRendered)
  8097.             lhFile = STRCONV(strFile, 15)
  8098.             DO CASE
  8099.             CASE .General = 0        && Clip
  8100.                     llLock = 1
  8101.                     lnWidth = MIN(nWidth, lnPictWidth)
  8102.                     lnHeight = MIN(nHeight, lnPictHeight)
  8103.                     lncropr = This.DecToProc(MAX(lnPictWidth - nWidth, 0)/lnPictWidth)
  8104.                     lncropb = This.DecToProc(MAX(lnPictHeight - nHeight, 0)/lnPictHeight)
  8105.             CASE .General = 1    && Isometric
  8106.                     llLock = 1
  8107.                     * Isometric Adjustment
  8108.                     LOCAL lnHorFactor, lnVertFactor, lnResizeFactor
  8109.                     m.lnHorFactor = m.nWidth / m.lnPictWidth
  8110.                     m.lnVertFactor = m.nHeight / m.lnPictHeight
  8111.                     m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  8112.                     m.lnWidth = m.lnPictWidth * m.lnResizeFactor
  8113.                     m.lnHeight = m.lnPictHeight * m.lnResizeFactor
  8114.                     * lnWidth  = MIN(nWidth, lnPictWidth)
  8115.                     * lnHeight = MIN(nHeight, lnPictHeight)
  8116.                     lncropb = 0
  8117.                     lncropr = 0
  8118.             CASE .General = 2    && Stretch
  8119.                     llLock = 0
  8120.                     lnWidth = nWidth
  8121.                     lnHeight = nHeight
  8122.                     lncropb = 0
  8123.                     lncropr = 0
  8124.             ENDCASE
  8125.                     
  8126.             lcRTF = '{\shp{\*\shpinst' + ;
  8127.                     '\shpleft'+Alltrim(Str(This.FrxToTwips(nleft)))+;
  8128.                     '\shptop'+Alltrim(Str(This.FrxToTwips(ntop)))+;
  8129.                     '\shpright'+Alltrim(Str(This.FrxToTwips(nleft+lnWidth)))+;
  8130.                     '\shpbottom'+Alltrim(Str(This.FrxToTwips(ntop+lnHeight)))+;
  8131.                     '{\sp{\sn ShapeType}{\sv 75}}'+;
  8132.                     '{\sp{\sn fline}{\sv 0}}'+;
  8133.                     '{\sp{\sn fLockAspectRatio}{\sv '+STR(llLock,1)+'}}'+;
  8134.                     '{\sp{\sn cropFromBottom}{\sv '+ALLTRIM(STR(lncropb))+'}}'+;
  8135.                     '{\sp{\sn cropFromRight} {\sv '+ALLTRIM(STR(lncropr))+'}}'+;
  8136.                     '{\sp{\sn pib}' + ;
  8137.                     '{\sv ' + ;
  8138.                     '{\pict' + ;
  8139.                     '\wmetafile8\pic' + lcExt + '\picbpp4' + CHR(13)+;
  8140.                     lhFile +'}'+;
  8141.                     '}' + ;
  8142.                     '}' +  ;
  8143.                     '{\sp{\sn pibFlags}{\sv 2}}' + ;
  8144.                     '{\sp{\sn fUseShapeAnchor}{\sv 0}}' + ;
  8145.                     '}}'
  8146.         ENDIF
  8147.         IF NOT EMPTY(lcTempImgFile)
  8148.             TRY
  8149.                 DELETE FILE(lcTempImgFile)
  8150.             CATCH TO loExc
  8151.                 SET STEP ON 
  8152.             ENDTRY 
  8153.         ENDIF 
  8154.     OTHERWISE 
  8155.         SET STEP ON 
  8156.     Endcase
  8157. ***************
  8158. ENDWITH
  8159. IF !EMPTY(lcRTF)
  8160.     = Fputs(This.handle, lcRTF)
  8161. ENDIF
  8162. ENDPROC
  8163. PROCEDURE getpageimg
  8164. #DEFINE OutputJPEG     102
  8165. #DEFINE OutputPNG     104
  8166. LOCAL loListener as ReportListener 
  8167. loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  8168. LOCAL lnPage
  8169. lnPage = This.nCurrentPage - loListener.CommandClauses.RangeFrom + 1
  8170. DIMENSION This.aPagesImgs(lnPage)
  8171. IF EMPTY(This.aPagesImgs(lnPage))
  8172.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  8173.     lnDeviceType = OutputPNG
  8174.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".PNG"
  8175.     loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  8176.     This.aPagesImgs(lnPage) = lcFile
  8177. ENDIF 
  8178. RETURN This.aPagesImgs(lnPage)
  8179. ENDPROC
  8180. PROCEDURE getpicturefromlistener
  8181. *!* 2011/02/25 CChalom
  8182. *!* When we can't render the PDF text or image correctly, we still can get 
  8183.         * an image of the object, and draw it to the PDF document
  8184. LPARAMETERS tnX, tnY, tnWidth, tnHeight
  8185. IF This.lDefaultMode
  8186.     RETURN
  8187. ENDIF
  8188. LOCAL lcFile
  8189. lcFile = This.GetPageImg()
  8190. IF EMPTY(lcFile)
  8191.     RETURN .F. && Could not load image
  8192. ENDIF 
  8193. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  8194. LOCAL lnHor, lnVert
  8195. lnHor  = 9.972
  8196. lnVert = 9.996
  8197. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, .T.)
  8198. RETURN lcNewFile
  8199. ENDPROC
  8200. PROCEDURE cropimage
  8201. Lparameters lcFile As String, tnX, tnY, lnWidth As Integer, lnHeight As Integer, tlFile
  8202. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  8203. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  8204. loBmp.CreateFromFile(lcFile)
  8205. lnHeight = MIN(lnHeight, loBmp.ImageHeight)
  8206. lnWidth  = MIN(lnWidth , loBmp.ImageWidth)
  8207. LOCAL lhBitmap, lnStatus
  8208. lhBitmap = 0
  8209. * Function used in the CropImage method
  8210. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  8211. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, lnWidth, lnHeight, loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  8212. IF (lnStatus <> 0) OR (lhBitmap = 0)
  8213.     loBmp = NULL
  8214.     * lnHandle = 0
  8215.     RETURN ""
  8216. ENDIF 
  8217. LOCAL loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  8218. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  8219. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  8220. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  8221. LOCAL lcEXT, lcEncoder
  8222. lcEXT = UPPER(JUSTEXT(lcFile))
  8223. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  8224. LOCAL lcCroppedFile
  8225. lcCroppedFile = FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  8226. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  8227. loCropped = NULL
  8228. loBMP     = NULL
  8229. This.oImages.Add(lcCroppedFile)
  8230. RETURN lcCroppedFile
  8231. ENDPROC
  8232. PROCEDURE updateproperties
  8233. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  8234.     RETURN
  8235. ENDIF 
  8236. LOCAL loFP
  8237. loFP = _Screen.oFoxyPreviewer
  8238. IF VARTYPE(This.CommandClauses) = "O"
  8239.     *!*    IF This.CommandClauses.Preview
  8240.     *!*        This.lOpenViewer = .T.
  8241.     *!*    ELSE 
  8242.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  8243.     *!*    ENDIF
  8244.     This.lOpenViewer = This.CommandClauses.Preview
  8245.     IF NOT EMPTY(This.CommandClauses.ToFile)
  8246.         This.TargetFileName = This.CommandClauses.ToFile
  8247.     ELSE 
  8248.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  8249.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  8250.                 EMPTY(This.TargetFileName)
  8251.             LOCAL lcDestFile
  8252.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  8253.             IF NOT "\" $ lcDestFile
  8254.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  8255.             ENDIF
  8256.             This.TargetFileName = lcDestFile
  8257.         ELSE
  8258.             LOCAL lcFile
  8259.             lcFile = This.TargetFileName
  8260.             IF EMPTY(lcFile)
  8261.                 lcFile = PUTFILE("","","rtf")
  8262.             ENDIF
  8263.             IF EMPTY(lcFile)
  8264.                 _ReportListener::CancelReport()
  8265.                 * This.CancelReport()
  8266.                 RETURN .F.
  8267.             ENDIF
  8268.             This.TargetFileName = lcFile
  8269.         ENDIF
  8270.     ENDIF 
  8271. ENDIF
  8272. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  8273. IF VARTYPE(This.CommandClauses) = "O"
  8274.     IF This.CommandClauses.Preview
  8275.         This.lOpenViewer = .T.
  8276.     ENDIF 
  8277.     IF NOT EMPTY(This.CommandClauses.ToFile)
  8278.         This.TargetFileName = This.CommandClauses.ToFile
  8279.     ENDIF 
  8280. ENDIF
  8281. ENDPROC
  8282. PROCEDURE stringfromunicode
  8283. LPARAMETERS tcUnicode
  8284.     LOCAL n, lcUNValue, lnUNValue, lcNewContents
  8285.     lcUnValue     = ""
  8286.     lcNewContents = ""
  8287. *   {\uc1\u20013 ?\u25991 ?\u31616 ?\u20307 ?\u27721 ?\u23383 ?-\u28436 ?\u31034 ?-Demo}
  8288. YE_-Demo    
  8289. *                .Expr = STRCONV(cContentsToBeRendered,6)
  8290. *                .Expr = STRTRAN(.Expr, CHR(13) + CHR(10), "<_CR_>")
  8291. *                .Expr = STRTRAN(.Expr, CHR(13), "<_CR_>")
  8292. *                .Expr = STRTRAN(.Expr, CHR(10), "<_CR_>")
  8293. *                .Expr = STRTRAN(.Expr, "<_CR_>", " \par ")
  8294.     LOCAL lnChars
  8295.     lnChars = LEN(tcUnicode)
  8296.     FOR n = 1 TO lnChars STEP 2
  8297.         lcUNValue = SUBSTR(tcUnicode, n, 2)
  8298.         IF EMPTY(lcUNValue)
  8299.             EXIT
  8300.         ENDIF
  8301.         lnUNValue = CTOBIN(0h+lcUNValue,"2RS")
  8302.         IF lnUNValue = 10 && Carriage return - CHR(10)
  8303.             lcNewContents = lcNewContents + " \par "
  8304.             LOOP 
  8305.         ENDIF 
  8306.         lcNewContents = lcNewContents + '\u' + ALLTRIM(TRANSFORM(lnUNValue)) + ' ?'
  8307.     ENDFOR
  8308. RETURN lcNewContents
  8309. ENDPROC
  8310. PROCEDURE Destroy
  8311. IF This.lDefaultMode 
  8312.     DODEFAULT()
  8313. ENDIF
  8314. ENDPROC
  8315. PROCEDURE AfterReport
  8316. IF This.lDefaultMode OR This.lObjTypeMode
  8317.     DODEFAULT()
  8318. ELSE 
  8319.     NODEFAULT 
  8320. ENDIF 
  8321. * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  8322. IF This.lObjTypeMode
  8323.     TRY 
  8324.         This.WaitForNextReport = This.CommandClauses.NoPageEject
  8325.     CATCH
  8326.     ENDTRY 
  8327. ENDIF 
  8328. ** Save the document to RTF
  8329. IF NOT This.WaitForNextReport 
  8330.     =FPUTS(This.Handle, '}')
  8331.     LOCAL llSaved
  8332.     llSaved = FCLOSE(This.Handle)
  8333.     IF llSaved
  8334.         IF This.lObjTypeMode
  8335.             _Screen.oFoxyPreviewer.lSaved = llSaved
  8336.         ENDIF
  8337.         IF This.lOpenViewer 
  8338.             This.ShellExec(This.TargetFileName)
  8339.         ENDIF 
  8340.     ENDIF 
  8341. ENDIF 
  8342. * CChalom
  8343. * Reset the report page counter
  8344. This.nPgCounter = 0
  8345. * Delete the pages files
  8346. LOCAL n, lcFile
  8347. FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  8348.     lcFile = This.aPagesImgs(m.n)
  8349.     IF NOT EMPTY(lcFile)
  8350.         TRY 
  8351.             DELETE FILE (lcFile)
  8352.         CATCH
  8353.         ENDTRY
  8354.     ENDIF
  8355. ENDFOR
  8356. IF VARTYPE(This.oImages) = "O" && Cleanup Temporary Images Files
  8357.     LOCAL lcItem AS String
  8358.     FOR EACH lcItem IN This.oImages FOXOBJECT
  8359.         IF FILE(lcItem)
  8360.             LOCAL loExc as Exception 
  8361.             TRY
  8362.                 DELETE FILE (lcItem)
  8363.             CATCH TO loExc
  8364.                 SET STEP ON 
  8365.             ENDTRY
  8366.         ENDIF
  8367.     ENDFOR 
  8368.     This.oImages = NULL
  8369. ENDIF
  8370. This.oActiveListener = ""
  8371. * Delete the temporary copy of the FRX we created
  8372. IF This.lObjTypeMode OR This.lDefaultMode 
  8373.     USE IN SELECT(This.cFRXalias)
  8374.     TRY 
  8375.         DELETE FILE (This.cTempFRX)
  8376.     CATCH
  8377.     ENDTRY
  8378. ENDIF 
  8379. ENDPROC
  8380. PROCEDURE Render
  8381. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  8382. LOCAL lnPageNo
  8383. lnPageNo = This.PageNo
  8384. IF This.lDefaultMode 
  8385.     * CChalom 2010-01-25
  8386.     * If the report page is not between the page ranges asked, just skip
  8387.     LOCAL lnRangeTo, tlNewPage
  8388.     tlNewPage = .F.
  8389.     IF This.PageNo > This.nGlobalPgCounter OR This.nPgCounter = 0
  8390.         This.nPgCounter = This.nPgCounter + 1
  8391.         This.nGlobalPgCounter = This.nGlobalPgCounter + 1
  8392.         tlNewPage = .T.
  8393.     ENDIF
  8394.     lnRangeTo = This.CommandClauses.RangeTo
  8395.     IF lnRangeTo <> -1 AND NOT BETWEEN(This.nPgCounter, This.CommandClauses.RangeFrom, lnRangeTo)
  8396.         IF tlNewPage
  8397.             This.OldPageNo = This.PageNo &&_PageNo 
  8398.         ENDIF 
  8399.         NODEFAULT 
  8400.         RETURN 
  8401.     ENDIF 
  8402.     * Moved the page change to the render method
  8403.     If This.OldPageNo != This.PageNo &&_PageNo 
  8404.         This.OldPageNo = This.PageNo &&_PageNo 
  8405.         IF This.lStarted && add a new page only if the report has already started
  8406.             = Fputs(This.handle,'\page')
  8407.         ENDIF 
  8408.     Endif
  8409.     This.nCurrentPage = This.PageNo
  8410. ELSE 
  8411.     If This.OldPageNo != PAGE 
  8412.         This.OldPageNo = PAGE 
  8413.         IF This.lStarted && add a new page only if the report has already started
  8414.             = Fputs(This.handle,'\page')
  8415.         ENDIF 
  8416.     Endif
  8417.     This.nCurrentPage = PAGE
  8418. ENDIF 
  8419. * From PDFx by Luis Navas
  8420. * Code to detect if report will run twice because of use of _PAGETOTAL
  8421. If This.TwoPassProcess And This.CurrentPass=0 Then
  8422.     NODEFAULT 
  8423.     RETURN 
  8424. EndIf
  8425. This.lStarted = .T.
  8426. IF This.lDefaultMode 
  8427.     This.loFRXRecord = This.Getfrxrecord(nFRXRecno)
  8428. ELSE 
  8429.     LOCAL loFRX
  8430.     SCATTER MEMO NAME loFRX 
  8431.     This.loFRXRecord = loFRX
  8432. ENDIF 
  8433. * Here is calling to RTF output
  8434. This.RenderRTF(This.loFRXRecord, nLeft, nTop, nWidth, nHeight, ;
  8435.         nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  8436. * CChalom 2010-01-17
  8437. * No need to call the default render event, because we'll passing everything to RTF
  8438. NODEFAULT
  8439. ENDPROC
  8440. PROCEDURE BeforeReport
  8441. IF This.lDefaultMode OR This.lObjTypeMode
  8442.     This.oActiveListener = This
  8443.     DODEFAULT()
  8444. ENDIF
  8445. This.PageSetup()
  8446. This.RTF_Create()
  8447. ENDPROC
  8448. PROCEDURE Init
  8449. LPARAMETERS tcRTFFileName
  8450. IF VARTYPE(tcRTFFileName) = "C" AND FILE(tcRTFFileName)
  8451.     DELETE FILE(tcRTFFileName)
  8452. ENDIF
  8453. This.TargetFileName = tcRTFFileName
  8454. This.nPgCounter = 0
  8455. IF This.lDefaultMode OR This.lObjTypeMode
  8456.     DODEFAULT()
  8457. ELSE 
  8458.     NODEFAULT 
  8459. ENDIF 
  8460. ENDPROC
  8461. PROCEDURE LoadReport
  8462. This.UpdateProperties()
  8463. DODEFAULT()
  8464. ENDPROC
  8465. reportlistener
  8466. pr_reportlistener.vcx
  8467. Height = 23
  8468. Width = 23
  8469. FRXDataSession = -1
  8470. SendGDIPlusImage = 1
  8471. paper_letter = .F.
  8472. handle = 
  8473. code_page = 1251
  8474. oldpageno = 1
  8475. borderwidth = 0
  8476. lofrxrecord = .NULL.
  8477. waitfornextreport = .F.
  8478. npgcounter = 0
  8479. nglobalpgcounter = 0
  8480. orecord = .NULL.
  8481. targetfilename = 
  8482. lstarted = .F.
  8483. _llandscape = .F.
  8484. npagewidth = 0
  8485. npageheight = 0
  8486. ldefaultmode = .T.
  8487. nmarginleft = 0
  8488. nmarginright = 0
  8489. nmargintop = 0
  8490. nmarginbottom = 0
  8491. ncurrentpage = 0
  8492. oactivelistener = .NULL.
  8493. _ctempfolder = 
  8494. oimages = .NULL.
  8495. lobjtypemode = .F.
  8496. lopenviewer = .F.
  8497. ctempfrx = 
  8498. cfrxalias = 
  8499. _memberdata = 
  8500.      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
  8501. Name = "rtfreportlistener"
  8502. The enhanced reporting experience provided by FoxyPreviewer can't run because there are no printers installed on this computer.C
  8503. Please install a printer and try again!
  8504. Install a printer
  8505. WScript.Shell
  8506. rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
  8507. Fixedv
  8508. RELEASE
  8509. FoxypreviewerPath
  8510. FoxypreviewerPath
  8511. FoxypreviewerOrigPreview
  8512. FoxypreviewerOrigPreview
  8513. FoxypreviewerOrigOutput
  8514. FoxypreviewerOrigOutput
  8515. FoxypreviewerOrigReportBehavior
  8516. FoxypreviewerOrigReportBehaviorC
  8517. ReportBehaviorv
  8518. _oReportOutput("1")b
  8519. _oReportOutput("0")b
  8520. _oReportOutput("10")b
  8521. _oReportOutput("11")b
  8522. _oReportOutput("12")b
  8523. _oReportOutput("13")b
  8524. _oReportOutput("14")b
  8525. _oReportOutput("14")b
  8526. FOXYPREVIEWERC
  8527. FoxypreviewerOrigPreview
  8528. PR_FRXOUTPUTC
  8529. FoxypreviewerOrigOutput
  8530. SET REPORTBEHAVIOR &lcRepBehavior.
  8531. FoxypreviewerOrigReportBehavior
  8532. oFoxyPreviewer
  8533. _oLang
  8534. oFoxyPreviewer
  8535. SET FIXED &lcSetFixed.
  8536. _ReportListener
  8537. pr_ReportListener
  8538. _GdiPlus
  8539. Datasessionv
  8540. FoxyInitForm
  8541. PreviewHelper
  8542. REPORTLISTENER
  8543. EXTENSIONHANDLER
  8544. PR_FRXPreview.Prg
  8545. FOXYLISTENER
  8546. PR_ReportListener.vcx
  8547. FOXYLISTENER
  8548. ExtensionHandler
  8549. LOPREVIEWCONTAINER
  8550. LCTYPE
  8551. GAPRINTERS
  8552. LOSHELL
  8553. LCSETFIXED
  8554. LCSYS16
  8555. LCLOCALPATH    
  8556. LLRELEASE
  8557. ADDPROPERTY
  8558. _FOXYPDF
  8559. _FOXYPDFASIMAGE
  8560. _FOXYRTF    
  8561. _FOXYHTML
  8562. _FOXYXLS
  8563. _OREPORTOUTPUT
  8564. PREVIEWCONTAINER
  8565. LOEXC
  8566. REMOVE
  8567. FOXYPREVIEWERORIGPREVIEW
  8568. FOXYPREVIEWERORIGOUTPUT
  8569. LCREPBEHAVIOR
  8570. FOXYPREVIEWERORIGREPORTBEHAVIOR
  8571. _FOXYHTML2
  8572. OFOXYPREVIEWER
  8573. _OLANG
  8574. DESTROY
  8575. CLEARSETPROC
  8576. CLEARSETCLASSLIB
  8577. LOHELPER
  8578. LNDATASESSION
  8579. LNSELECT
  8580. LNRECNO
  8581. LOHELPERFORM    
  8582. LNSELECT0    
  8583. _GOHELPER    
  8584. LEXTENDED
  8585. LOLISTENER
  8586. LOEXHANDLER
  8587. LCPREVIEWAPP
  8588. LISTENERTYPE    
  8589. QUIETMODE
  8590. LQUIETMODE
  8591. FXFEEDBACKCLASS
  8592. _CTHERMCLASS
  8593. LEXPANDFIELDS
  8594. _OEXHANDLER
  8595. UPDATEPROPERTIES
  8596. SETEXTENSIONHANDLER
  8597. SETZOOMLEVEL
  8598. NZOOMLEVEL
  8599. SETCANVASCOUNT
  8600. NCANVASCOUNTK
  8601. TLVALUE
  8602. OFOXYPREVIEWER
  8603. LPRINTED
  8604. THISK
  8605. TLVALUE
  8606. OFOXYPREVIEWER
  8607. LSAVED
  8608. THISK
  8609. TLVALUE
  8610. OFOXYPREVIEWER
  8611. LEMAILED
  8612. THISK
  8613. TCDESTFILE
  8614. OFOXYPREVIEWER    
  8615. CDESTFILE
  8616. THISy
  8617. RETURN &lcEncrProc.(m.tcString)
  8618. TCSTRING
  8619. LCENCRPROC
  8620. CENCRYPTPROCEDURE
  8621. CCRYPTKEYy
  8622. RETURN &lcDecrProc.(m.tcString)
  8623. TCSTRING
  8624. LCDECRPROC
  8625. CDECRYPTPROCEDURE
  8626. CCRYPTKEY
  8627. STRING
  8628. STRING
  8629. STRING
  8630. ShellExecute
  8631. SHELL32.Dll
  8632. FindWindow
  8633. WIN32API
  8634. Could not locate the file or link: C
  8635. Internal error
  8636. TCLINK
  8637. TCACTION
  8638. TCPARMS    
  8639. LLSUCCESS
  8640. SHELLEXECUTE
  8641. SHELL32
  8642. FINDWINDOW
  8643. WIN32API
  8644. _LALREADYOPENED
  8645. CAPTION
  8646. _Screen.oFoxyPreviewer.
  8647. This.&lcProperty. = m.luValue
  8648. Error in method 'UpdateProperties'C
  8649. Line: 
  8650. LNPROPS
  8651. LCPROPERTY
  8652. LUVALUE
  8653. OFOXYPREVIEWER
  8654. LAPROPS
  8655. LOEXC
  8656. ERRORNO
  8657. MESSAGE
  8658. LINENO
  8659. LINECONTENTS
  8660. Udfparmsv
  8661. Images
  8662. _GDIPLUS.VCXC
  8663. Classlibv
  8664. _GdiPlus.vcx
  8665. PR_REPORTLISTENER.VCXC
  8666. Classlibv
  8667. PR_ReportListener.vcx
  8668. PR_FRXOUTPUT
  8669. _GDIPLUS.VCXC
  8670. Classlibv
  8671. _GdiPlus.vcx
  8672. PR_REPORTLISTENER.VCXC
  8673. Classlibv
  8674. PR_ReportListener.vcx
  8675. PR_FRXOUTPUT
  8676. FoxypreviewerPath
  8677. Pathv
  8678. libhpdf.dll
  8679. INITSTATUS
  8680. PREPSTATUS
  8681. RUNSTATUS
  8682. SECONDS
  8683. CANCELINST
  8684. CANCELQUER
  8685. REPINCOMPL
  8686. ATTENTION
  8687. TLLOCAL
  8688. _SETUDFPARMS
  8689. CERRORS    
  8690. STARTMODE
  8691. LCPATH
  8692. CLASSLIBRARY
  8693. PR_REPORTLISTENER
  8694. LCLOCALFOXYPATH
  8695. FOXYPREVIEWERPATH    
  8696. LEXTENDED    
  8697. _GOHELPER
  8698. LCCLASSPATH    
  8699. LCPDFFILE
  8700. LCTESTPATH
  8701. PR_PATHFILEEXISTS
  8702. _SYS16
  8703. UPDATESETTINGS
  8704. _INITSTATUSTEXT
  8705. GETLOC
  8706. _PREPASSSTATUSTEXT
  8707. _RUNSTATUSTEXT
  8708. _SECONDSTEXT
  8709. _CANCELINSTRTEXT
  8710. _CANCELQUERYTEXT
  8711. _REPORTINCOMPLETETEXT
  8712. _ATTENTIONTEXTr
  8713. FoxypreviewerPath
  8714. FoxyPreviewer_Settings.dbf
  8715. FoxyPreviewer_DefaultSettings.dbf
  8716. _Screen.oFoxyPreviewer._cLocalPathb
  8717. Safetyv
  8718. SET SAFETY &lcSetSafety.
  8719. .Property
  8720. Value
  8721. IF VARTYPE(This.&lcProp.) = [U]        
  8722. _Screen.oFoxyPreviewer.
  8723. This.&lcProp. = m.luValue
  8724. Could not locate the settings table.C
  8725. Please check the folder permissions of the folder where you saved 'FoxyPreviewer.App', because this utility needs Read/Write permission in that folder.
  8726. You may need to move the APP from that folder.
  8727. Loading default preview settings
  8728. Error in UpdateSettingsC
  8729. Line: 
  8730. .F..F..F..F..F..F..F.
  8731. TLINSESSION
  8732. LCLOCALFOXYPATH
  8733. FOXYPREVIEWERPATH
  8734. LCCLASSPATH
  8735. LCFILE
  8736. LCUSERSETFILE
  8737. LCDEFAULTSETFILE    
  8738. LCNEWFILE
  8739. CLASSLIBRARY    
  8740. LEXTENDED
  8741. OFOXYPREVIEWER
  8742. _CLOCALPATH
  8743. PR_PATHFILEEXISTS    
  8744. PR_CPZERO
  8745. LCSETSAFETY
  8746. LNSELECT
  8747. LCALIAS
  8748. _SETTINGSFILE
  8749. LCPROP
  8750. LCTYPE
  8751. LUVALUE
  8752. LUVALUE2
  8753. LOEXC
  8754. ERRORNO
  8755. SETERROR
  8756. MESSAGE
  8757. LINENO
  8758. LINECONTENTS
  8759. LSAVEASIMAGE
  8760. LSAVEASPDF
  8761. LSAVEASRTF
  8762. LSAVEASXLS
  8763. LSAVEASHTML
  8764. LSAVEASTXT
  8765. LSAVEASMHT
  8766. LSAVETOFILE
  8767. FXTHERM
  8768. FOXYTHERM
  8769. TNTYPE
  8770. LCTHERMCLASS
  8771. _CTHERMCLASS
  8772. NTHERMTYPE
  8773. ENGLISH
  8774. ESPANIOL
  8775. SPANISH
  8776. TCLANGUAGE
  8777. THIS    
  8778. CLANGUAGE
  8779. _OLANG
  8780. SETLANGUAGE?
  8781. FoxyPreviewer_Locs.dbf
  8782. Could not load the localizations table.
  8783. Collection
  8784. Collection
  8785. LANGNOTFOU
  8786. Make sure that the desired language is available in FoxyPreviewer_Locs.dbf
  8787. TCLANGUAGE    
  8788. LCDBFFILE
  8789. LNSELECT
  8790. SETERROR
  8791. _ALANGUAGES
  8792. _ALANGLOCAL
  8793. LANGUAGE    
  8794. LOCALLANG
  8795. GETLOC
  8796. _LANGINDEX    
  8797. CCODEPAGE
  8798. OLANG
  8799. _OLANG*
  8800. ERROR
  8801. ERROR
  8802. TCERRMSG
  8803. TCTITLE
  8804. CERRORS
  8805. LSILENT
  8806. LCERRCAPTION
  8807. GETLOC
  8808. CVERSIONi
  8809. This._oLang.
  8810. ERROR
  8811. ** ERROR **
  8812. Could not locate the string '
  8813. ' in the localizations table.
  8814. Please make sure that you have the latest version available of 'FoxyPreviewer_locs.dbf'.
  8815. TCSTRING
  8816. LCTRANSL
  8817. SETERROR
  8818. SET UDFPARMS TO &lcUDFPar.
  8819. CUSTOM
  8820. Error updating the caller class.C
  8821. Check if the file FOXUPREVIEWERCALLER.PRG matches the APP version.
  8822. LCUDFPAR
  8823. _SETUDFPARMS
  8824. LOPARENT
  8825. _OCALLER
  8826. LSAVED
  8827. LPRINTED    
  8828. CDESTFILE
  8829. LEMAILED
  8830. CERRORS
  8831. NVERSION
  8832. CVERSION
  8833. LOEXC
  8834. SETERROR
  8835. _OREPORT    
  8836. OLISTENER    
  8837. _OREPORTS    
  8838. _OCLAUSES    
  8839. _OALIASES
  8840. _ONAMES
  8841. _OPROOFSHEET
  8842. _OSETTINGSSHEET
  8843. _OEMAILSHEET
  8844. _OEXHANDLER
  8845. _OPARENTFORM
  8846. _OLANG
  8847. CLEARCACHE    
  8848. _GOHELPER
  8849. _OPROOFSHEET
  8850. RELEASE
  8851. _OSETTINGSSHEET
  8852. _OEMAILSHEET
  8853. DOFOXYTHERM3
  8854. Collection
  8855. Collection
  8856. Collection
  8857. Collection
  8858. TCREPORT    
  8859. TCCLAUSES
  8860. TCALIAS
  8861. TCNAME
  8862. THIS    
  8863. _OREPORTS    
  8864. _OCLAUSES    
  8865. _OALIASES
  8866. _ONAMES
  8867. REPORTLISTENER
  8868. REPORTLISTENER
  8869. Printer
  8870. LABEL FORM (m.lcReport) OBJECT m.loListener &lcClauses.
  8871. NOPAGEEJECT
  8872. WaitForNextReport
  8873. REPNOTFOUN
  8874. LABEL FORM (m.lcReport) &lcClauses. &lcUser. TO PRINTER NOCONSOLE
  8875. REPORT FORM (m.lcReport) &lcClauses. &lcUser. TO PRINTER NOCONSOLE
  8876. LABEL FORM (m.lcReport) OBJECT m.loListener &lcClauses. &lcUser.
  8877. REPORT FORM (m.lcReport) OBJECT m.loListener &lcClauses. &lcUser.
  8878. TOLISTENER
  8879. TLKEEPHANDLE
  8880. LCREPORT    
  8881. LCCLAUSES
  8882. LCALIAS
  8883. LCTYPE
  8884. LOLISTENER
  8885. THIS    
  8886. OLISTENER
  8887. CPRINTERNAME
  8888. SETPRINTER    
  8889. _OREPORTS
  8890. PRINTJOBNAME
  8891. _ONAMES    
  8892. _OCLAUSES    
  8893. _OALIASES
  8894. LCUSER
  8895. LNCOUNT
  8896. COUNT
  8897. _NINDEX
  8898. WAITFORNEXTREPORT
  8899. SETERROR
  8900. GETLOC
  8901. LUSELISTENER
  8902. _LSENDTOPRINTER
  8903. _LISDOTMATRIX
  8904. LDIRECTPRINT
  8905. CLEANCLAUSESM
  8906. Printer
  8907. _CORIGINALPRINTER
  8908. SETPRINTERt
  8909. ERRNOPRINTER
  8910. FOXYLISTENER
  8911. PR_ReportListener.vcx
  8912. PR_ReportListener.vcx
  8913. PR_ReportListener.vcx
  8914. REPORTLISTENER
  8915. _REPORTLISTENER
  8916. FXLISTENER
  8917. DBFLISTENER
  8918. FULLJUSTIFYLISTENER
  8919. FOXYLISTENER
  8920. FOXYLISTENER
  8921. SYS(16) : C
  8922. GetCurPath() : 
  8923. File('PR_ReportListener.vcx') : 
  8924. PR_ReportListener.vcx0_
  8925. This.ClassLibrary : 
  8926. Error loading FoxyListener!C
  8927. Line: 
  8928. FXLISTENER
  8929. PR_ReportListener.vcx
  8930. lStoreData
  8931. PR_FRXPreview.Prg
  8932. EXTENSIONHANDLER
  8933. ExtensionHandler
  8934. TOPARENT
  8935. GAPRINTERS
  8936. SETERROR
  8937. GETLOC
  8938. LPRINTED
  8939. _OCALLER    
  8940. OLISTENER
  8941. LCLISTENERCLASS    
  8942. LEXTENDED
  8943. CDEFAULTLISTENER    
  8944. STARTMODE
  8945. GETCURPATH
  8946. CLASSLIBRARY
  8947. FXFEEDBACKCLASS
  8948. _CTHERMCLASS
  8949. LEXPANDFIELDS
  8950. LCSUCCESSOR
  8951. CSUCCESSOR    
  8952. SUCCESSOR
  8953. LOEXC
  8954. LCMSG
  8955. ERRORNO
  8956. MESSAGE
  8957. LINENO
  8958. LINECONTENTS
  8959. LDIRECTPRINT
  8960. OUTPUTTYPE
  8961. LSTOREDATA
  8962. DOOUTPUT
  8963. _OLANG
  8964. SETLANGUAGE    
  8965. CLANGUAGE    
  8966. CDESTFILE
  8967. LISTENERTYPE
  8968. LOPREVIEWCONTAINER
  8969. LCPREVIEWAPP
  8970. LOEXHANDLER
  8971. SETEXTENSIONHANDLER
  8972. _OEXHANDLER    
  8973. ZOOMLEVEL
  8974. NZOOMLEVEL
  8975. CANVASCOUNT
  8976. NCANVASCOUNT
  8977. PREVIEWCONTAINER
  8978. CALLREPORT
  8979. _LNOWAIT
  8980. PdfListener
  8981. PR_PDFx.vcx
  8982. PdfListener
  8983. PR_PDFx.vcx
  8984. PDFasImageListener
  8985. PR_Pdfx.vcx
  8986. PDFasImageListener
  8987. PR_PDFx.vcx
  8988. ERR_CREATI
  8989. MSXML2.XSLTEMPLATE.4.0
  8990. ERR_CREATI
  8991. The MSXML4.0 library could not be loaded. Please check if it was properly installed.
  8992. HTMLListener
  8993. PR_HTMLListener
  8994. PR_ReportListener.vcx
  8995. ERR_CREATI
  8996. RTFreportlistener
  8997. PR_RTFListener
  8998. ERR_CREATI
  8999. ExcelListener
  9000. ExcelListener
  9001. pr_ExcelListener.vcx
  9002. Sheet
  9003. ERR_CREATI
  9004. ERR_CREATI
  9005. REPORTLISTENER
  9006. ExportListener
  9007. ERR_CREATI
  9008. REPORTLISTENER
  9009. FOXYLISTENER
  9010. PR_ReportListener.vcx
  9011. ERR_CREATI
  9012. FOXYLISTENERC
  9013. PR_ReportListener.vcx
  9014. FOXYLISTENER
  9015. PR_ReportListener.vcx
  9016. FOXYLISTENER
  9017. PR_ReportListener.vcx
  9018. REPORTLISTENER
  9019. _REPORTLISTENER
  9020. FXLISTENER
  9021. DBFLISTENER
  9022. FULLJUSTIFYLISTENER
  9023. FOXYLISTENER
  9024. FOXYLISTENER
  9025. FXLISTENER
  9026. PR_ReportListener.vcx
  9027. TLEMAIL
  9028. LCFILEFORMAT    
  9029. CDESTFILE
  9030. LSAVED
  9031. COUTPUTPATH
  9032. LSAVETOFILE
  9033. LNTYPE
  9034. LPDFASIMAGE
  9035. LOLISTENER    
  9036. CCODEPAGE
  9037. LEMBEDFONT
  9038. LPDFEMBEDFONTS
  9039. CSYMBOLFONTSLIST
  9040. CPDFSYMBOLFONTSLIST
  9041. CDEFAULTFONT
  9042. CPDFDEFAULTFONT
  9043. LREPLACEFONTS
  9044. LPDFREPLACEFONTS
  9045. CTARGETFILENAME    
  9046. QUIETMODE
  9047. LQUIETMODE
  9048. FXFEEDBACKCLASS
  9049. _CTHERMCLASS    
  9050. LCANPRINT
  9051. LPDFCANPRINT
  9052. LCANEDIT
  9053. LPDFCANEDIT
  9054. LCANCOPY
  9055. LPDFCANCOPY
  9056. LCANADDNOTES
  9057. LPDFCANADDNOTES
  9058. LENCRYPTDOCUMENT
  9059. LPDFENCRYPTDOCUMENT
  9060. CMASTERPASSWORD
  9061. CPDFMASTERPASSWORD
  9062. CUSERPASSWORD
  9063. CPDFUSERPASSWORD
  9064. LSHOWERRORS
  9065. LPDFSHOWERRORS
  9066. CPDFAUTHOR    
  9067. CPDFTITLE
  9068. CPDFSUBJECT
  9069. CPDFKEYWORDS
  9070. CPDFCREATOR
  9071. LOPENVIEWER
  9072. LNPGMODE
  9073. NPDFPAGEMODE    
  9074. NPAGEMODE    
  9075. LEXTENDED
  9076. LDEFAULTMODE
  9077. CALLREPORT
  9078. LCFULLOUTPUTALIAS
  9079. LNWIDTH
  9080. LNHEIGHT    
  9081. OLISTENER
  9082. GETFULLFRXDATA
  9083. GETPAGEWIDTH
  9084. GETPAGEHEIGHT
  9085. OUTPUTFROMDATA
  9086. SETERROR
  9087. GETLOC
  9088. LLERROR
  9089. LOTESTXML4
  9090. WINDOW_HTML
  9091. TARGETFILENAME$
  9092. COPYIMAGEFILESTOEXTERNALFILELOCATION
  9093. LORTFLISTENER
  9094. LCOUTPUTALIAS
  9095. LOREPORTLISTENER
  9096. LISTENERTYPE
  9097. LOUTPUTTOCURSOR
  9098. CWORKBOOKFILE
  9099. CWORKSHEETNAME
  9100. LCONVERTTOXLS
  9101. LEXCELCONVERTTOXLS
  9102. LREPEATHEADERS
  9103. LEXCELREPEATHEADERS
  9104. LREPEATFOOTERS
  9105. LEXCELREPEATFOOTERS
  9106. LHIDEPAGENO
  9107. LEXCELHIDEPAGENO
  9108. LALIGNLEFT
  9109. LEXCELALIGNLEFT
  9110. NEXCELSAVEFORMAT    
  9111. _OREPORTS
  9112. REPORT2PIC
  9113. LDIRECTPRINT
  9114. NCOPIES
  9115. LPRINTED
  9116. RESTOREPRINTER
  9117. _LSENDTOPRINTER    
  9118. STARTMODE
  9119. GETCURPATH
  9120. CLASSLIBRARY
  9121. LCSUCCESSOR
  9122. CDEFAULTLISTENER    
  9123. SUCCESSOR
  9124. LOEXC
  9125. LOEXCEPTION
  9126. _LSENDINGEMAIL
  9127. LAUTOSENDMAIL
  9128. SENDREPORTTOEMAIL
  9129. _CDEFAULTFOLDER
  9130. _LALREADYOPENED
  9131. OPENFILE
  9132. REPORTRELEASEDD
  9133. ERR_CREATI
  9134. BADCONFIG
  9135. ERRSENDMAI
  9136. MSGNOTSENT
  9137. ERROR
  9138. OFOXYPREVIEWER
  9139. THIS    
  9140. CDESTFILE    
  9141. CEMAILPRG
  9142. NEMAILMODE
  9143. SETERROR
  9144. GETLOC
  9145. LEMAILED
  9146. LAUTOSENDMAIL
  9147. SENDCDOMAIL
  9148. PR_SENDMAILEX
  9149. HWINDOW
  9150. LCDELIMITER
  9151. LCFILES    
  9152. LCMSGSUBJ
  9153. LNMAPIRETURN
  9154. PR_GETACTIVEWINDOW
  9155. PR_MAPISENDDOCUMENTS
  9156. PR_MAPISHOWMESSAGE
  9157. _CDEFAULTFOLDER
  9158. LOMAILEX
  9159. LEMAILAUTO
  9160. LSAVED
  9161. _LSENDINGEMAIL
  9162. DefaultvC
  9163. TOEXT
  9164. THIS    
  9165. OLISTENER
  9166. ERASETEMPFILES
  9167. _CORIGINALPRINTER
  9168. CPRINTERNAME
  9169. SETPRINTER
  9170. CLOSESHEETS    
  9171. _GOHELPER
  9172. _CDEFAULTFOLDER
  9173. CLEARCACHE
  9174. DESTROY2
  9175. _OREPORTOUTPUT
  9176. PREVIEWCONTAINER
  9177. LOEXC>
  9178. EXCEPTION
  9179. SET PRINTER TO NAME '&lcPrinter'
  9180. Could not change the current printer.C
  9181. Current Printer: 
  9182. Printer
  9183. Failed Printer: 
  9184. TCPRINTERNAME    
  9185. LCPRINTER
  9186. LLRETURN
  9187. LOEXC
  9188. SETERROR@
  9189. LENABLED
  9190. PREVIEWFORM
  9191. TOOLBAR
  9192. REFRESH
  9193. CAPTION
  9194. FORMCAPTIONf
  9195. MENUTOP
  9196. MENUPREV
  9197. MENUNEXT
  9198. MENULAST
  9199. MENUGOTO
  9200. MENUSHOWPA
  9201. MENUTOOLB
  9202. CBOZOOMTTI
  9203. CBOZOOMTTI
  9204. m.oRef.ExtensionHandler.ActionGotoPage()
  9205. m.oRef.ExtensionHandler.actionToolbarVisibility()
  9206. MENUPRINT
  9207. m.oRef.ExtensionHandler.ActionPrintEx()
  9208. PRINTINGPR
  9209. m.oRef.ExtensionHandler.DoCustomPrint()
  9210. SAVEREPORT
  9211. ON BAR 17 OF (m.cPopup) ACTIVATE POPUP &lcSaveMenu.
  9212. SAVEASIMAG
  9213. pr_Img.bmp
  9214. m.oRef.ExtensionHandler.DoSaveType(1)
  9215. SAVEASPDF
  9216. pr_Pdf.bmp
  9217. m.oRef.ExtensionHandler.DoSaveType(2)
  9218. SAVEASHTML
  9219. pr_Html.bmp
  9220. m.oRef.ExtensionHandler.DoSaveType(3)
  9221. SAVEASMHT
  9222. pr_MHT.bmp
  9223. m.oRef.ExtensionHandler.DoSaveType(8)
  9224. SAVEASRTF
  9225. pr_Word.bmp
  9226. m.oRef.ExtensionHandler.DoSaveType(4)
  9227. SAVEASXLS
  9228. pr_Excel.bmp
  9229. m.oRef.ExtensionHandler.DoSaveType(5)
  9230. m.oRef.ExtensionHandler.DoSaveType(1)
  9231. ON BAR 17 OF (m.cPopup) ACTIVATE POPUP &lcSaveMenu.
  9232. SAVEASIMAG
  9233. pr_Img.bmp
  9234. m.oRef.ExtensionHandler.DoSaveType(1)
  9235. SAVEASPDF
  9236. pr_Pdf.bmp
  9237. m.oRef.ExtensionHandler.DoSaveType(2)
  9238. SAVEASHTML
  9239. pr_Html.bmp
  9240. m.oRef.ExtensionHandler.DoSaveType(3)
  9241. SAVEASMHT
  9242. pr_MHT.bmp
  9243. m.oRef.ExtensionHandler.DoSaveType(8)
  9244. SAVEASRTF
  9245. pr_Word.bmp
  9246. m.oRef.ExtensionHandler.DoSaveType(4)
  9247. SAVEASXLS
  9248. pr_Excel.bmp
  9249. m.oRef.ExtensionHandler.DoSaveType(5)
  9250. SAVEASTXT
  9251. pr_1page.bmp
  9252. m.oRef.ExtensionHandler.DoSaveType(6)
  9253. SENDTOEMAI
  9254. m.oRef.ExtensionHandler.DoSendEmail()
  9255. MENUPROOF
  9256. m.oRef.ExtensionHandler.DoProof()
  9257. m.oRef.ExtensionHandler.DoSearch()
  9258. FINDBACK
  9259. FINDNEXT
  9260. m.oRef.ExtensionHandler.DoSearchBack()
  9261. m.oRef.ExtensionHandler.DoSearchAgain()
  9262. SETUP
  9263. m.oRef.ExtensionHandler.DoSetup()
  9264. MENUCLOSE
  9265. m.oRef.ExtensionHandler.ActionClose()
  9266. LANGUAGE
  9267. ENGLISH
  9268. ON BAR 7 OF (m.cPopup) ACTIVATE POPUP &lcZoom2
  9269. ON BAR 8 OF (m.cPopup) ACTIVATE POPUP &lcPages2
  9270. whole page
  9271. CBOZOOMWHO
  9272. fit to width
  9273. CBOZOOMPGW
  9274. m.oRef.actionSetZoom( BAR() )
  9275. ONEPGMENU
  9276. TWOPGMENU
  9277. TWOPGMENU
  9278. FOURPGMENU
  9279. FOURPGMENU
  9280. m.oRef.actionSetCanvasCount(1)
  9281. m.oRef.actionSetCanvasCount(2)
  9282. m.oRef.actionSetCanvasCount(4)
  9283. CPOPUP
  9284. INEXTBAR    
  9285. _GOHELPER
  9286. GETLOC
  9287. IMGBTN_TOP
  9288. IMGBTN_PREV
  9289. IMGBTN_NEXT
  9290. IMGBTN_BOTT
  9291. IMGBTN_GOTOPG
  9292. LSHOWPAGECOUNT
  9293. LPRINTVISIBLE
  9294. LSHOWPRINTBTN
  9295. IMGBTN_PRINT
  9296. LPRINTERPREF
  9297. LCIMGPRINTPREF
  9298. IMGBTN_PRINTPREF
  9299. LSAVETOFILE
  9300. IMGBTN_SAVE
  9301. LCSAVEMENU    
  9302. LEXTENDED
  9303. _LCANSEARCH
  9304. LSAVEASIMAGE
  9305. LSAVEASPDF
  9306. LSAVEASHTML
  9307. LSAVEASMHT
  9308. LSAVEASRTF
  9309. LSAVEASXLS
  9310. LSAVEASTXT
  9311. LSENDTOEMAIL
  9312. IMGBTN_EMAIL
  9313. LSHOWMINIATURES
  9314. IMGBTN_MINI
  9315. LSHOWSEARCH
  9316. IMGBTN_SEARCH
  9317. _LSHOWSEARCHAGAIN
  9318. IMGBTN_SEARCHBACK
  9319. IMGBTN_SEARCHAGAIN
  9320. LSHOWSETUP
  9321. IMGBTN_SETUP
  9322. IMGBTN_CLOSE
  9323. LCZOOM2
  9324. LCPAGES2
  9325. LCITEM
  9326. ZOOMLEVELS    
  9327. ZOOMLEVEL
  9328. IPAGESALLOWED
  9329. CANVASCOUNT}
  9330. PreviewHelper
  9331. _GOHELPER    
  9332. LEXTENDED
  9333. _OLANG
  9334. SETLANGUAGE    
  9335. CLANGUAGE
  9336. TNVISIBLE
  9337. PREVIEWFORM
  9338. TOOLBAR
  9339. TOOLBARISVISIBLE
  9340. CREATETOOLBAR
  9341. UPDATETOOLBAR
  9342. SHOWTOOLBAR
  9343. PREVIEWFORM
  9344. TOOLBAR
  9345. TOOLBARISVISIBLE
  9346. CREATETOOLBAR
  9347. UPDATETOOLBAR
  9348. SHOWTOOLBARP
  9349. CustomFrxGotoPageForm
  9350. LOFORM
  9351. IPAGENO
  9352. OPARENTFORM
  9353. PREVIEWFORM
  9354. TOOLBAR
  9355. SHOWTOOLBAR
  9356. PAGENO
  9357. CURRENTPAGE
  9358. SETCURRENTPAGEq
  9359. REPORTLISTENER
  9360. OutputPage
  9361. DialogPrinting
  9362. _GOHELPER
  9363. NPRINTERPROPTYPE
  9364. _CORIGINALPRINTER
  9365. CPRINTERNAME
  9366. SETPRINTER
  9367. SETPRINTERPROPS
  9368. CLOSESHEETS
  9369. PREVIEWFORM
  9370. OREPORT
  9371. COMMANDCLAUSES
  9372. PROMPT
  9373. PRINTPAGECURRENT
  9374. CURRENTPAGE
  9375. LOLISTENER
  9376. ONPREVIEWCLOSE    
  9377. LEXTENDED
  9378. CLEARCACHE
  9379. RESTOREPARENT<
  9380. NPAGENO
  9381. EDEVICE
  9382. NDEVICETYPE
  9383. THIS    
  9384. _GOHELPER
  9385. LPRINTED
  9386. _GOHELPER    
  9387. LEXTENDED
  9388. REPORTRELEASED
  9389. LCALIAS    
  9390. LNSESSION
  9391. LNRECNO
  9392. PREVIEWFORM
  9393. OREPORT
  9394. CSTARTINGALIAS
  9395. NSTARTINGSESSION
  9396. NSTARTINGRECNO
  9397. ERASETEMPFILES
  9398. RELEASE
  9399. LOEXC
  9400. DESTROY
  9401. ONPREVIEWCLOSE
  9402. CLEARCACHE
  9403. RESTOREPARENT
  9404. HIDEFORM
  9405. LCALIAS    
  9406. LNSESSION
  9407. LNRECNO
  9408. PREVIEWFORM
  9409. OREPORT
  9410. CSTARTINGALIAS
  9411. NSTARTINGSESSION
  9412. NSTARTINGRECNO
  9413. ERASETEMPFILES
  9414. RELEASE
  9415. LOEXC    
  9416. _GOHELPER
  9417. DESTROY
  9418. RESTOREPARENT
  9419. LCALIAS    
  9420. LNSESSION
  9421. LNRECNO
  9422. PREVIEWFORM
  9423. OREPORT
  9424. CSTARTINGALIAS
  9425. NSTARTINGSESSION
  9426. NSTARTINGRECNO
  9427. ERASETEMPFILES
  9428. RELEASE
  9429. LOEXC{
  9430. PREVIEWFORM
  9431. VISIBLE
  9432. LOEXC
  9433. HIDEFORM    
  9434. _GOHELPER
  9435. _OPARENTFORM
  9436. LOFORM
  9437. CONTROLBOX
  9438. TITLEBAR
  9439. CLOSABLE
  9440. PAINT
  9441. PREVIEWFORM
  9442. OREPORT
  9443. ONPREVIEWCLOSEM
  9444. REPORTLISTENER
  9445. winspool
  9446. CreateDC
  9447. WIN32APIQ
  9448. PR_CreateDC
  9449. STRING
  9450. PCHAR
  9451. FoxyPreviewer Report
  9452. PChar
  9453. Printing 
  9454. Error trying to send the output to an alternate printer!C
  9455. Please report to vfpimaging@hotmail.com 
  9456. Error
  9457. LNPAGE
  9458. LNPRINTWIDTH
  9459. LNPRINTHEIGHT
  9460. LNMAXWIDTH
  9461. LNMAXHEIGHT
  9462. LNHORMARGIN
  9463. LNVERTMARGIN
  9464. LNHORRES    
  9465. LNVERTRES
  9466. LNPAPERFORM    
  9467. _GOHELPER    
  9468. OLISTENER
  9469. NPRTPAPERSIZE
  9470. GETFORMDIMENSIONS
  9471. CPRINTERNAME
  9472. CLOSESHEETS
  9473. _LISDOTMATRIX
  9474. ISDOTMATRIX
  9475. CPRINTJOBNAME
  9476. PRINTJOBNAME
  9477. LLCHANGEDPRINTER
  9478. _CORIGINALPRINTER    
  9479. LEXTENDED
  9480. NCOPIES
  9481. LREPEATINPAGE    
  9482. LCPRINTER    
  9483. LHPRINTER
  9484. LOLISTENER
  9485. LCDRIVER
  9486. CREATEDC
  9487. WIN32API
  9488. PR_CREATEDC
  9489. LNPRINTERDC    
  9490. LCDOCINFO    
  9491. LODOCNAME
  9492. LCPRINTJOB
  9493. GETADDR
  9494. XFCSTARTDOC
  9495. THIS    
  9496. SIZEPAGES
  9497. OUTPUTPAGECOUNT
  9498. XFCSTARTPAGE
  9499. OUTPUTPAGE
  9500. XFCENDPAGE    
  9501. XFCENDDOC
  9502. XFCDELETEDC
  9503. PREVIEWFORM
  9504. OREPORT
  9505. ONPREVIEWCLOSE
  9506. LOEXC
  9507. VISIBLE
  9508. LPRINTED
  9509. _LSENDTOPRINTER
  9510. LUSELISTENER
  9511. SETPRINTER
  9512. ACTIONCLOSE
  9513. _LNOWAIT
  9514. DOOUTPUTp
  9515. REPORTLISTENER
  9516. TNHDC
  9517. TNHORRES    
  9518. TNVERTRES
  9519. LLSCALEADJUST
  9520. LOLISTENER    
  9521. _GOHELPER    
  9522. OLISTENER
  9523. LNHDC
  9524. GETPAGEWIDTH
  9525. GETPAGEHEIGHT
  9526. XFCGETDEVICECAPS
  9527. PR_Settings.scxJ
  9528. PR_Settings.scxJ
  9529. _GOHELPER
  9530. CLOSESHEETS
  9531. PREVIEWFORM
  9532. TOOLBAR
  9533. LLOLDVISIBLE
  9534. VISIBLE
  9535. SHOWTOOLBAR
  9536. PR_SETTINGS
  9537. _OSETTINGSSHEET
  9538. NAME5
  9539. pr_previous.bmp
  9540. pr_next.bmp
  9541. pr_top.bmp
  9542. pr_bottom.bmp
  9543. pr_Locate.bmp
  9544. pr_Print.bmp
  9545. pr_PrintPref.bmp
  9546. pr_gotopage.bmp
  9547. pr_1page.bmp
  9548. pr_2page.bmp
  9549. pr_4page.bmp
  9550. pr_close.bmp
  9551. pr_close2.bmp
  9552. pr_Save.bmp
  9553. pr_Mail.bmp
  9554. pr_Gear.bmp
  9555. pr_Search.bmp
  9556. pr_SearchAgain.bmp
  9557. pr_SearchBack.bmp
  9558. pr_previous_32.bmp
  9559. pr_next_32.bmp
  9560. pr_top_32.bmp
  9561. pr_bottom_32.bmp
  9562. pr_Locate_32.bmp
  9563. pr_Print_32.bmp
  9564. pr_PrintPref_32.bmp
  9565. pr_gotopage_32.bmp
  9566. pr_1page_32.bmp
  9567. pr_2page_32.bmp
  9568. pr_4page_32.bmp
  9569. pr_close_32.bmp
  9570. pr_close2_32.bmp
  9571. pr_Save_32.bmp
  9572. pr_Mail_32.bmp
  9573. pr_Gear_32.bmp
  9574. pr_Search_32.bmp
  9575. pr_SearchAgain_32.bmp
  9576. pr_SearchBack_32.bmp
  9577. THIS    
  9578. _GOHELPER
  9579. NBUTTONSIZE
  9580. IMGBTN_PREV
  9581. IMGBTN_NEXT
  9582. IMGBTN_TOP
  9583. IMGBTN_BOTT
  9584. IMGBTN_MINI
  9585. CIMGMINIATURES
  9586. IMGBTN_PRINT    
  9587. CIMGPRINT
  9588. IMGBTN_PRINTPREF
  9589. CIMGPRINTPREF
  9590. IMGBTN_GOTOPG
  9591. IMGBTN_1PG
  9592. IMGBTN_2PG
  9593. IMGBTN_4PG
  9594. IMGBTN_CLOSE    
  9595. CIMGCLOSE
  9596. IMGBTN_CLOSE2
  9597. CIMGCLOSE2
  9598. IMGBTN_SAVE
  9599. CIMGSAVE
  9600. IMGBTN_EMAIL    
  9601. CIMGEMAIL
  9602. IMGBTN_SETUP    
  9603. CIMGSETUP
  9604. IMGBTN_SEARCH
  9605. CIMGSEARCH
  9606. IMGBTN_SEARCHAGAIN
  9607. CIMGSEARCHAGAIN
  9608. IMGBTN_SEARCHBACK
  9609. CIMGSEARCHBACK
  9610. CIMGMINIATURESBIG
  9611. CIMGPRINTBIG
  9612. CIMGPRINTPREFBIG
  9613. CIMGCLOSEBIG
  9614. CIMGCLOSE2BIG
  9615. CIMGSAVEBIG
  9616. CIMGEMAILBIG
  9617. CIMGSETUPBIG
  9618. CIMGSEARCHBIG
  9619. CIMGSEARCHAGAINBIG
  9620. CIMGSEARCHBACKBIG
  9621. TOOLBAR
  9622. lStarted
  9623. lStarted-
  9624. GetParent
  9625. WIN32API
  9626. SetParent
  9627. WIN32API
  9628. SetWindowPos
  9629. WIN32API
  9630. SynchPageNo
  9631. SynchPageNo
  9632. Refresh
  9633. RefreshToolbar
  9634. RenderPage
  9635. RenderPage
  9636. RestoreFromResource
  9637. RestoreFromResource_Bind
  9638. QueryUnload
  9639. PreviewUnload2
  9640. Destroy
  9641. PreviewUnload2
  9642. QueryUnload
  9643. PreviewUnload
  9644. REPORTLISTENER
  9645. cOutputAlias
  9646. ISTYLE    
  9647. LOTOOLBAR
  9648. LLTOOLBARVISIBLE
  9649. PREVIEWFORM
  9650. TOOLBAR
  9651. VISIBLE
  9652. LOPREVIEWFORM
  9653. ADDPROPERTY
  9654. CHECKHELPERCLASS    
  9655. _GOHELPER    
  9656. OLISTENER
  9657. OREPORT
  9658. _NBTSIZE
  9659. NBUTTONSIZE
  9660. LABEL1
  9661. _PREVIEWVERSION
  9662. CAPTION    
  9663. SETIMAGES
  9664. DESKTOP    
  9665. GETPARENT
  9666. WIN32API    
  9667. SETPARENT
  9668. SETWINDOWPOS
  9669. LNOLDPARENT
  9670. DOCKED
  9671. WIDTH
  9672. MOVABLE
  9673. SIZABLE
  9674. LLNOWAIT    
  9675. LLTOPFORM
  9676. TOPFORM
  9677. _TOPFORM
  9678. ICON    
  9679. CFORMICON
  9680. ALLOWPRINTFROMPREVIEW
  9681. SHOWWINDOW
  9682. LCPARENTTITLE    
  9683. LCCAPTION
  9684. LOFORM
  9685. GETPARENTWINDOW
  9686. FORMS
  9687. CLOSABLE
  9688. _OPARENTFORM
  9689. COMMANDCLAUSES
  9690. NOWAIT
  9691. _LNOWAIT    
  9692. NDOCKTYPE
  9693. INWINDOW
  9694. WINDOWSTATE
  9695. NWINDOWSTATE
  9696. LOLISTENER
  9697. NPAGETOTAL    
  9698. PAGETOTAL    
  9699. _CFRXNAME
  9700. FRXFILENAME
  9701. _CLAUSENRANGEFROM    
  9702. RANGEFROM
  9703. _CLAUSENRANGETO
  9704. RANGETO
  9705. _CLAUSELSUMMARY
  9706. SUMMARY
  9707. _CLAUSECHEADING
  9708. HEADING
  9709. _LCANSEARCH
  9710. LSTARTED
  9711. UPDATETOOLBAR
  9712. ACTIONSHOWTOOLBAR
  9713. NSHOWTOOLBARF
  9714. PREVIEWFORM
  9715. TOOLBAR
  9716. CREATETOOLBAR
  9717. VISIBLEk
  9718. FRXPREVIEWFORM.NEWOBJECT
  9719. Canvas1
  9720. FoxyPreviewer CC
  9721.    VFP 
  9722. Complete mode
  9723. Simplified mode6
  9724. .pageTotal   = 
  9725. .currentPage = 
  9726. _PAGENO      = 
  9727. .canvasCount = 
  9728. .pageHeight  = 
  9729. .pageWidth   = 
  9730. Report Clauses:
  9731. .oReport.commandClauses.C
  9732. Error #C
  9733. Line 
  9734. Internal Error - 
  9735. IERROR
  9736. CMETHOD
  9737. ILINE
  9738. PREVIEWFORM
  9739. LLHASERROR
  9740. LCHEADER
  9741. LCMODE
  9742. LCTEXT
  9743. LCFIELD    
  9744. _GOHELPER
  9745. LCVERSIONTEXT
  9746. GETVFPVERSION
  9747. CVERSION    
  9748. LEXTENDED
  9749. LCPROPERTY
  9750. LUVALUE    
  9751. PAGETOTAL
  9752. CURRENTPAGE
  9753. CANVASCOUNT
  9754. PAGEHEIGHT    
  9755. PAGEWIDTH
  9756. OREPORT
  9757. COMMANDCLAUSES
  9758. LCERRORMSG
  9759. CANCELLED    
  9760. SUSPENDED5
  9761. REPPREVIEW
  9762. MINILABEL
  9763. %FP%C
  9764. %LP%C
  9765. PAGECAPTIO
  9766. ICURRENTPAGE
  9767. CMESSAGE
  9768. LCREPORTNAME
  9769. LCFORMCAPTION
  9770. PREVIEWFORM
  9771. CURRENTPAGE
  9772. STARTOFFSET    
  9773. _GOHELPER    
  9774. LEXTENDED    
  9775. _CFRXNAME
  9776. _ONAMES
  9777. CTITLE
  9778. LCTITLE
  9779. GETLOC
  9780. OREPORT
  9781. COMMANDCLAUSES
  9782. WINDOW
  9783. CANVASCOUNT
  9784. LNLASTPAGE    
  9785. PAGETOTAL
  9786. CAPTION
  9787. TOOLBAR
  9788. AutoSizea
  9789. AutoSize-
  9790. Height
  9791. commandbutton
  9792. combobox
  9793. spinner
  9794. cntsearch1
  9795. REPPREVIEW
  9796. PREVIEWFORM
  9797. TOOLBAR
  9798. LOCKSCREEN
  9799. SETALL    
  9800. _GOHELPER
  9801. _NBTSIZE    
  9802. LOCONTROL
  9803. CONTROLS    
  9804. BASECLASS
  9805. WIDTH
  9806. HEIGHT
  9807. CMDSEARCHVISIBILITY
  9808. LCREPORTNAME    
  9809. _CFRXNAME
  9810. CAPTION
  9811. CTOOLBARTITLE
  9812. GETLOC
  9813. TOOLBAR
  9814. MENUNEXT
  9815. MENULAST
  9816. MENUTOP
  9817. MENUPREV
  9818. COMMANDBUTTON
  9819. LANGUAGE
  9820. ENGLISH
  9821. cmdGoto1
  9822. cmdGotoEx
  9823. MENUGOTO
  9824. cmdProof1
  9825. cmdProof
  9826. MINIATURES
  9827. COMBOBOX
  9828. LANGUAGE
  9829. ENGLISH
  9830. CBOZOOMTTI
  9831. CBOZOOMTTI
  9832. whole page
  9833. CBOZOOMWHO
  9834. fit to width
  9835. CBOZOOMPGW
  9836. ONEPGTTIP
  9837. TWOPGTTIP
  9838. FOURPGTTIP
  9839. OPTIONGROUP
  9840. cmbPrinters1
  9841. cmbPrinters
  9842. AVAILABLEP
  9843. cPrtPrinterName
  9844. cntCopies1
  9845. cntCopies
  9846. cmdSave1
  9847. cmdSave
  9848. SAVEREPORT
  9849. cmbSave1
  9850. cmbSave
  9851. SAVEASIMAG
  9852. pr_Img.bmp
  9853. SAVEASPDF
  9854. pr_Pdf.bmp
  9855. SAVEASRTF
  9856. pr_Word.bmp
  9857. SAVEASXLS
  9858. pr_Excel.bmp
  9859. SAVEASHTML
  9860. pr_HTML.bmp
  9861. SAVEASMHT
  9862. pr_MHT.bmp
  9863. SAVEASTXT
  9864. pr_1page.bmp
  9865. cmdEmail1
  9866. cmdEmail
  9867. SENDTOEMAI
  9868. cmdPrinterProps1
  9869. cmdPrinterProps
  9870. PRINTINGPR
  9871. cmdPrint1
  9872. cmdPrintEx
  9873. PRINTREPOR
  9874. cmdSetup1
  9875. cmdSetup
  9876. SETUP
  9877. cntSearch1
  9878. cntSearch
  9879. FINDBACK
  9880. FINDNEXT
  9881. cmdExit1
  9882. cmdExit
  9883. CLOSEREPOR
  9884. Destroy
  9885. ReportReleased
  9886. TLVISIBLE
  9887. PREVIEWFORM
  9888. ALLOWPRINTFROMPREVIEW
  9889. TOOLBAR
  9890. LOCKSCREEN
  9891. LNSIZE    
  9892. _GOHELPER
  9893. _NBTSIZE
  9894. CNTNEXT
  9895. WIDTH
  9896. HEIGHT
  9897. CMDFORWARD
  9898. PICTURE
  9899. IMGBTN_NEXT
  9900. TOOLTIPTEXT
  9901. GETLOC    
  9902. CMDBOTTOM
  9903. IMGBTN_BOTT
  9904. CNTPREV
  9905. CMDTOP
  9906. IMGBTN_TOP
  9907. CMDBACK
  9908. IMGBTN_PREV    
  9909. LOCMDGOTO
  9910. CMDGOTOPAGE
  9911. VISIBLE    
  9912. ADDOBJECT
  9913. CMDGOTO1
  9914. IMGBTN_GOTOPG
  9915. LSHOWMINIATURES    
  9916. CMDPROOF1
  9917. LOCOMBO
  9918. CBOZOOM
  9919. LCITEM    
  9920. LISTCOUNT
  9921. LISTITEM
  9922. OPGPAGECOUNT
  9923. LSHOWPAGECOUNT
  9924. IMGBTN_1PG
  9925. IMGBTN_2PG
  9926. IMGBTN_4PG
  9927. LPRINTVISIBLE
  9928. LSHOWPRINTERS
  9929. CMBPRINTERS1
  9930. FONTSIZE
  9931. OREPORT
  9932. CPRTPRINTERNAME
  9933. VALUE
  9934. DISPLAYVALUE    
  9935. LISTINDEX
  9936. LSHOWCOPIES
  9937. LSAVETOFILE
  9938. CMDSAVE1
  9939. LNCMBINDEX
  9940. CMBSAVE1
  9941. LSAVEASIMAGE
  9942. ADDITEM
  9943. NEWINDEX    
  9944. LEXTENDED
  9945. _LCANSEARCH
  9946. LSAVEASPDF
  9947. LSAVEASRTF
  9948. LSAVEASXLS
  9949. LSAVEASHTML
  9950. LSAVEASMHT
  9951. LSAVEASTXT
  9952. LSENDTOEMAIL    
  9953. CMDEMAIL1
  9954. LPRINTERPREF
  9955. CMDPRINTERPROPS1
  9956. CMDPRINT
  9957. LSHOWPRINTBTN    
  9958. CMDPRINT1
  9959. LSHOWSETUP    
  9960. CMDSETUP1
  9961. LSHOWSEARCH
  9962. CNTSEARCH1
  9963. CMDSEARCH1
  9964. CMDSEARCHBACK1
  9965. CMDSEARCHAGAIN1
  9966. CMDCLOSE
  9967. LSHOWCLOSE
  9968. CMDEXIT1
  9969. NBUTTONSIZE
  9970. CNTCOPIES1
  9971. SPNCOPIES1
  9972. LBLCOPIES1
  9973. ADJUSTCONTROLS
  9974. REFRESH
  9975. LCREPORTNAME
  9976. LCTITLE    
  9977. _CFRXNAME
  9978. _ONAMES
  9979. SYNCHPAGENO-
  9980. ACTIONCLOSE    
  9981. _GOHELPER
  9982. REPORTRELEASED-
  9983. ProofSheet
  9984. GLOBALPREV
  9985. EXCEPTION
  9986. _GOHELPER
  9987. CLOSESHEETS
  9988. LLSHOWTOOLBAR
  9989. PREVIEWFORM
  9990. TOOLBAR
  9991. VISIBLE
  9992. SHOWTOOLBAR
  9993. _OPROOFSHEET    
  9994. SETREPORT
  9995. OREPORT
  9996. CAPTION
  9997. GETLOC
  9998. NMAXMINIATUREITEM
  9999. NMAXMINIATUREDISPLAY
  10000. _OPARENTFORM
  10001. SETPROOFCAPTION
  10002. LOEXC
  10003. LNPAGE
  10004. CURRENTPAGE
  10005. SETCURRENTPAGE6
  10006. TOOLBAR
  10007. FINDBACK
  10008. FINDNEXT
  10009. TLVISIBLE    
  10010. LOTOOLBAR
  10011. PREVIEWFORM
  10012. TOOLBAR
  10013. CNTSEARCH1
  10014. CMDSEARCHAGAIN1
  10015. VISIBLE
  10016. LNWIDTH    
  10017. _GOHELPER
  10018. _NBTSIZE
  10019. CMDSEARCH1
  10020. WIDTH
  10021. CMDSEARCHBACK1
  10022. LCTEXT
  10023. LNSIZE
  10024. _CTEXTTOFIND
  10025. TOOLTIPTEXT
  10026. GETLOC
  10027. _LSHOWSEARCHAGAIN
  10028. Search feature is currently unavailable for this report.
  10029. FoxyPreviewer error
  10030. PR_Search.scx
  10031. PR_Search.scx
  10032. Search feature is currently unavailable for this report.
  10033. FoxyPreviewer error
  10034. _GOHELPER
  10035. CLOSESHEETS
  10036. CLEARBOX
  10037. LCTEXT
  10038. LCREPORTALIAS
  10039. LCALIAS
  10040. PREVIEWFORM
  10041. OREPORT
  10042. COUTPUTALIAS
  10043. TOOLBAR
  10044. SHOWTOOLBAR    
  10045. PR_SEARCH
  10046. _CTEXTTOFIND
  10047. VISIBLE
  10048. LLERROR
  10049. CONTENTS
  10050. HANDLEFIND
  10051. CMDSEARCHVISIBILITY
  10052. CLEARBOX
  10053. LCTEXT
  10054. LCALIAS
  10055. LCREPORTALIAS
  10056. PREVIEWFORM
  10057. OREPORT
  10058. COUTPUTALIAS    
  10059. _GOHELPER
  10060. _CTEXTTOFIND
  10061. CONTENTS
  10062. HANDLEFIND
  10063. CLEARBOX
  10064. LCTEXT
  10065. LCALIAS
  10066. LCREPORTALIAS
  10067. PREVIEWFORM
  10068. OREPORT
  10069. COUTPUTALIAS    
  10070. _GOHELPER
  10071. _CTEXTTOFIND
  10072. CONTENTS
  10073. HANDLEFINDc
  10074. NOTFOUND
  10075. FINDTEXT
  10076. TLFOUND
  10077. TLAGAIN
  10078. LHIGHLIGHTTEXT
  10079. CMDSEARCHVISIBILITY    
  10080. _GOHELPER
  10081. GETLOC
  10082. PREVIEWFORM
  10083. CURRENTPAGE
  10084. TEMPSTOPREPAINT
  10085. SETCURRENTPAGE
  10086. SCROLLTOOBJECT
  10087. WIDTH
  10088. HEIGHT
  10089. RENDERPAGES
  10090. lineTop
  10091. lineBott
  10092. lineLeft
  10093. lineRight
  10094. LOFORM
  10095. PREVIEWFORM
  10096. LINETOP
  10097. REMOVEOBJECT
  10098. LINEBOTT
  10099. LINELEFT    
  10100. LINERIGHT
  10101. TNLEFT
  10102. TNTOP
  10103. TNWIDTH
  10104. TNHEIGHT
  10105. LNNEWTOP    
  10106. LNNEWLEFT
  10107. LNVPOS
  10108. LNHPOS
  10109. LNVPTOP
  10110. LNVPLEFT    
  10111. LNVPWIDTH
  10112. LNVPHEIGHT
  10113. PREVIEWFORM
  10114. VIEWPORTTOP
  10115. VIEWPORTLEFT
  10116. VIEWPORTWIDTH
  10117. VIEWPORTHEIGHT
  10118. CANVAS1
  10119. SETVIEWPORT
  10120. lineTop
  10121. lineBott
  10122. lineLeft
  10123. lineRight
  10124. LNPIXELSPERDPI960
  10125. LNHWND
  10126. LNWIDTH
  10127. LNHEIGHT
  10128. PREVIEWFORM
  10129. GETPIXELSPERDPI960
  10130. CANVAS1
  10131. LOFORM    
  10132. ADDOBJECT
  10133. LNCOLOR
  10134. TEMPSTOPREPAINT
  10135. LINETOP
  10136. WIDTH
  10137. BORDERCOLOR
  10138. BORDERWIDTH
  10139. HEIGHT
  10140. VISIBLE
  10141. LINEBOTT
  10142. LINELEFT    
  10143. LINERIGHT
  10144. LHIGHLIGHTTEXTu
  10145. TIPAGE
  10146. TOCANVAS
  10147. CLEARBOX
  10148. LHIGHLIGHTTEXT
  10149. PREVIEWFORM
  10150. OREPORT
  10151. COUTPUTALIAS
  10152. HIGHLIGHTOBJECT
  10153. WIDTH
  10154. HEIGHT
  10155. TNINDEX
  10156. DOSAVETYPE    
  10157. _GOHELPER
  10158. _LNOWAIT    
  10159. CDESTFILE
  10160. LSAVED    
  10161. LEXTENDED
  10162. DOOUTPUT<
  10163. SAVEASIMAG
  10164. Png;Bmp;Jpg;Gif;Tif;Emf
  10165. SAVEASPDF
  10166. SAVEASHTML
  10167. Htm;Html
  10168. SAVEASHTML
  10169. Mht;Mhtml
  10170. TEMP5
  10171. _IMAGES
  10172. Safetyv
  10173. SET SAFETY &lcSetSafe.
  10174. SAVEASRTF
  10175. Rtf;Doc
  10176. Xml;Xls
  10177. Xls;Xml
  10178. SAVEASXLS
  10179. SAVEASTXT
  10180. Txt;Csv;Xl5
  10181. TNTYPE    
  10182. _GOHELPER
  10183. LSAVED    
  10184. OLISTENER
  10185. PREVIEWFORM
  10186. OREPORT
  10187. LCFILE
  10188. LCREPORTNAME
  10189. PRINTJOBNAME
  10190. COUTPUTPATH
  10191. CSAVEDEFNAME
  10192. GETLOC
  10193. LOLISTENER
  10194. REPORT2PIC
  10195. LOPENVIEWER
  10196. _LSENDINGEMAIL
  10197. OPENFILE
  10198. DOMAKEPDFOFFLINE    
  10199. LEXTENDED
  10200. DOMAKEHTMLOFFLINE
  10201. LCTEMPHTMLFILE    
  10202. LCIMGPATH
  10203. TOMHTML    
  10204. LCSETSAFE
  10205. DOMAKERTFOFFLINE    
  10206. LCFILEEXT
  10207. CEXCELDEFAULTEXTENSION
  10208. DOMAKEXLSOFFLINE    
  10209. CDESTFILE
  10210. ACTIONCLOSE
  10211. PdfListener
  10212. PR_PDFx.vcx
  10213. PdfListener
  10214. PR_PDFx.vcx
  10215. PDFasImageListener
  10216. PR_Pdfx.vcx
  10217. PDFasImageListener
  10218. PR_PDFx.vcx
  10219. ERR_CREATI
  10220. TCFILE    
  10221. _GOHELPER    
  10222. CDESTFILE
  10223. LNPGMODE
  10224. NPDFPAGEMODE
  10225. LNTYPE
  10226. LPDFASIMAGE
  10227. LOLISTENER    
  10228. CCODEPAGE
  10229. CTARGETFILENAME
  10230. LEMBEDFONT
  10231. LPDFEMBEDFONTS    
  10232. LCANPRINT
  10233. LPDFCANPRINT
  10234. LCANEDIT
  10235. LPDFCANEDIT
  10236. LCANCOPY
  10237. LPDFCANCOPY
  10238. LCANADDNOTES
  10239. LPDFCANADDNOTES
  10240. LENCRYPTDOCUMENT
  10241. LPDFENCRYPTDOCUMENT
  10242. CMASTERPASSWORD
  10243. CPDFMASTERPASSWORD
  10244. CUSERPASSWORD
  10245. CPDFUSERPASSWORD
  10246. LSHOWERRORS
  10247. LPDFSHOWERRORS
  10248. CSYMBOLFONTSLIST
  10249. CPDFSYMBOLFONTSLIST
  10250. CPDFAUTHOR    
  10251. CPDFTITLE
  10252. CPDFSUBJECT
  10253. CPDFKEYWORDS
  10254. CPDFCREATOR
  10255. LREPLACEFONTS
  10256. LPDFREPLACEFONTS    
  10257. NPAGEMODE
  10258. CDEFAULTFONT
  10259. CPDFDEFAULTFONT    
  10260. QUIETMODE
  10261. LQUIETMODE
  10262. LCOUTPUTDBF
  10263. LNWIDTH
  10264. LNHEIGHT
  10265. LLHASFJ    
  10266. OLISTENER
  10267. GETFULLFRXDATA
  10268. LHASFJ
  10269. GETPAGEWIDTH
  10270. GETPAGEHEIGHT
  10271. OUTPUTFROMDATA
  10272. DOFOXYTHERM
  10273. LSAVED
  10274. SETERROR
  10275. GETLOC
  10276. LOPENVIEWER
  10277. _LSENDINGEMAIL
  10278. OPENFILE
  10279. REPORTLISTENER
  10280. RTFreportlistener
  10281. PR_RTFListener
  10282. ERR_CREATI
  10283. TCFILE    
  10284. _GOHELPER    
  10285. CDESTFILE
  10286. LORTFLISTENER
  10287. TARGETFILENAME    
  10288. QUIETMODE
  10289. LQUIETMODE
  10290. LCOUTPUTDBF
  10291. LNWIDTH
  10292. LNHEIGHT    
  10293. OLISTENER
  10294. GETFULLFRXDATA
  10295. GETPAGEWIDTH
  10296. GETPAGEHEIGHT
  10297. OUTPUTFROMDATA
  10298. DOFOXYTHERM
  10299. LSAVED
  10300. SETERROR
  10301. GETLOC
  10302. LOPENVIEWER
  10303. _LSENDINGEMAIL
  10304. OPENFILE
  10305. ExcelListener
  10306. ExcelListener
  10307. pr_ExcelListener.vcx
  10308. Sheet
  10309. PREPDATA
  10310. PLEASEWAIT
  10311. ERR_CREATI
  10312. TCFILE    
  10313. _GOHELPER    
  10314. CDESTFILE
  10315. LOXLSLISTENER
  10316. CWORKBOOKFILE
  10317. CWORKSHEETNAME    
  10318. CCODEPAGE
  10319. LCONVERTTOXLS
  10320. LEXCELCONVERTTOXLS
  10321. LREPEATHEADERS
  10322. LEXCELREPEATHEADERS
  10323. LREPEATFOOTERS
  10324. LEXCELREPEATFOOTERS
  10325. LHIDEPAGENO
  10326. LEXCELHIDEPAGENO
  10327. LALIGNLEFT
  10328. LEXCELALIGNLEFT
  10329. NEXCELSAVEFORMAT
  10330. LQUIETMODE
  10331. DOFOXYTHERM
  10332. GETLOC
  10333. _RUNSTATUSTEXT
  10334. LCOUTPUTDBF
  10335. LNWIDTH
  10336. LNHEIGHT    
  10337. OLISTENER
  10338. GETFULLFRXDATA
  10339. OUTPUTFROMDATA
  10340. LSAVED
  10341. SETERROR
  10342. LOPENVIEWER
  10343. _LSENDINGEMAIL
  10344. OPENFILE
  10345. HTMLListener
  10346. PR_HTMLListener
  10347. PR_ReportListener.vcx
  10348. ERR_CREATI
  10349. TCFILE    
  10350. _GOHELPER    
  10351. CDESTFILE
  10352. LOLISTENER
  10353. TARGETFILENAME    
  10354. QUIETMODE
  10355. LQUIETMODE
  10356. FXFEEDBACKCLASS
  10357. _CTHERMCLASS
  10358. LCOUTPUTDBF
  10359. LNWIDTH
  10360. LNHEIGHT    
  10361. OLISTENER
  10362. GETFULLFRXDATA
  10363. GETPAGEWIDTH
  10364. GETPAGEHEIGHT
  10365. OUTPUTFROMDATA
  10366. LSAVED
  10367. SETERROR
  10368. GETLOC
  10369. LOPENVIEWER
  10370. _LSENDINGEMAIL
  10371. OPENFILE$
  10372. REPORTLISTENER
  10373. pr_HTMLListener2
  10374. PR_HTMLListener2
  10375. ERR_CREATI
  10376. TCFILE
  10377. TLTEMP    
  10378. _GOHELPER    
  10379. CDESTFILE
  10380. LOHTMLLISTENER
  10381. CTARGETFILENAME    
  10382. QUIETMODE
  10383. LQUIETMODE
  10384. LCOUTPUTDBF
  10385. LNWIDTH
  10386. LNHEIGHT    
  10387. OLISTENER
  10388. GETFULLFRXDATA
  10389. GETPAGEWIDTH
  10390. GETPAGEHEIGHT
  10391. OUTPUTFROMDATA
  10392. DOFOXYTHERM
  10393. LSAVED
  10394. SETERROR
  10395. GETLOC
  10396. LOPENVIEWER
  10397. _LSENDINGEMAIL
  10398. OPENFILE
  10399. Pdf;Rtf;Xls;Xml;Png;Tiff;Bmp;Gif;Emf;Jpg;Htm
  10400. Pdf;Rtf;Xls;Xml;Png;Tiff;Bmp;Gif;Emf;Jpg;Htm
  10401. TEMP5
  10402. SAVEAS
  10403. ERR_CREATI
  10404. _GOHELPER
  10405. CLOSESHEETS
  10406. LCFILE
  10407. LCFOLDER
  10408. LCEXTENSIONS    
  10409. LEXTENDED
  10410. LEMAILAUTO
  10411. CSAVEDEFNAME    
  10412. OLISTENER
  10413. PRINTJOBNAME
  10414. CEMAILTYPE    
  10415. _CFRXNAME
  10416. GETLOC
  10417. LSAVED    
  10418. CDESTFILE
  10419. _LSENDINGEMAIL
  10420. LCFILEFORMAT
  10421. LOLISTENER
  10422. PREVIEWFORM
  10423. OREPORT
  10424. REPORT2PIC
  10425. SETERROR
  10426. SENDREPORTTOEMAIL
  10427. DOMAKEPDFOFFLINE
  10428. DOMAKERTFOFFLINE
  10429. DOMAKEXLSOFFLINE
  10430. ACTIONCLOSE
  10431. _LNOWAIT
  10432. DOOUTPUT
  10433. NKEYCODE
  10434. NSHIFTALTCTRL
  10435. COPIES
  10436. LCCOPIESCAPTION    
  10437. _GOHELPER
  10438. GETLOC
  10439. LBLCOPIES1
  10440. CAPTION
  10441. AUTOSIZE
  10442. _NBTSIZE
  10443. HEIGHT
  10444. TOOLTIPTEXT
  10445. SPNCOPIES1
  10446. LNTXTWIDTH
  10447. FONTNAME
  10448. FONTSIZE
  10449. WIDTHN
  10450. COMMANDBUTTON
  10451. TLENABLED    
  10452. LOCONTROL
  10453. CONTROLS
  10454. ENABLED
  10455. VALUE    
  10456. _GOHELPER
  10457. NCOPIES
  10458. _GOHELPER
  10459. NCOPIES
  10460. VALUE
  10461. Keycompv
  10462. {ENTER}
  10463. CHINESE
  10464. JAPANESE
  10465. KOREAN
  10466. {ALT+DNARROW}
  10467. PARENT
  10468. CMBSAVE1
  10469. VALUE
  10470. SETFOCUS    
  10471. _GOHELPER    
  10472. CLANGUAGE
  10473. PICTURE
  10474. PARENT
  10475. PREVIEWFORM
  10476. EXTENSIONHANDLER
  10477. IMGBTN_SAVE#
  10478. VALUE
  10479. NINDEX}
  10480. VALUE
  10481. LNINDEX
  10482. LIST    
  10483. LISTINDEX
  10484. NINDEX
  10485. PARENT
  10486. PREVIEWFORM
  10487. EXTENSIONHANDLER
  10488. DOSAVE
  10489. PARENT
  10490. PREVIEWFORM
  10491. EXTENSIONHANDLER
  10492. DOCUSTOMPRINT
  10493. PICTURE
  10494. PARENT
  10495. PREVIEWFORM
  10496. EXTENSIONHANDLER
  10497. IMGBTN_PRINTPREF
  10498. PARENT
  10499. PREVIEWFORM
  10500. EXTENSIONHANDLER
  10501. DOSETUP
  10502. PICTURE
  10503. PARENT
  10504. PREVIEWFORM
  10505. EXTENSIONHANDLER
  10506. IMGBTN_SETUP
  10507. PARENT
  10508. PREVIEWFORM
  10509. EXTENSIONHANDLER
  10510. DOSENDEMAIL
  10511. PICTURE
  10512. PARENT
  10513. PREVIEWFORM
  10514. EXTENSIONHANDLER
  10515. IMGBTN_EMAILa
  10516. PARENT
  10517. PREVIEWFORM
  10518. VISIBLE    
  10519. _GOHELPER
  10520. LPRINTED
  10521. CLOSESHEETS
  10522. EXTENSIONHANDLER
  10523. ACTIONCLOSE2
  10524. NBUTTON
  10525. NSHIFT
  10526. NXCOORD
  10527. NYCOORD
  10528. PICTURE
  10529. PARENT
  10530. PREVIEWFORM
  10531. EXTENSIONHANDLER
  10532. IMGBTN_CLOSE22
  10533. NBUTTON
  10534. NSHIFT
  10535. NXCOORD
  10536. NYCOORD
  10537. PICTURE
  10538. PARENT
  10539. PREVIEWFORM
  10540. EXTENSIONHANDLER
  10541. IMGBTN_CLOSE
  10542. PICTURE
  10543. PARENT
  10544. PREVIEWFORM
  10545. EXTENSIONHANDLER
  10546. IMGBTN_CLOSE
  10547. TOOLTIPTEXT
  10548. PR_PRINTREPOR
  10549. PARENT
  10550. PREVIEWFORM
  10551. EXTENSIONHANDLER
  10552. ACTIONPRINTEX
  10553. PICTURE
  10554. PARENT
  10555. PREVIEWFORM
  10556. EXTENSIONHANDLER
  10557. IMGBTN_PRINT
  10558. PARENT
  10559. PREVIEWFORM
  10560. EXTENSIONHANDLER
  10561. ACTIONGOTOPAGE
  10562. COMMANDBUTTON
  10563. TLENABLED    
  10564. LOCONTROL
  10565. CONTROLS
  10566. ENABLED
  10567. PARENT
  10568. PREVIEWFORM
  10569. EXTENSIONHANDLER
  10570. DOSEARCH"
  10571. PICTURE
  10572. PARENT
  10573. PREVIEWFORM
  10574. EXTENSIONHANDLER
  10575. IMGBTN_SEARCH
  10576. PARENT
  10577. PREVIEWFORM
  10578. EXTENSIONHANDLER
  10579. DOSEARCHAGAIN"
  10580. PICTURE
  10581. PARENT
  10582. PREVIEWFORM
  10583. EXTENSIONHANDLER
  10584. IMGBTN_SEARCHAGAIN
  10585. PARENT
  10586. PREVIEWFORM
  10587. EXTENSIONHANDLER
  10588. DOSEARCHBACK"
  10589. PICTURE
  10590. PARENT
  10591. PREVIEWFORM
  10592. EXTENSIONHANDLER
  10593. IMGBTN_SEARCHBACK
  10594. Printer
  10595. COMBOBOX
  10596. LCDEFPRINTER
  10597. LCCURRPRINTER
  10598. LNPRINTERS
  10599. LAPRINTERS
  10600. ADDITEM
  10601. NEWINDEX    
  10602. LISTINDEX
  10603. _CORIGINALPRINTER
  10604. LCITEM    
  10605. LISTCOUNT
  10606. LCVALUE
  10607. LCORIGPRINTER
  10608. VALUE    
  10609. _GOHELPER
  10610. _CORIGINALPRINTER
  10611. CPRINTERNAME
  10612. PARENT
  10613. PREVIEWFORM
  10614. EXTENSIONHANDLER
  10615. DOPROOF
  10616. PICTURE
  10617. PARENT
  10618. PREVIEWFORM
  10619. EXTENSIONHANDLER
  10620. IMGBTN_MINI
  10621. REPORTTITL
  10622. GOTOPG_CAP
  10623. NSTYLE
  10624. PAGENO
  10625. OPARENTFORM
  10626. CURRENTPAGE    
  10627. PAGETOTAL
  10628. CAPTION    
  10629. _GOHELPER
  10630. GETLOC
  10631. LBLCAPTION
  10632. SHOWWINDOW
  10633. AUTOCENTER
  10634. VIEWPORTLEFT
  10635. WIDTH
  10636. VIEWPORTTOP
  10637. HEIGHT    
  10638. SPNPAGENO
  10639. SPINNERLOWVALUE
  10640. SPINNERHIGHVALUE
  10641. KEYBOARDLOWVALUE
  10642. KEYBOARDHIGHVALUE
  10643. VALUE_
  10644. GOTOPG_OK
  10645. CANCEL
  10646. CMDOK
  10647. CAPTION    
  10648. _GOHELPER
  10649. GETLOC    
  10650. CMDCANCELe
  10651. VALUE
  10652. SPINNERLOWVALUE
  10653. SPINNERHIGHVALUE/
  10654. PARENT
  10655. PAGENO    
  10656. SPNPAGENO
  10657. VALUE
  10658. HIDE 
  10659. PARENT
  10660. THISFORM
  10661. RELEASEF
  10662. _GOHELPER    
  10663. CFORMICON
  10664. ICON&
  10665. NBUTTON
  10666. NSHIFT
  10667. NXCOORD
  10668. NYCOORD
  10669. MOUSEPOINTER<
  10670. NBUTTON
  10671. NSHIFT
  10672. NXCOORD
  10673. NYCOORD
  10674. MOUSEPOINTER
  10675. PARENT
  10676. NCURRSHAPE
  10677. PAGENO(
  10678. THISFORM
  10679. CURRENTPAGE
  10680. PAGENO
  10681. FIRST
  10682. CTYPE
  10683. PARENT
  10684. NPAGESET
  10685. NPAGES
  10686. NMAXMINIATUREITEM
  10687. REFRESHPAGEBTN    
  10688. FIRST
  10689. CTYPE
  10690. ENABLED
  10691. PARENT
  10692. NPAGESET
  10693. NPAGES
  10694. NMAXMINIATUREITEM
  10695. PageSetFirst
  10696. PageSetBtn
  10697. pr_top.bmp
  10698. MINIFIRSTT
  10699. FIRST
  10700. PageSetPrev
  10701. PageSetBtn
  10702. pr_previous.bmp
  10703. MINIPREVTI
  10704. PageSetNext
  10705. PageSetBtn
  10706. pr_next.bmp
  10707. MININEXTTI
  10708. PageSetLast
  10709. PageSetBtn
  10710. pr_bottom.bmp
  10711. MINILASTTI
  10712. PageSetCaption
  10713. Label
  10714. Arial
  10715. ESCAPE
  10716. ESCAPE
  10717. _VFP.ACTIVEFORM.RELEASE()
  10718. THIS    
  10719. ADDOBJECT
  10720. NOTHERTHENPROOFOBJ
  10721. PAGESETFIRST
  10722. CAPTION
  10723. PICTURE
  10724. TOOLTIPTEXT    
  10725. _GOHELPER
  10726. GETLOC
  10727. CTYPE
  10728. VISIBLE
  10729. PAGESETPREV
  10730. WIDTH
  10731. PAGESETNEXT
  10732. PAGESETLAST
  10733. PAGESETCAPTION
  10734. AUTOSIZE
  10735. FONTNAME
  10736. FONTSIZE
  10737. FONTBOLD
  10738. HEIGHT
  10739. OLDESCFUNCTION
  10740. ESCAPE#
  10741. PAGESETNEXT
  10742. REFRESH
  10743. PAGESETPREV1
  10744. OREPORT
  10745. REPORTLISTENER
  10746. NPAGES
  10747. OUTPUTPAGECOUNT}
  10748. WINDOWSTATE    
  10749. LINACTIVE    
  10750. LSHOWDONE
  10751. PAINT
  10752. THIS    
  10753. LSHOWDONE
  10754. VNEWVALUE
  10755. NPAGESET
  10756. NPAGES
  10757. NMAXMINIATUREITEM
  10758. NOTHERTHENPROOFOBJ
  10759. OBJECTS
  10760. COUNT
  10761. VISIBLE
  10762. SETPROOFCAPTION
  10763. MINILABEL
  10764. %FP%C
  10765. %LP%C
  10766. CMESSAGE
  10767. NFIRSTPAGE    
  10768. NLASTPAGE
  10769. NPAGESET
  10770. NMAXMINIATUREITEM
  10771. NPAGES    
  10772. _GOHELPER
  10773. GETLOC
  10774. PAGESETCAPTION
  10775. CAPTION)
  10776. ONEWVALUE
  10777. REPORTLISTENER
  10778. DORESIZEPROOFSHEET)
  10779. NNEWITEM
  10780. NMAXMINIATUREITEM
  10781. DORESIZEPROOFSHEET
  10782. REPORTLISTENER
  10783. NPROOFWIDTH
  10784. GETPAGEWIDTH
  10785. NPROOFHEIGHT
  10786. GETPAGEHEIGHT
  10787. NMAXSCREENWTOCONSIDERE
  10788. WIDTH
  10789. NMAXSCREENHTOCONSIDERE
  10790. HEIGHT
  10791. NNBCOL
  10792. NPAGES
  10793. NNBROW
  10794. NMAXMINIATUREITEM
  10795. NBASEHEIGHT    
  10796. _GOHELPER
  10797. _NBTSIZE
  10798. AUTOCENTER
  10799. This.Objects[m.i - ((This.nPageSet - 1) * This.nMaxMiniatureItem) + This.nOtherThenProofObj]b
  10800. PAGECAPTIO
  10801. REPORTLISTENER    
  10802. LSHOWDONE
  10803. NPAGESET
  10804. NMAXMINIATUREITEM
  10805. NPAGES
  10806. OBJECTS
  10807. NOTHERTHENPROOFOBJ
  10808. TOOLTIPTEXT    
  10809. _GOHELPER
  10810. GETLOC
  10811. OUTPUTPAGE
  10812. ProofShape
  10813. NSTYLE
  10814. NPAGES
  10815. NMAXMINIATUREITEM
  10816. LSTARTED
  10817. PAGESETFIRST
  10818. VISIBLE
  10819. PAGESETPREV
  10820. PAGESETNEXT
  10821. PAGESETLAST
  10822. PAGESETCAPTION
  10823. IROWOFFSET    
  10824. _GOHELPER
  10825. _NBTSIZE
  10826. ICOLOFFSET
  10827. NPROOFWIDTH
  10828. REPORTLISTENER
  10829. GETPAGEWIDTH
  10830. NPROOFHEIGHT
  10831. GETPAGEHEIGHT    
  10832. ICOLCOUNT
  10833. THISFORM
  10834. WIDTH
  10835. NCURCOL    
  10836. LSHOWDONE
  10837. NPAGESET    
  10838. NOBJECTID
  10839. NOTHERTHENPROOFOBJ    
  10840. ADDOBJECT
  10841. OBJECTS
  10842. HEIGHT
  10843. PAGENOL
  10844. ON KEY LABEL ESCAPE &EscFUNCTION
  10845. CESCFUNCTION
  10846. REPORTLISTENER
  10847. ESCFUNCTION
  10848. OLDESCFUNCTION]
  10849. ScreenToClient
  10850. user32Q
  10851. PR_ScreenToClient
  10852. CPOINT
  10853. SCREENTOCLIENT
  10854. USER32
  10855. PR_SCREENTOCLIENTM
  10856. GetCursorPos
  10857. user32Q
  10858. PR_GetCursorPos
  10859. CPOINT
  10860. GETCURSORPOS
  10861. USER32
  10862. PR_GETCURSORPOSQ
  10863. PathFileExists
  10864. shlwapiQ
  10865. PR_PathFileExists
  10866. PSZPATH
  10867. PATHFILEEXISTS
  10868. SHLWAPI
  10869. PR_PATHFILEEXISTS6
  10870. GetFocus
  10871. user32Q
  10872. PR_GetFocus
  10873. GETFOCUS
  10874. USER32
  10875. PR_GETFOCUSg
  10876. GetWindowText
  10877. user32Q
  10878. PR_GetWindowText
  10879. LPSTRING
  10880. GETWINDOWTEXT
  10881. USER32
  10882. PR_GETWINDOWTEXTD
  10883. GetActiveWindow
  10884. user32Q
  10885. PR_GetActiveWindow
  10886. GETACTIVEWINDOW
  10887. USER32
  10888. PR_GETACTIVEWINDOW
  10889. MAPISendDocuments
  10890. mapi32Q
  10891. PR_MAPISendDocuments
  10892. ULUIPARAM
  10893. LPSZDELIMCHAR
  10894. LPSZFULLPATHS
  10895. LPSZFILENAMES
  10896. ULRESERVED
  10897. MAPISENDDOCUMENTS
  10898. MAPI32
  10899. PR_MAPISENDDOCUMENTS
  10900. NOCONSOLE
  10901. noconsole
  10902. PREVIEW
  10903. preview
  10904. TCCLAUSES    
  10905. LCCLAUSES
  10906. TCPRINTER
  10907. LNBINS
  10908. LCBUFF
  10909. LLDOTMATRIX
  10910. PR_DEVICECAPABILITIES
  10911. LOEXC
  10912. DeviceCapabilities
  10913. WinSpool.drvQ
  10914. PR_DeviceCapabilities
  10915. SPRINTER
  10916. SPORT
  10917. NCAPABILITY
  10918. SRETURN
  10919. PDEVMODE
  10920. DEVICECAPABILITIES
  10921. WINSPOOL
  10922. PR_DEVICECAPABILITIESL
  10923. MessageBeep
  10924. Win32APIQ
  10925. PR_MessageBeep
  10926. NTYPE
  10927. MESSAGEBEEP
  10928. WIN32API
  10929. PR_MESSAGEBEEP*
  10930. HWINDOW
  10931. PR_GETFOCUS
  10932. GETWINTEXT
  10933. HWINDOW    
  10934. LNBUFSIZE
  10935. LCBUFFER
  10936. PR_GETWINDOWTEXT
  10937. PChar
  10938. PCharC
  10939. PChar
  10940. PChar
  10941. PChar
  10942. PChar
  10943. PChar
  10944. PCharCC
  10945. TCATTACHMENT
  10946. TCRECIPIENT    
  10947. TCSUBJECT
  10948. TCTEXT
  10949. LCATTACHMENT
  10950. LCRECIPIENT    
  10951. LCSUBJECT
  10952. LCTEXT
  10953. DECLMAPI
  10954. HSESSION
  10955. GETNEWSESSION
  10956. LORCPEMAIL
  10957. LOSNDBUF
  10958. LCRCPBUF    
  10959. LOSUBJECT
  10960. LONOTETEXT
  10961. LORCPBUF
  10962. LCMAPIMESSAGE
  10963. LNRESULT
  10964. LOATTACH    
  10965. LOATTPATH    
  10966. LOATTNAME
  10967. LCATTSTRUCT    
  10968. NUM2DWORD
  10969. GETADDR
  10970. MAPISENDMAIL    
  10971. LLSUCCESS
  10972. PR_MAPISHOWMESSAGE
  10973. MAPILOGOFF
  10974. LNRESULT    
  10975. LNSESSION
  10976. LCSTOREDPATH    
  10977. MAPILOGON
  10978. PR_MAPISHOWMESSAGE    
  10979. _GOHELPER
  10980. LEMAILED
  10981. LNVALUEC
  10982. LCSTRING
  10983. SETVALUE
  10984. RELEASESTRING
  10985. RtlMoveMemory
  10986. kernel32Q
  10987. Heap2Str
  10988. LNSIZE
  10989. LCBUFFER
  10990. GETALLOCSIZE
  10991. RTLMOVEMEMORY
  10992. KERNEL32
  10993. HEAP2STRG
  10994. GlobalSize
  10995. kernel32
  10996. GLOBALSIZE
  10997. KERNEL32
  10998. GlobalAlloc
  10999. kernel32
  11000. RtlMoveMemory
  11001. kernel32Q
  11002. Str2Heap
  11003. LCSTRING
  11004. RELEASESTRING
  11005. GLOBALALLOC
  11006. KERNEL32
  11007. RTLMOVEMEMORY
  11008. STR2HEAP
  11009. LNSIZE
  11010. HMEMZ
  11011. GlobalFree
  11012. kernel32
  11013. GLOBALFREE
  11014. KERNEL32y
  11015. MAPILogon
  11016. mapi32
  11017. MAPILogoff
  11018. mapi32
  11019. MAPISendMail
  11020. mapi32
  11021. MAPILOGON
  11022. MAPI32
  11023. MAPILOGOFF
  11024. MAPISENDMAIL%
  11025. ENGLISH
  11026. FRENCH
  11027. PORTUGUESE
  11028. ALBANIAN
  11029. CATALAN
  11030. DANISH
  11031. DUTCH
  11032. FAEROESE
  11033. FINNISH
  11034. GALICIAN
  11035. GERMAN
  11036. ICELANDIC
  11037. ITALIAN
  11038. NORWEGIAN
  11039. SPANISH
  11040. SWEDISH
  11041. windows-CC
  11042. AERRORS    
  11043. LCCHARSET    
  11044. _GOHELPER    
  11045. CLANGUAGE    
  11046. CCODEPAGE
  11047. CCHARSETC
  11048. CDO.Configuration
  11049. CDO.Message
  11050. ERROR : From is Empty.
  11051. ERROR : Subject is Empty.
  11052. ERROR : To,CC and BCC all are Empty.
  11053. ATACHNOTFO
  11054. urn:schemas:mailheader:disposition-notification-to
  11055. urn:schemas:mailheader:return-receipt-to
  11056. Priority
  11057. urn:schemas:mailheader:X-Priority
  11058. urn:schemas:httpmail:importance
  11059. CLEARERRORS
  11060. CONFIGURATION
  11061. LNIND
  11062. LALIST
  11063. LOHEADER
  11064. LADUMMY
  11065. SETCONFIGURATION
  11066. GETERRORCOUNT
  11067. CFROM
  11068. ADDERROR
  11069. CSUBJECT
  11070. CBCC    
  11071. SETHEADER
  11072. REPLYTO
  11073. CREPLYTO
  11074. SUBJECT
  11075. CHTMLBODYURL
  11076. CREATEMHTMLBODY    
  11077. CHTMLBODY
  11078. HTMLBODY    
  11079. CTEXTBODY
  11080. TEXTBODY
  11081. HTMLBODYPART
  11082. CHARSET
  11083. CCHARSET
  11084. TEXTBODYPART
  11085. CATTACHMENT
  11086. LCATTACHMENT    
  11087. _GOHELPER
  11088. GETLOC
  11089. ADDATTACHMENT
  11090. LREADRECEIPT
  11091. FIELDS
  11092. UPDATE    
  11093. LPRIORITY
  11094. VALUE
  11095. BODYPART    
  11096. SHOWTHERM
  11097. CLEARTHERMC
  11098. NERRORCOUNT
  11099. AERRORS
  11100. NERRORCOUNTG
  11101. TNERRORNO
  11102. GETERRORCOUNT
  11103. AERRORS%
  11104. SMTPNOTSPE
  11105. BADAUTHPRO
  11106. INFOREQUIR
  11107. http://schemas.microsoft.com/cdo/configuration/sendusing
  11108. http://schemas.microsoft.com/cdo/configuration/smtpserver
  11109. http://schemas.microsoft.com/cdo/configuration/smtpserverport
  11110. http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout
  11111. http://schemas.microsoft.com/cdo/configuration/smtpauthenticate
  11112. http://schemas.microsoft.com/cdo/configuration/sendusername
  11113. http://schemas.microsoft.com/cdo/configuration/sendpassword
  11114. http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion
  11115. http://schemas.microsoft.com/cdo/configuration/smtpusessl
  11116. CSERVER
  11117. ADDERROR    
  11118. _GOHELPER
  11119. GETLOC
  11120. NAUTHENTICATE    
  11121. CUSERNAME    
  11122. CPASSWORD
  11123. GETERRORCOUNT
  11124. FIELDS
  11125. NSERVERPORT
  11126. NCONNECTIONTIMEOUT
  11127. LURLGETLATESTVERSION
  11128. LUSESSL
  11129. UPDATE[
  11130. TCERRORMSG
  11131. NERRORCOUNT
  11132. AERRORS
  11133. TCPREFIX
  11134. TNERROR
  11135. TCMETHOD
  11136. TNLINE
  11137. LCERRORMSG
  11138. LALIST
  11139. ADDERROR
  11140. NERRORCOUNT@
  11141. TNERROR
  11142. TCMETHOD
  11143. TNLINE
  11144. ADDONEERROR
  11145. NERRORCOUNT
  11146. urn:schemas:mailheader:x-mailer
  11147. LOHEADER
  11148. CXMAILER
  11149. FIELDS
  11150. UPDATE/
  11151. OTHERMFORM
  11152. ITLFForm
  11153. Therm
  11154. ctl32_progressbar
  11155. pr_ctl32_progressbar
  11156. MSGSENDING
  11157. _GOHELPER
  11158. LQUIETMODE
  11159. LOTHERMFORM
  11160. LNTHERMMARGIN
  11161. LITHERMHEIGHT
  11162. LITHERMWIDTH
  11163. LITHERMTOP
  11164. LITHERMLEFT    
  11165. SCALEMODE
  11166. HEIGHT
  11167. HALFHEIGHTCAPTION
  11168. WIDTH
  11169. AUTOCENTER
  11170. BORDERSTYLE
  11171. CONTROLBOX
  11172. CLOSABLE    
  11173. MAXBUTTON    
  11174. MINBUTTON
  11175. MOVABLE
  11176. ALWAYSONTOP
  11177. ALLOWOUTPUT    
  11178. NEWOBJECT
  11179. CAPTION
  11180. GETLOC
  11181. VISIBLE
  11182. THERM
  11183. MARQUEE
  11184. MARQUEEANIMATIONSPEED
  11185. MARQUEESPEED
  11186. OTHERMFORM
  11187. LCTYPE
  11188. THIS    
  11189. CDESTFILE
  11190. DESTROY
  11191. Report Listener could not be accessed
  11192. bitmap
  11193. TOLISTENER
  11194. TCDESTFILE
  11195. TCFILEFORMAT
  11196. LNPAGECOUNT
  11197. LNFILETYPE
  11198. LNDEVICETYPE    
  11199. _GOHELPER
  11200. NPAGETOTAL    
  11201. PAGETOTAL
  11202. LNPAGENO
  11203. OUTPUTPAGE
  11204. LCPATHFILE
  11205. LCDESTFILE
  11206. LCINDEX    
  11207. LLSUCCESSM
  11208. PR_SendMail2.scx
  11209. PR_SendMail.scx
  11210. PR_SendMail2.scx
  11211. DESTNOTDEF
  11212. BADCONFIG
  11213. SMTPNOTSPE
  11214. BADCONFIG
  11215. FROMEMPTY
  11216. BADCONFIG
  11217. SUBJEMPTY
  11218. BADCONFIG
  11219. CDO2000
  11220. Cdo2000
  11221. <HTML><BR></HTML>
  11222. <HTML>
  11223. ERRSENDMAI
  11224. MSGNOTSENT
  11225. ERRSENDMAI
  11226. MSGSUCCESS
  11227. SENDEMAIL
  11228. TCFILE
  11229. TLDONOTEDITMESSAGE
  11230. OFOXYPREVIEWER
  11231. LOFP    
  11232. _GOHELPER    
  11233. CCODEPAGE
  11234. CEMAILTO
  11235. CSMTPSERVER
  11236. LEMAILAUTO
  11237. CEMAILTYPE    
  11238. CEMAILPRG    
  11239. NSMTPPORT
  11240. LSMTPUSESSL
  11241. CSMTPUSERNAME
  11242. CSMTPPASSWORD
  11243. CEMAILFROM
  11244. CEMAILCC    
  11245. CEMAILBCC
  11246. CEMAILSUBJECT
  11247. CEMAILREPLYTO
  11248. CEMAILBODY
  11249. LREADRECEIPT    
  11250. LPRIORITY
  11251. LEMAILED
  11252. LLCANCELLED
  11253. CLOSESHEETS    
  11254. LLVISIBLE    
  11255. LOTOOLBAR
  11256. LOFORM
  11257. _OEXHANDLER
  11258. PREVIEWFORM
  11259. TOOLBAR
  11260. VISIBLE
  11261. LCEMAILFORM
  11262. NEMAILMODE
  11263. SHOWTOOLBAR
  11264. _OEMAILSHEET
  11265. SETERROR
  11266. GETLOC
  11267. LOMAIL
  11268. CSERVER
  11269. NSERVERPORT
  11270. LUSESSL
  11271. NAUTHENTICATE    
  11272. CUSERNAME
  11273. LAUTOSENDMAIL    
  11274. CPASSWORD    
  11275. DODECRYPT
  11276. CFROM
  11277. CSUBJECT
  11278. CREPLYTO    
  11279. CHTMLBODY    
  11280. CTEXTBODY
  11281. _CATTACHMENT
  11282. CATTACHMENT
  11283. CATTACHMENTS
  11284. SEND    
  11285. LCMAILERR
  11286. GETERRORCOUNT
  11287. GETERROR
  11288. LSILENTf
  11289. OpenPrinter
  11290. winspool.drv
  11291. GetActiveWindow
  11292. user32
  11293. DocumentProperties
  11294. winspool.drv
  11295. ClosePrinter
  11296. winspool.drv
  11297. Printer
  11298. Could not open printer.
  11299. Error
  11300. TempCur
  11301. TempCur
  11302. RptFile
  11303. LCRPTFILE
  11304. LHWINDOW
  11305. LCORIGDEVMODE
  11306. LCMODIFIEDDEVMODE    
  11307. LCPRINTER    
  11308. LHPRINTER
  11309. OPENPRINTER
  11310. WINSPOOL
  11311. GETACTIVEWINDOW
  11312. USER32
  11313. DOCUMENTPROPERTIES
  11314. CLOSEPRINTER
  11315. TEMPCUR
  11316. RPTFILE    
  11317. LCOLDEXPR
  11318. LCOLDTAG
  11319. LCOLDTAG2
  11320. TAG2    
  11321. LCDEVMODE
  11322. LNRESULT
  11323. IDCANCEL
  11324. LOEXCEPTION
  11325. GdipDrawString
  11326. GDIPLUS.DLLQ
  11327. xfcGdipDrawString
  11328. GRAPHICS
  11329. LENGTH
  11330. THEFONT
  11331. LAYOUTRECT
  11332. STRINGFORMAT
  11333. BRUSH
  11334. GDIPDRAWSTRING
  11335. GDIPLUS
  11336. XFCGDIPDRAWSTRING
  11337. GdipMeasureString
  11338. GDIPLUS.DLLQ
  11339. xfcGdipMeasureString
  11340. GRAPHICS
  11341. LENGTH
  11342. THEFONT
  11343. LAYOUTRECT
  11344. STRINGFORMAT
  11345. BOUNDINGBOX
  11346. CODEPOINTSFITTED
  11347. LINESFILLED
  11348. GDIPMEASURESTRING
  11349. GDIPLUS
  11350. XFCGDIPMEASURESTRINGk
  11351. GdipRestoreGraphics
  11352. GDIPLUS.DLLQ
  11353. xfcGdipRestoreGraphics
  11354. GRAPHICS
  11355. STATE
  11356. GDIPRESTOREGRAPHICS
  11357. GDIPLUS
  11358. XFCGDIPRESTOREGRAPHICSf
  11359. GdipSaveGraphics
  11360. GDIPLUS.DLLQ
  11361. xfcGdipSaveGraphics
  11362. GRAPHICS
  11363. STATE
  11364. GDIPSAVEGRAPHICS
  11365. GDIPLUS
  11366. XFCGDIPSAVEGRAPHICSq
  11367. GdipSetPixelOffsetMode
  11368. GDIPLUS.DLLQ
  11369. xfcGdipSetPixelOffsetMode
  11370. GRAPHICS
  11371. PIXOFFSETMODE
  11372. GDIPSETPIXELOFFSETMODE
  11373. GDIPLUS
  11374. XFCGDIPSETPIXELOFFSETMODE}
  11375. GdipSetRenderingOrigin
  11376. GDIPLUS.DLLQ
  11377. xfcGdipSetRenderingOrigin
  11378. GRAPHICS
  11379. GDIPSETRENDERINGORIGIN
  11380. GDIPLUS
  11381. XFCGDIPSETRENDERINGORIGINm
  11382. GdipSetSmoothingMode
  11383. GDIPLUS.DLLQ
  11384. xfcGdipSetSmoothingMode
  11385. GRAPHICS
  11386. SMOOTHINGMD
  11387. GDIPSETSMOOTHINGMODE
  11388. GDIPLUS
  11389. XFCGDIPSETSMOOTHINGMODEu
  11390. GdipSetStringFormatAlign
  11391. GDIPLUS.DLLQ
  11392. xfcGdipSetStringFormatAlign
  11393. STRINGFORMAT
  11394. ALIGN
  11395. GDIPSETSTRINGFORMATALIGN
  11396. GDIPLUS
  11397. XFCGDIPSETSTRINGFORMATALIGNu
  11398. GdipSetStringFormatFlags
  11399. GDIPLUS.DLLQ
  11400. xfcGdipSetStringFormatFlags
  11401. STRINGFORMAT
  11402. FLAGS
  11403. GDIPSETSTRINGFORMATFLAGS
  11404. GDIPLUS
  11405. XFCGDIPSETSTRINGFORMATFLAGSu
  11406. GdipSetTextRenderingHint
  11407. GDIPLUS.DLLQ
  11408. xfcGdipSetTextRenderingHint
  11409. GRAPHICS
  11410. GDIPSETTEXTRENDERINGHINT
  11411. GDIPLUS
  11412. XFCGDIPSETTEXTRENDERINGHINTo
  11413. GdipSetWorldTransform
  11414. GDIPLUS.DLLQ
  11415. xfcGdipSetWorldTransform
  11416. GRAPHICS
  11417. MATRIX
  11418. GDIPSETWORLDTRANSFORM
  11419. GDIPLUS
  11420. XFCGDIPSETWORLDTRANSFORM
  11421. GdipStringFormatGetGenericTypographic
  11422. GDIPLUS.DLLQ
  11423. xfcGdipStringFormatGetGenericTypographic
  11424. STRINGFORMAT%
  11425. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  11426. GDIPLUS
  11427. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  11428. GdipTransformPoints
  11429. GDIPLUS.DLLQ
  11430. xfcGdipTransformPoints
  11431. GRAPHICS    
  11432. DESTSPACE
  11433. SRCSPACE
  11434. PPOINT
  11435. COUNT
  11436. GDIPTRANSFORMPOINTS
  11437. GDIPLUS
  11438. XFCGDIPTRANSFORMPOINTS
  11439. GdipTransformPointsI
  11440. GDIPLUS.DLLQ
  11441. xfcGdipTransformPointsI
  11442. GRAPHICS    
  11443. DESTSPACE
  11444. SRCSPACE
  11445. PPOINT
  11446. COUNT
  11447. GDIPTRANSFORMPOINTSI
  11448. GDIPLUS
  11449. XFCGDIPTRANSFORMPOINTSIs
  11450. GdipTranslateClip
  11451. GDIPLUS.DLLQ
  11452. xfcGdipTranslateClip
  11453. GRAPHICS
  11454. GDIPTRANSLATECLIP
  11455. GDIPLUS
  11456. XFCGDIPTRANSLATECLIPp
  11457. GdipCloneStringFormat
  11458. GDIPLUS.DLLQ
  11459. xfcGdipCloneStringFormat
  11460. STRINGFORMAT    
  11461. NEWFORMAT
  11462. GDIPCLONESTRINGFORMAT
  11463. GDIPLUS
  11464. XFCGDIPCLONESTRINGFORMAT~
  11465. GdipCreateStringFormat
  11466. GDIPLUS.DLLQ
  11467. xfcGdipCreateStringFormat
  11468. FORMATATTRIBUTES
  11469. LANGUAGE
  11470. STRINGFORMAT
  11471. GDIPCREATESTRINGFORMAT
  11472. GDIPLUS
  11473. XFCGDIPCREATESTRINGFORMATe
  11474. GdipDeleteStringFormat
  11475. GDIPLUS.DLLQ
  11476. xfcGdipDeleteStringFormat
  11477. STRINGFORMAT
  11478. GDIPDELETESTRINGFORMAT
  11479. GDIPLUS
  11480. XFCGDIPDELETESTRINGFORMATv
  11481. GdipGetStringFormatAlign
  11482. GDIPLUS.DLLQ
  11483. xfcGdipGetStringFormatAlign
  11484. STRINGFORMAT
  11485. ALIGN
  11486. GDIPGETSTRINGFORMATALIGN
  11487. GDIPLUS
  11488. XFCGDIPGETSTRINGFORMATALIGN
  11489. GdipGetStringFormatDigitSubstitution
  11490. GDIPLUS.DLLQ
  11491. xfcGdipGetStringFormatDigitSubstitution
  11492. STRINGFORMAT
  11493. LANGUAGE
  11494. SUBSTITUTE$
  11495. GDIPGETSTRINGFORMATDIGITSUBSTITUTION
  11496. GDIPLUS
  11497. XFCGDIPGETSTRINGFORMATDIGITSUBSTITUTIONv
  11498. GdipGetStringFormatFlags
  11499. GDIPLUS.DLLQ
  11500. xfcGdipGetStringFormatFlags
  11501. STRINGFORMAT
  11502. FLAGS
  11503. GDIPGETSTRINGFORMATFLAGS
  11504. GDIPLUS
  11505. XFCGDIPGETSTRINGFORMATFLAGS
  11506. GdipGetStringFormatHotkeyPrefix
  11507. GDIPLUS.DLLQ
  11508. xfcGdipGetStringFormatHotkeyPrefix
  11509. STRINGFORMAT
  11510. HKPREFIX
  11511. GDIPGETSTRINGFORMATHOTKEYPREFIX
  11512. GDIPLUS
  11513. XFCGDIPGETSTRINGFORMATHOTKEYPREFIX~
  11514. GdipGetStringFormatLineAlign
  11515. GDIPLUS.DLLQ
  11516. xfcGdipGetStringFormatLineAlign
  11517. STRINGFORMAT
  11518. ALIGN
  11519. GDIPGETSTRINGFORMATLINEALIGN
  11520. GDIPLUS
  11521. XFCGDIPGETSTRINGFORMATLINEALIGN
  11522. GdipGetStringFormatTabStopCount
  11523. GDIPLUS.DLLQ
  11524. xfcGdipGetStringFormatTabStopCount
  11525. STRINGFORMAT
  11526. COUNT
  11527. GDIPGETSTRINGFORMATTABSTOPCOUNT
  11528. GDIPLUS
  11529. XFCGDIPGETSTRINGFORMATTABSTOPCOUNT
  11530. GdipGetStringFormatTabStops
  11531. GDIPLUS.DLLQ
  11532. xfcGdipGetStringFormatTabStops
  11533. STRINGFORMAT
  11534. COUNT
  11535. FIRSTTABOFFSET
  11536. TABSTOPS
  11537. GDIPGETSTRINGFORMATTABSTOPS
  11538. GDIPLUS
  11539. XFCGDIPGETSTRINGFORMATTABSTOPS|
  11540. GdipGetStringFormatTrimming
  11541. GDIPLUS.DLLQ
  11542. xfcGdipGetStringFormatTrimming
  11543. STRINGFORMAT
  11544. TRIMMING
  11545. GDIPGETSTRINGFORMATTRIMMING
  11546. GDIPLUS
  11547. XFCGDIPGETSTRINGFORMATTRIMMINGu
  11548. GdipSetStringFormatAlign
  11549. GDIPLUS.DLLQ
  11550. xfcGdipSetStringFormatAlign
  11551. STRINGFORMAT
  11552. ALIGN
  11553. GDIPSETSTRINGFORMATALIGN
  11554. GDIPLUS
  11555. XFCGDIPSETSTRINGFORMATALIGN
  11556. GdipSetStringFormatDigitSubstitution
  11557. GDIPLUS.DLLQ
  11558. xfcGdipSetStringFormatDigitSubstitution
  11559. STRINGFORMAT
  11560. LANGUAGE
  11561. SUBSTITUTE$
  11562. GDIPSETSTRINGFORMATDIGITSUBSTITUTION
  11563. GDIPLUS
  11564. XFCGDIPSETSTRINGFORMATDIGITSUBSTITUTIONu
  11565. GdipSetStringFormatFlags
  11566. GDIPLUS.DLLQ
  11567. xfcGdipSetStringFormatFlags
  11568. STRINGFORMAT
  11569. FLAGS
  11570. GDIPSETSTRINGFORMATFLAGS
  11571. GDIPLUS
  11572. XFCGDIPSETSTRINGFORMATFLAGS
  11573. GdipSetStringFormatHotkeyPrefix
  11574. GDIPLUS.DLLQ
  11575. xfcGdipSetStringFormatHotkeyPrefix
  11576. STRINGFORMAT
  11577. HKPREFIX
  11578. GDIPSETSTRINGFORMATHOTKEYPREFIX
  11579. GDIPLUS
  11580. XFCGDIPSETSTRINGFORMATHOTKEYPREFIX}
  11581. GdipSetStringFormatLineAlign
  11582. GDIPLUS.DLLQ
  11583. xfcGdipSetStringFormatLineAlign
  11584. STRINGFORMAT
  11585. ALIGN
  11586. GDIPSETSTRINGFORMATLINEALIGN
  11587. GDIPLUS
  11588. XFCGDIPSETSTRINGFORMATLINEALIGN
  11589. GdipSetStringFormatMeasurableCharacterRanges
  11590. GDIPLUS.DLLQ
  11591. xfcGdipSetStringFormatMeasurableCharacterRanges
  11592. STRINGFORMAT
  11593. RANGECOUNT
  11594. RANGES,
  11595. GDIPSETSTRINGFORMATMEASURABLECHARACTERRANGES
  11596. GDIPLUS
  11597. XFCGDIPSETSTRINGFORMATMEASURABLECHARACTERRANGES
  11598. GdipSetStringFormatTabStops
  11599. GDIPLUS.DLLQ
  11600. xfcGdipSetStringFormatTabStops
  11601. STRINGFORMAT
  11602. FIRSTTABOFFSET
  11603. COUNT
  11604. TABSTOPS
  11605. GDIPSETSTRINGFORMATTABSTOPS
  11606. GDIPLUS
  11607. XFCGDIPSETSTRINGFORMATTABSTOPS{
  11608. GdipSetStringFormatTrimming
  11609. GDIPLUS.DLLQ
  11610. xfcGdipSetStringFormatTrimming
  11611. STRINGFORMAT
  11612. TRIMMING
  11613. GDIPSETSTRINGFORMATTRIMMING
  11614. GDIPLUS
  11615. XFCGDIPSETSTRINGFORMATTRIMMING|
  11616. GdipStringFormatGetGenericDefault
  11617. GDIPLUS.DLLQ
  11618. xfcGdipStringFormatGetGenericDefault
  11619. STRINGFORMAT!
  11620. GDIPSTRINGFORMATGETGENERICDEFAULT
  11621. GDIPLUS
  11622. XFCGDIPSTRINGFORMATGETGENERICDEFAULT
  11623. GdipStringFormatGetGenericTypographic
  11624. GDIPLUS.DLLQ
  11625. xfcGdipStringFormatGetGenericTypographic
  11626. STRINGFORMAT%
  11627. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  11628. GDIPLUS
  11629. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHICk
  11630. CreateDC
  11631. WIN32APIQ
  11632. xfcCreateDC
  11633. CDRIVER
  11634. CDEVICE
  11635. LPSZOUTPUT
  11636. LPINITDATA
  11637. CREATEDC
  11638. WIN32API
  11639. XFCCREATEDCF
  11640. DeleteDC
  11641. WIN32APIQ
  11642. xfcDeleteDC
  11643. DELETEDC
  11644. WIN32API
  11645. XFCDELETEDCE
  11646. StartPage
  11647. gdi32Q
  11648. xfcStartPage
  11649. STARTPAGE
  11650. GDI32
  11651. XFCSTARTPAGEA
  11652. EndPage
  11653. gdi32Q
  11654. xfcEndPage
  11655. ENDPAGE
  11656. GDI32
  11657. XFCENDPAGEP
  11658. StartDoc
  11659. gdi32Q
  11660. xfcStartDoc
  11661. STARTDOC
  11662. GDI32
  11663. XFCSTARTDOC?
  11664. EndDoc
  11665. gdi32Q
  11666. xfcEndDoc
  11667. ENDDOC
  11668. GDI32    
  11669. XFCENDDOCY
  11670. GetDeviceCaps
  11671. gdi32Q
  11672. xfcGetDeviceCaps
  11673. NINDEX
  11674. GETDEVICECAPS
  11675. GDI32
  11676. XFCGETDEVICECAPS
  11677. PROCEDURE
  11678. LCPROC
  11679. LNPOS
  11680. LCFILE
  11681. LCPATH
  11682. CTEXTE
  11683. CCLEF
  11684. NLONGCLEF
  11685. CRESULT
  11686. ENGLISH
  11687. ESPANIOL
  11688. SPANISH
  11689. FoxyPreviewer_Locs.dbf
  11690. Could not load the localizations table.
  11691. Error
  11692. Language 
  11693.  was not found!
  11694. Make sure that the desired language is available in FoxyPreviewer_Locs.dbf
  11695. Error
  11696. TCLANGUAGE    
  11697. LCDBFFILE
  11698. LNSELECT
  11699. LANGUAGE    
  11700. LOCALLANG
  11701. OFOXYPREVIEWER    
  11702. CCODEPAGE
  11703. _INITSTATUSTEXT
  11704. INITSTATUS
  11705. _PREPASSSTATUSTEXT
  11706. PREPSTATUS
  11707. _RUNSTATUSTEXT    
  11708. RUNSTATUS
  11709. _SECONDSTEXT
  11710. SECONDS
  11711. _CANCELINSTRTEXT
  11712. CANCELINST
  11713. _CANCELQUERYTEXT
  11714. CANCELQUER
  11715. _REPORTINCOMPLETETEXT
  11716. REPINCOMPL
  11717. _ATTENTIONTEXT    
  11718. ATTENTION
  11719. LOLANG
  11720. _OLANG
  11721. _CLANGLOADED
  11722. _Screen.oFoxyPreviewer._oLang.
  11723. Could not locate the string '
  11724. ' in the localizations table.
  11725. Please make sure that you have the latest version available of 'FoxyPreviewer_locs.dbf'.
  11726. Error
  11727. TCSTRING
  11728. LCTRANSLL
  11729. internetexplorer.application
  11730. internetexplorer.application
  11731. TCFILE
  11732. LODOC
  11733. VISIBLE
  11734. NAVIGATE
  11735. LNSECS
  11736. LCINNERTEXT
  11737. READYSTATE
  11738. DOCUMENT
  11739. BODY    
  11740. INNERTEXT
  11741. EnumPrinterForms
  11742. Internal
  11743. Envelope
  11744. Error loading printer information
  11745. Printer: 
  11746. Form # 
  11747. Width: 
  11748. Height: 
  11749. Printer Info
  11750. TCPRINTER
  11751. TNWIDTH
  11752. TNHEIGHT
  11753. LLSHOWRESULT
  11754. LOPRINTFORMS
  11755. CUNIT
  11756. NROUND    
  11757. LCPRINTER
  11758. GETFORMLIST
  11759. CERRORMESSAGE    
  11760. STARTMODE
  11761. CAPIERRORMESSAGE
  11762. LOONEFORM
  11763. LCFORMNAME    
  11764. OFORMLIST
  11765. COUNT
  11766. FORMID
  11767. WIDTH
  11768. HEIGHT
  11769. FORMNAME
  11770. Collection
  11771. WinApiSupport
  11772. TCUNIT
  11773. TNROUND
  11774. CUNIT
  11775. NROUND    
  11776. OFORMLIST
  11777. LOADAPIDLLS
  11778. HHEAP
  11779. HEAPCREATE
  11780. English
  11781. Metric
  11782. Internal
  11783. English
  11784. Metric
  11785. Internal
  11786. TCUNIT
  11787. CUNIT
  11788. NCOEFFICIENT
  11789. NINCH2MM
  11790. NCM2MM+
  11791. HHEAP
  11792. HEAPDESTROY
  11793. Unable to get printer handle for '
  11794. Unable to Enumerate Forms
  11795. Unable to Enumerate Forms.
  11796. TCPRINTERNAME
  11797. TCFORMNAME    
  11798. LHPRINTER    
  11799. LLSUCCESS
  11800. LNNEEDED
  11801. LNNUMBEROFFORMS
  11802. LNBUFFER
  11803. LCFORMNAME
  11804. CPRINTERNAME    
  11805. CFORMNAME
  11806. CLEARERRORS
  11807. NFORMNUMBER    
  11808. OFORMLIST
  11809. REMOVE
  11810. LNRESULT
  11811. OPENPRINTER
  11812. CERRORMESSAGE
  11813. CAPIERRORMESSAGE
  11814. WINAPIERRMSG
  11815. GETLASTERROR    
  11816. ENUMFORMS    
  11817. HEAPALLOC
  11818. HHEAP    
  11819. LOONEFORM
  11820. ONEFORMOBJ    
  11821. LNPOINTER
  11822. FORMID    
  11823. FORMFLAGS
  11824. LONG2NUMFROMBUFFER
  11825. FORMNAME
  11826. STRZFROMBUFFER
  11827. WIDTH
  11828. CONVERTFORMDIMENSION
  11829. HEIGHT
  11830. RIGHT
  11831. BOTTOM
  11832. MARKSUPPORTEDFORMS
  11833. HEAPFREE
  11834. CLOSEPRINTER/
  11835. TNPOINTER
  11836. LONG2NUMFROMBUFFER
  11837. NCOEFFICIENT
  11838. NROUNDi
  11839. DeviceCapabilities failed.
  11840. LNCOUNT
  11841. LCBUFFERPAPERS
  11842. LNINDEX
  11843. LCSTR
  11844. LNFORMID    
  11845. LOONEFORM
  11846. DEVICECAPABILITIES
  11847. CPRINTERNAME
  11848. CERRORMESSAGE
  11849. CAPIERRORMESSAGE
  11850. WINAPIERRMSG
  11851. GETLASTERROR
  11852. OWAS    
  11853. SHORT2NUM    
  11854. OFORMLIST
  11855. GETKEY
  11856. ISSUPPORTED1
  11857. Empty
  11858. FormFlags
  11859. FormId
  11860. FormName
  11861. Width
  11862. Height
  11863. Right
  11864. Bottom
  11865. IsSupported-
  11866. LOONEFORM#
  11867. CERRORMESSAGE
  11868. CAPIERRORMESSAGE
  11869. HeapCreate
  11870. WIN32API
  11871. HeapAlloc
  11872. WIN32API
  11873. HeapFree
  11874. WIN32API
  11875. HeapDestroy
  11876. WIN32API
  11877. GetLastError
  11878. kernel32
  11879. HEAPCREATE
  11880. WIN32API    
  11881. HEAPALLOC
  11882. HEAPFREE
  11883. HEAPDESTROY
  11884. GETLASTERROR
  11885. KERNEL32W
  11886. OpenPrinter
  11887. WinSpool.Drv
  11888. TCPRINTERNAME    
  11889. THPRINTER    
  11890. TCDEFAULT
  11891. OPENPRINTER
  11892. WINSPOOL
  11893. ClosePrinter
  11894. WinSpool.Drv
  11895. THPRINTER
  11896. CLOSEPRINTER
  11897. WINSPOOL
  11898. EnumForms
  11899. winspool.drv
  11900. THPRINTER
  11901. TNLEVEL
  11902. TNFORM
  11903. TNBUF
  11904. TNNEEDED
  11905. TNRETURNED    
  11906. ENUMFORMS
  11907. WINSPOOL
  11908. DeviceCapabilities
  11909. winspool.drv
  11910. PDEVICE
  11911. PPORT
  11912. FWCAPABILITY
  11913. POUTPUT
  11914. PDEVMODE
  11915. DEVICECAPABILITIES
  11916. WINSPOOL
  11917. TNNUM
  11918. LCSTRING
  11919. RTLPL2PSD
  11920. TCLONG
  11921. LNNUM
  11922. RTLS2PLD
  11923. TNPOINTER
  11924. LNNUM
  11925. RTLP2PLD
  11926. TCLONG
  11927. LNNUM
  11928. RTLS2PL
  11929. TNPOINTER
  11930. LCSTR
  11931. LNSTRPOINTER
  11932. RTLP2PL
  11933. LSTRCPY
  11934. TNPOINTER
  11935. LCRESULT
  11936. LNSTRPOINTER
  11937. LNLEN
  11938. LONG2NUMFROMBUFFER
  11939. LSTRLENW
  11940. RTLP2PSZ
  11941. TNPOINTER
  11942. LCSTR
  11943. LNSTRPOINTER
  11944. LSTRCPYa
  11945. RtlMoveMemory
  11946. WIN32APIQ
  11947. RtlPL2PS
  11948. TCDEST
  11949. TNSRC
  11950. TNLEN
  11951. RTLMOVEMEMORY
  11952. WIN32API
  11953. RTLPL2PS_
  11954. RtlMoveMemory
  11955. WIN32APIQ
  11956. RtlS2PL
  11957. TNDEST
  11958. TCSRC
  11959. TNLEN
  11960. RTLMOVEMEMORY
  11961. WIN32API
  11962. RTLS2PL_
  11963. RtlMoveMemory
  11964. WIN32APIQ
  11965. RtlP2PL
  11966. TNDEST
  11967. TNSRC
  11968. TNLEN
  11969. RTLMOVEMEMORY
  11970. WIN32API
  11971. RTLP2PL_
  11972. RtlMoveMemory
  11973. WIN32APIQ
  11974. RtlP2PS
  11975. TCDEST
  11976. TNSRC
  11977. TNLEN
  11978. RTLMOVEMEMORY
  11979. WIN32API
  11980. RTLP2PSB
  11981. lstrcpy
  11982. WIN32API
  11983. TCDEST
  11984. TNSRC
  11985. LSTRCPY
  11986. WIN32API7
  11987. lstrlenW
  11988. WIN32API
  11989. TNSRC
  11990. LSTRLENW
  11991. WIN32API6
  11992. lstrlen
  11993. WIN32API
  11994. TNSRC
  11995. LSTRLEN
  11996. WIN32API
  11997. FormatMessage
  11998. kernel32
  11999. TNERRORCODE
  12000. FORMATMESSAGE
  12001. KERNEL32
  12002. LCERRBUFFER
  12003. LNNEWERR
  12004. LNFLAG
  12005. LCERRORMESSAGE
  12006. 09.00.0000.2412
  12007. 09.00.0000.3504
  12008. 09.00.0000.5721
  12009. 09.00.0000.5815
  12010. 09.00.0000.6303
  12011. SP2 HF1
  12012. 09.00.0000.6602
  12013. SP2 HF2
  12014. 09.00.0000.7423
  12015. SP2 HF3
  12016. LCVERSION
  12017. oFoxyThermForm
  12018. oFoxyThermForm
  12019. oFoxyThermForm
  12020. _Screen.oFoxyThermForm.Thermb
  12021. TNPERCENT
  12022. TCLABELTEXT
  12023. TCTITLETEXT
  12024. ADDPROPERTY
  12025. OFOXYTHERMFORM
  12026. RELEASE
  12027. CREATETHERM
  12028. LOTHERMFORM
  12029. THERMLABEL
  12030. CAPTION
  12031. THERM
  12032. MARQUEE
  12033. VALUE
  12034. VISIBLE
  12035. ATLForm
  12036. Therm
  12037. ctl32_progressbar
  12038. PR_ctl32_progressbar.vcx
  12039. ThermLabel
  12040. Label
  12041. LOFORM
  12042. OFOXYTHERMFORM
  12043. LNBORDER
  12044. LITHERMHEIGHT
  12045. LITHERMWIDTH
  12046. LITHERMTOP
  12047. LITHERMLEFT    
  12048. SCALEMODE
  12049. HEIGHT
  12050. HALFHEIGHTCAPTION
  12051. WIDTH
  12052. AUTOCENTER
  12053. BORDERSTYLE
  12054. CONTROLBOX
  12055. CLOSABLE    
  12056. MAXBUTTON    
  12057. MINBUTTON
  12058. MOVABLE
  12059. ALWAYSONTOP
  12060. ALLOWOUTPUT    
  12061. NEWOBJECT
  12062. THERMLABEL
  12063. VISIBLE
  12064. FONTBOLD
  12065. ALIGNMENT
  12066. THERM
  12067. MARQUEESPEED
  12068. MARQUEEANIMATIONSPEED
  12069. CAPTIOND
  12070. BringWindowToTop
  12071. Win32API
  12072. ShowWindow
  12073. Win32API
  12074. GetCurrentThreadId
  12075. kernel32
  12076. GetWindowThreadProcessId
  12077. user32
  12078. GetCurrentThreadId
  12079. kernel32
  12080. AttachThreadInput
  12081. user32
  12082. GetForegroundWindow
  12083. user32
  12084. FindWindow
  12085. Win32API
  12086. TOFORM
  12087. BRINGWINDOWTOTOP
  12088. WIN32API
  12089. SHOWWINDOW
  12090. GETCURRENTTHREADID
  12091. KERNEL32
  12092. GETWINDOWTHREADPROCESSID
  12093. USER32
  12094. ATTACHTHREADINPUT
  12095. GETFOREGROUNDWINDOW
  12096. FINDWINDOW
  12097. LNHWND
  12098. LNFORETHREAD
  12099. LNAPPTHREAD
  12100. Datasessionv
  12101. Fixedv
  12102. PreviewHelpera
  12103. ERRNOPRINTER
  12104. SET FIXED &lcSetFixed.
  12105. pr_FRXOutput.Prg
  12106. FXLISTENER
  12107. PR_ReportListener.vcx
  12108. FOXYLISTENER
  12109. PR_ReportListener.vcx
  12110. _GDIPLUS.VCXC
  12111. Classlibv
  12112. _GdiPlus.vcx
  12113. FOXYLISTENERCC
  12114. PR_ReportListener.vcx
  12115. _GDIPLUS.VCXC
  12116. Classlibv
  12117. _GdiPlus.vcx
  12118. PROCEDUREv
  12119. _oReportOutput("1")b
  12120. pr_FRXOutput
  12121. Could not find the 'ReportOutput.App' file. This file is needed to have the new features of FoxyPreviewer.C
  12122. Please make sure to set the global variable '_REPORTOUTPUT' with the full path of this file 
  12123. or save it in a folder that your app can reach
  12124. FoxyPreviewer not loaded!
  12125. cSuccessor
  12126. lQuietMode
  12127. lShowSearch
  12128. lShowClose
  12129. lShowSetup
  12130. nThermType
  12131. lOpenViewer
  12132. lPrintVisible
  12133. lShowPrintBtn
  12134. lShowPageCount
  12135. lSaveToFile
  12136. _cLanguageFromDBF
  12137. _cOrigRepPreview
  12138. _cLocalPath
  12139. lSendToEmail
  12140. lShowMiniatures
  12141. lPrinterPref
  12142. lSaveAsImage
  12143. lSaveAsHTML
  12144. lSaveAsMHT
  12145. lSaveAsRTF
  12146. lSaveAsXLS
  12147. lSaveAsPDF
  12148. lSaveAsTXT
  12149. nCanvasCount
  12150. lEmailAuto
  12151. cEmailType
  12152. cEmailPRG
  12153. lShowPrinters
  12154. nEmailMode
  12155. cSMTPUserName
  12156. cSMTPPassword
  12157. nSMTPPort
  12158. cSMTPServer
  12159. lSMTPUseSSL
  12160. cEmailTo
  12161. cEmailSubject
  12162. cEmailBody
  12163. cEmailFrom
  12164. cEmailBodyFile
  12165. cAttachments
  12166. cSaveDefName
  12167. cEmailCC
  12168. cEmailBCC
  12169. cEmailReplyTo
  12170. cVersion
  12171. v2.99 RC 2012.06.20
  12172. nVersion
  12173. lSilent
  12174. nButtonSize
  12175. cOutputPath
  12176. nPrinterPropType
  12177. lDirectPrint
  12178. nSearchPages
  12179. nZoomLevel
  12180. nWindowState
  12181. nDockType
  12182. nMaxMiniatureDisplay
  12183. nShowToolBar
  12184. cFormIcon
  12185. cTitle
  12186. cToolbarTitle
  12187. lPrinted-
  12188. lEmailed-
  12189. lSaved-
  12190. cDestFile-
  12191. cAdressTable
  12192. cAdressSearch
  12193. cImgPrint
  12194. cImgPrintPref
  12195. cImgSave
  12196. cImgClose
  12197. cImgClose2
  12198. cImgEmail
  12199. cImgSetup
  12200. cImgMiniatures
  12201. cImgSearch
  12202. cImgSearchAgain
  12203. cImgSearchBack
  12204. cImgPrintBig
  12205. cImgPrintPrefBig
  12206. cImgSaveBig
  12207. cImgCloseBig
  12208. cImgClose2Big
  12209. cImgEmailBig
  12210. cImgSetupBig
  12211. cImgMiniaturesBig
  12212. cImgSearchBig
  12213. cImgSearchAgainBig
  12214. cImgSearchBackBig
  12215. lPDFEmbedFonts
  12216. lPDFCanPrint
  12217. lPDFCanEdit
  12218. lPDFCanCopy
  12219. lPDFCanAddNotes
  12220. lPDFEncryptDocument
  12221. lPDFAsImage
  12222. cPDFMasterPassword
  12223. cPDFUserPassword
  12224. cPDFAuthor
  12225. cPDFTitle
  12226. cPDFSubject
  12227. cPDFKeywords
  12228. cPDFCreator
  12229. lPDFShowErrors
  12230. cPDFSymbolFontsList
  12231. cPDFDefaultFont
  12232. nPDFPageMode
  12233. lPDFReplaceFonts
  12234. lExpandFields
  12235. cPrintJobName
  12236. lShowCopies
  12237. nCopies
  12238. lReadReceipt
  12239. lPriority
  12240. cEncryptPROCEDURE
  12241. cDecryptPROCEDURE
  12242. cCryptKey
  12243. cExcelDefaultExtension
  12244. lExcelConvertToXLS
  12245. lExcelRepeatHeaders
  12246. lExcelRepeatFooters
  12247. lExcelHidePageNo
  12248. lExcelAlignLeft
  12249. nExcelSaveFormat
  12250. cCodePage
  12251. lRepeatInPage
  12252. cWatermarkImage
  12253. nWatermarkType
  12254. nWatermarkTransparency
  12255. nWatermarkWidthRatio
  12256. nWatermarkHeightRatio
  12257. _MemberData
  12258. _MemberData
  12259. <VFPData>
  12260. <memberdata name="ofoxypreviewer" type="Property" display="oFoxyPreviewer"/>
  12261. </VFPData>
  12262. _MemberData
  12263. <VFPData>
  12264. <memberdata name="lquietmode" type="Property" display="lQuietMode"/>
  12265. <memberdata name="lshowsearch" type="Property" display="lShowSearch"/>
  12266. <memberdata name="lshowclose" type="Property" display="lShowClose"/>
  12267. <memberdata name="lshowsetup" type="Property" display="lShowSetup"/>
  12268. <memberdata name="nthermtype" type="Property" display="nThermType"/>
  12269. <memberdata name="lopenviewer" type="Property" display="lOpenViewer"/>
  12270. <memberdata name="lprintvisible" type="Property" display="lPrintVisible"/>
  12271. <memberdata name="lshowprintbtn" type="Property" display="lShowPrintBtn"/>
  12272. <memberdata name="lshowpagecount" type="Property" display="lShowPageCount"/>
  12273. <memberdata name="lsavetofile" type="Property" display="lSaveToFile"/>
  12274. <memberdata name="clanguage" type="Property" display="cLanguage"/>
  12275. <memberdata name="lsendtoemail" type="Property" display="lSendToEmail"/>
  12276. <memberdata name="lshowminiatures" type="Property" display="lShowMiniatures"/>
  12277. <memberdata name="lprinterpref" type="Property" display="lPrinterPref"/>
  12278. <memberdata name="lsaveasimage" type="Property" display="lSaveAsImage"/>
  12279. <memberdata name="lsaveashtml" type="Property" display="lSaveAsHTML"/>
  12280. <memberdata name="lsaveasmht" type="Property" display="lSaveAsMHT"/>
  12281. <memberdata name="lsaveasrtf" type="Property" display="lSaveAsRTF"/>
  12282. <memberdata name="lsaveasxls" type="Property" display="lSaveAsXLS"/>
  12283. <memberdata name="lsaveaspdf" type="Property" display="lSaveAsPDF"/>
  12284. <memberdata name="lsaveastxt" type="Property" display="lSaveAsTXT"/>
  12285. <memberdata name="ncanvascount" type="Property" display="nCanvasCount"/>
  12286. <memberdata name="lemailauto" type="Property" display="lEmailAuto"/>
  12287. <memberdata name="cemailprg" type="Property" display="cEmailPRG"/>
  12288. <memberdata name="cemailtype" type="Property" display="cEmailType"/>
  12289. <memberdata name="cemailbodyfile" type="Property" display="cEmailBodyFile"/>
  12290. <memberdata name="lshowprinters" type="Property" display="lShowPrinters"/>
  12291. <memberdata name="nemailmode" type="Property" display="nEmailMode"/>
  12292. <memberdata name="csmtpusername" type="Property" display="cSMTPUserName"/>
  12293. <memberdata name="csmtppassword" type="Property" display="cSMTPPassword"/>
  12294. <memberdata name="csavedefname" type="Property" display="cSaveDefName"/>
  12295. <memberdata name="nsmtpport" type="Property" display="nSMTPPort"/>
  12296. <memberdata name="csmtpserver" type="Property" display="cSMTPServer"/>
  12297. <memberdata name="lsmtpusessl" type="Property" display="lSMTPUseSSL"/>
  12298. <memberdata name="cemailto" type="Property" display="cEmailTo"/>
  12299. <memberdata name="cemailsubject" type="Property" display="cEmailSubject"/>
  12300. <memberdata name="cemailbody" type="Property" display="cEmailBody"/>
  12301. <memberdata name="cemailfrom" type="Property" display="cEmailFrom"/>
  12302. <memberdata name="cemailcc" type="Property" display="cEmailCC"/>
  12303. <memberdata name="cemailbcc" type="Property" display="cEmailBCC"/>
  12304. <memberdata name="cemailreplyto" type="Property" display="cEmailReplyTo"/>
  12305. <memberdata name="cattachments" type="Property" display="cAttachments"/>
  12306. <memberdata name="cversion" type="Property" display="cVersion"/>
  12307. <memberdata name="nversion" type="Property" display="nVersion"/>
  12308. <memberdata name="nbuttonsize" type="Property" display="nButtonSize"/>
  12309. <memberdata name="coutputpath" type="Property" display="cOutputPath"/>
  12310. <memberdata name="nprinterproptype" type="Property" display="nPrinterPropType"/>
  12311. <memberdata name="ldirectprint" type="Property" display="lDirectPrint"/>
  12312. <memberdata name="nzoomlevel" type="Property" display="nZoomLevel"/>
  12313. <memberdata name="nwindowstate" type="Property" display="nWindowState"/>
  12314. <memberdata name="ndocktype" type="Property" display="nDockType"/>
  12315. <memberdata name="nmaxminiaturedisplay" type="Property" display="nMaxMiniatureDisplay"/>
  12316. <memberdata name="nshowtoolbar" type="Property" display="nShowToolbar"/>
  12317. <memberdata name="lprinted" type="Property" display="lPrinted"/>
  12318. <memberdata name="lemailed" type="Property" display="lEmailed"/>
  12319. <memberdata name="lsaved" type="Property" display="lSaved"/>
  12320. <memberdata name="cdestfile" type="Property" display="cDestFile"/>
  12321. <memberdata name="cformicon" type="Property" display="cFormIcon"/>
  12322. <memberdata name="ctitle" type="Property" display="cTitle"/>
  12323. <memberdata name="ctoolbartitle" type="Property" display="cToolbarTitle"/>
  12324. <memberdata name="cadresstable" type="Property" display="cAdressTable"/>
  12325. <memberdata name="ccodepage" type="Property" display="cCodePage"/>
  12326. <memberdata name="cadresssearch" type="Property" display="cAdressSearch"/>
  12327. <memberdata name="lrepeatinpage" type="Property" display="lRepeatInPage"/>
  12328. <memberdata name="cwatermarkimage" type="Property" display="cWatermarkImage"/>
  12329. <memberdata name="nwatermarktype" type="Property" display="nWatermarkType"/>
  12330. <memberdata name="nwatermarktransparency" type="Property" display="nWatermarkTransparency"/>
  12331. <memberdata name="nwatermarkwidthratio" type="Property" display="nWatermarkWidthRatio"/>
  12332. <memberdata name="nwatermarkheightratio" type="Property" display="nWatermarkHeightRatio"/>
  12333. <memberdata name="cimgprint" type="Property" display="cImgPrint"/>
  12334. <memberdata name="cimgprintpref" type="Property" display="cImgPrintPref"/>
  12335. <memberdata name="cimgsave" type="Property" display="cImgSave"/>
  12336. <memberdata name="cimgclose" type="Property" display="cImgClose"/>
  12337. <memberdata name="cimgclose2" type="Property" display="cImgClose2"/>
  12338. <memberdata name="cimgemail" type="Property" display="cImgEmail"/>
  12339. <memberdata name="cimgsetup" type="Property" display="cImgSetup"/>
  12340. <memberdata name="cimgminiatures" type="Property" display="cImgMiniatures"/>
  12341. <memberdata name="cimgsearch" type="Property" display="cImgSearch"/>
  12342. <memberdata name="cimgsearchagain" type="Property" display="cImgSearchAgain"/>
  12343. <memberdata name="cimgsearchback" type="Property" display="cImgSearchBack"/>
  12344. <memberdata name="cimgprintbig" type="Property" display="cImgPrintBig"/>
  12345. <memberdata name="cimgprintprefbig" type="Property" display="cImgPrintPrefBig"/>
  12346. <memberdata name="cimgsavebig" type="Property" display="cImgSaveBig"/>
  12347. <memberdata name="cimgclosebig" type="Property" display="cImgCloseBig"/>
  12348. <memberdata name="cimgclose2big" type="Property" display="cImgClose2Big"/>
  12349. <memberdata name="cimgemailbig" type="Property" display="cImgEmailBig"/>
  12350. <memberdata name="cimgsetupbig" type="Property" display="cImgSetupBig"/>
  12351. <memberdata name="cimgminiaturesbig" type="Property" display="cImgMiniaturesBig"/>
  12352. <memberdata name="cimgsearchbig" type="Property" display="cImgSearchBig"/>
  12353. <memberdata name="cimgsearchagainbig" type="Property" display="cImgSearchAgainBig"/>
  12354. <memberdata name="cimgsearchbackbig" type="Property" display="cImgSearchBackBig"/>
  12355. <memberdata name="lpdfembedfonts" type="Property" display="lPDFEmbedFonts"/>
  12356. <memberdata name="lpdfcanprint" type="Property" display="lPDFCanPrint"/>
  12357. <memberdata name="lpdfcanedit" type="Property" display="lPDFCanEdit"/>
  12358. <memberdata name="lpdfcancopy" type="Property" display="lPDFCanCopy"/>
  12359. <memberdata name="lpdfcanaddnotes" type="Property" display="lPDFCanAddNotes"/>
  12360. <memberdata name="lpdfencryptdocument" type="Property" display="lPDFEncryptDocument"/>
  12361. <memberdata name="lpdfasimage" type="Property" display="lPDFAsImage"/>
  12362. <memberdata name="cpdfmasterpassword" type="Property" display="cPDFMasterPassword"/>
  12363. <memberdata name="cpdfuserpassword" type="Property" display="cPDFUserPassword"/>
  12364. <memberdata name="cpdfauthor" type="Property" display="cPDFAuthor"/>
  12365. <memberdata name="cpdftitle" type="Property" display="cPDFTitle"/>
  12366. <memberdata name="cpdfsubject" type="Property" display="cPDFSubject"/>
  12367. <memberdata name="cpdfkeywords" type="Property" display="cPDFKeywords"/>
  12368. <memberdata name="cpdfcreator" type="Property" display="cPDFCreator"/>
  12369. <memberdata name="lpdfshowerrors" type="Property" display="lPDFShowErrors"/>
  12370. <memberdata name="lpdfreplacefonts" type="Property" display="lPDFReplaceFonts"/>
  12371. <memberdata name="cpdfsymbolfontslist"  type="Property" display="cPDFSymbolFontsList"/>
  12372. <memberdata name="cpdfdefaultfont" type="Property" display="cPDFDefaultFont"/>
  12373. <memberdata name="npdfpagemode" type="Property" display="nPDFPageMode"/>
  12374. <memberdata name="osettingsdlg" type="Property" display="oSettingsDlg"/>
  12375. <memberdata name="lexpandfields" type="Property" display="lExpandFields"/>
  12376. <memberdata name="cprintjobname" type="Property" display="cPrintJobName"/>
  12377. <memberdata name="ncopies" type="Property" display="nCopies"/>
  12378. <memberdata name="lshowcopies" type="Property" display="lShowCopies"/>
  12379. <memberdata name="lreadreceipt" type="Property" display="lReadReceipt"/>
  12380. <memberdata name="lpriority" type="Property" display="lPriority"/>
  12381. <memberdata name="cexceldefaultextension" type="Property" display="cExcelDefaultExtension"/>
  12382. <memberdata name="lexcelconverttoxls" type="Property" display="lExcelConvertToXLS"/>
  12383. <memberdata name="lexcelrepeatheaders" type="Property" display="lExcelRepeatHeaders"/>
  12384. <memberdata name="lexcelrepeatfooters" type="Property" display="lExcelRepeatFooters"/>
  12385. <memberdata name="lexcelhidepageno" type="Property" display="lExcelHidePageNo"/>
  12386. <memberdata name="lexcelalignleft" type="Property" display="lExcelAlignLeft"/>
  12387. <memberdata name="nexcelsaveformat" type="Property" display="nExcelSaveFormat"/>
  12388. </VFPData>
  12389. _InitStatusTextC
  12390. INITSTATUS
  12391. _PrepassStatusTextC
  12392. PREPSTATUS
  12393. _RunStatusTextC
  12394. RUNSTATUS
  12395. _SecondsTextC
  12396. SECONDS
  12397. _CancelInstrTextC
  12398. CANCELINST
  12399. _CancelQueryTextC
  12400. CANCELQUER
  12401. _ReportIncompleteTextC
  12402. REPINCOMPL
  12403. _AttentionTextC
  12404. ATTENTION
  12405. CCODEPAGE
  12406. _oLang
  12407. _cLangLoaded
  12408. ENGLISH
  12409. _oDestScreen
  12410. Empty
  12411. lEnableLanguagea
  12412. lEnableTabGenerala
  12413. lEnableTabControlsa
  12414. lEnableTabOutputa
  12415. lEnableTabEmaila
  12416. lEnableTabPDFa
  12417. lEnableTabXLSa
  12418. lEnableChkPrintPrefa
  12419. lEnableCmbPrintPrefTypea
  12420. lEnableChkCopiesa
  12421. lEnableChkSavetoFilea
  12422. lEnableChkPrintersa
  12423. lEnableChkEmaila
  12424. lEnableChkMiniaturesa
  12425. lEnableChkSearcha
  12426. lEnableChkSettingsa
  12427. lEnableChkSaveAsImagea
  12428. lEnableChkSaveAsPDFa
  12429. lEnableChkSaveAsRTFa
  12430. lEnableChkSaveAsHTMLa
  12431. lEnableChkSaveAsMHTa
  12432. lEnableChkSaveAsXLSa
  12433. lEnableChkSaveAsTXTa
  12434. lEnableCmbEmailTypea
  12435. lEnableCmbAttachmentTypea
  12436. lEnableChkEmbedFontsa
  12437. lEnableChkPDFasImagea
  12438. lShowLanguagea
  12439. lShowTabGenerala
  12440. lShowTabControlsa
  12441. lShowTabOutputa
  12442. lShowTabEmaila
  12443. lShowTabPDFa
  12444. lShowTabXLSa
  12445. lShowTabXLSa
  12446. oSettingsDlg
  12447. oFoxyPreviewer
  12448. oFoxyPreviewer
  12449. oFoxyPreviewer
  12450. _oReportOutput("1")b
  12451. Could not load the FOXYPREVIEWER report factory
  12452. Error
  12453. SET FIXED &lcSetFixed.
  12454. _oReportOutput("1")
  12455. FOXYLISTENER
  12456. _oReportOutput("1")
  12457. FOXYLISTENER
  12458. Could not load the FOXYPREVIEWER report factory (2)C
  12459. Please check the version of your 'REPORTOUTPUT.APP' file, and make sure to be using the latest version released in VFP9 SP2.
  12460. Replace your current version with the new one.
  12461. Error
  12462. SET FIXED &lcSetFixed.
  12463. _oReportOutput("10")b
  12464. PdfListener
  12465. PR_PDFX.vcx
  12466. PdfListener
  12467. PR_PDFX.vcx
  12468. PdfListenerCC
  12469. PR_PDFX.vcx
  12470. _oReportOutput("11")b
  12471. PdfasImageListener
  12472. PR_PDFX.vcx
  12473. PdfasImageListener
  12474. PR_PDFX.vcx
  12475. PdfasImageListenerCC
  12476. PR_PDFX.vcx
  12477. _oReportOutput("12")b
  12478. PdfasImageListener
  12479. PR_PDFX.vcx
  12480. RTFreportlistener
  12481. PR_RTFListener
  12482. RTFreportlistenerCC
  12483. PR_RTFListener
  12484. _oReportOutput("13")b
  12485. REPORTLISTENER
  12486. ExcelListener
  12487. pr_ExcelListener.vcx
  12488. ExcelListenerCC
  12489. pr_ExcelListener.vcx
  12490. Sheet
  12491. _oReportOutput("14")b
  12492. MSXML2.XSLTEMPLATE.4.0
  12493. REPORTLISTENER
  12494. pr_HTMLListener
  12495. pr_reportlistener.vcx
  12496. pr_HTMLListenerCC
  12497. pr_ReportListener.vcx
  12498. _oReportOutput("15")b
  12499. REPORTLISTENER
  12500. pr_HTMLListener15
  12501. pr_reportlistener.vcx
  12502. pr_HTMLListener15CC
  12503. pr_ReportListener.vcx
  12504. _oReportOutput("0")b
  12505. FXLISTENER
  12506. PR_ReportListener.vcx
  12507. FOXYLISTENER
  12508. PR_ReportListener.vcx
  12509. FOXYLISTENERCC
  12510. PR_ReportListener.vcx
  12511. TCSYS16
  12512. TCLOCALPATH    
  12513. LNSESSION
  12514. LCSETFIXED
  12515. LOHELPER    
  12516. LEXTENDED
  12517. GAPRINTERS
  12518. SETERROR
  12519. GETLOC
  12520. LOLISTENER
  12521. FXFEEDBACKCLASS
  12522. _CTHERMCLASS    
  12523. QUIETMODE
  12524. LQUIETMODE
  12525. _OREPORTOUTPUT
  12526. REMOVE
  12527. LCREPORTOUTPUT
  12528. LOSETTINGS
  12529. LCDEFAULTSETFILE    
  12530. CLANGUAGE    
  12531. STARTMODE
  12532. ADDPROPERTY
  12533. _MEMBERDATA    
  12534. CCODEPAGE
  12535. LOSETDLG
  12536. OFOXYPREVIEWER
  12537. LOPREVLISTENER
  12538. CLASS
  12539. LOPDFLISTENER
  12540. LOBJTYPEMODE
  12541. LOPDFLISTENER2
  12542. LISTENERTYPE
  12543. LORTFLISTENER
  12544. LOXLSLISTENER
  12545. LOUTPUTTOCURSOR
  12546. CWORKSHEETNAME
  12547. LCONVERTTOXLS
  12548. LEXCELCONVERTTOXLS
  12549. LREPEATHEADERS
  12550. LEXCELREPEATHEADERS
  12551. LREPEATFOOTERS
  12552. LEXCELREPEATFOOTERS
  12553. LHIDEPAGENO
  12554. LEXCELHIDEPAGENO
  12555. LALIGNLEFT
  12556. LEXCELALIGNLEFT
  12557. LLXLSERROR
  12558. LOTESTXML4
  12559. LOHTMLLISTENER$
  12560. COPYIMAGEFILESTOEXTERNALFILELOCATION
  12561. LOPRINTLISTENER
  12562. PROCEDUREvf
  12563. FOXYPREVIEWER.
  12564. LCPROC
  12565. LNPROCS    
  12566. LCCURPROC
  12567. PR_REPORTLISTENERCC
  12568. Classlibvf
  12569. PR_REPORTLISTENER
  12570. _GDIPLUSCC
  12571. Classlibvf
  12572. _GDIPLUS
  12573. PR_REPORTLISTENER
  12574. _GDIPLUSl
  12575. CDO.Message
  12576. file://
  12577. Source file does not exist!
  12578. Error
  12579. CDO.Configuration
  12580. CDO.Message
  12581. TCSOURCE
  12582. TCDESTINATION
  12583. LCFILENAME
  12584. LOSTREAM
  12585. LOMSG
  12586. LOCONFIG
  12587. CONFIGURATION
  12588. CREATEMHTMLBODY    
  12589. GETSTREAM
  12590. SAVETOFILEg
  12591. _ReportOutputConfig
  12592. TALKv
  12593. DATASESSIONv
  12594. TALKv
  12595. ReportListener
  12596. OutputConfig
  12597.  AND (C
  12598. LOCATE FOR ObjType = 100 AND  (ObjCode = m.iType)   &cFilter. AND (NOT DELETED())
  12599. Exception
  12600. Configuration table specified to 
  12601. VFP Report Output Application
  12602. is not found or is in the wrong format.
  12603. OutputConfig
  12604. ListenerType
  12605. PUBLIC &tvReference.   
  12606. IF PEMSTATUS(&tvReference.,"ListenerType",5) AND  UPPER(m.oTemp.BaseClass) == UPPER(m.oTemp.Class)
  12607. &tvReference..ListenerType = m.iType
  12608. ListenerType
  12609. TVTYPE
  12610. TVREFERENCE
  12611. TVUNLOAD
  12612. OTEMP
  12613. ITYPE
  12614. IINDEX
  12615. CTYPE
  12616. CCONFIGTABLE
  12617. LSUCCESS
  12618. LSETTALKBACKON
  12619. LSAFETY
  12620. CFILTER
  12621. CCLASS
  12622. CMODULE
  12623. OCONFIG
  12624. OERROR
  12625. LSTRINGVAR
  12626. LOBJECTMEMBER
  12627. IPARAMS
  12628. IUNLOAD
  12629. ISELECT
  12630. ISESSION
  12631. LSETTALKBACKONDEFAULTSESSION
  12632. VRETURN
  12633. EXECUTE
  12634. REPORTOUTPUTCONFIG
  12635. REPORTOUTPUTCLEANUP
  12636. UNLOADLISTENER
  12637. REPORTOUTPUTDECLAREREFERENCE
  12638. CHECKPUBLICLISTENERCOLLECTION
  12639. _OREPORTOUTPUT
  12640. TESTLISTENERREFERENCE
  12641. GETCONFIGOBJECT
  12642. GETCONFIGTABLE
  12643. OUTPUTCONFIG
  12644. VERIFYCONFIGTABLE
  12645. OBJTYPE
  12646. OBJCODE
  12647. OBJINFO
  12648. OBJNAME
  12649. OBJVALUE
  12650. GETSUPPORTEDLISTENERINFO
  12651. MESSAGE
  12652. HANDLEERROR    
  12653. BASECLASS
  12654. CLASS
  12655. LISTENERTYPE
  12656. OUTPUTTYPE
  12657. TISELECT
  12658. TLRESETTALKDEFAULTSESSION    
  12659. TISESSION
  12660. TLRESETTALK
  12661. EXECUTE 
  12662. TOREF!
  12663. PR_FXListener
  12664. PR_ReportListener.VCX
  12665. PR_FXListener
  12666. PR_ReportListener.VCX
  12667. ReportListener
  12668. PR_HTMLListener
  12669. PR_ReportListener.VCX
  12670. PR_XMLListener
  12671. PR_ReportListener.VCX
  12672. PR_DebugListener
  12673. PR_ReportListener.VCX
  12674. TITYPE
  12675. TCCLASS
  12676. TCLIB
  12677. TCMODULE
  12678. DATASESSIONv
  12679. session
  12680. SAFETYv
  12681. OutputConfigCC
  12682. DEBUGLISTENER
  12683. PR_ReportListener.VCX
  12684. DebugListener
  12685. PR_ReportListener.VCX
  12686. Output Configuration Table
  12687. Output Configuration Table
  12688. TNTYPE
  12689. TVREFERENCE
  12690. TVUNLOAD
  12691. ISESSION
  12692. OSESSION
  12693. OERROR
  12694. OCONFIG
  12695. LSUCCESS
  12696. CTYPE
  12697. IINDEX
  12698. CHECKPUBLICLISTENERCOLLECTION
  12699. _OREPORTOUTPUT
  12700. REMOVE
  12701. LSAFETY
  12702. EXECUTE
  12703. DATASESSIONID
  12704. GETCONFIGOBJECT
  12705. CREATECONFIGTABLE
  12706. OBJTYPE
  12707. OBJCODE
  12708. OBJNAME
  12709. OBJVALUE
  12710. GETCONFIGTABLE
  12711. HANDLEERROR
  12712. PR_XMLListener
  12713. PR_ReportListener.VCX
  12714. PR_UtilityReportListener
  12715. PR_ReportListener.VCX
  12716. VFP Report Output Application
  12717. TOCFG
  12718. LCMODULE    
  12719. QUIETMODE
  12720. APPNAME9
  12721. m.tvReferenceb
  12722. TIPARAMS
  12723. TVREFERENCE
  12724. TLOBJECTMEMBER
  12725. TLSTRINGVAR
  12726. IDOTPOS
  12727. Collectionf
  12728. TITYPE
  12729. LUNLOAD
  12730. CTYPE
  12731. _OREPORTOUTPUT
  12732. CLASS
  12733. IINDEX
  12734. COUNT
  12735. GETKEY
  12736. REMOVE
  12737. An unknown error has occurred in 
  12738. VFP Report Output Application
  12739. ERRORNO
  12740. MESSAGE
  12741. DETAILS
  12742. Collectionf
  12743. Collection
  12744. _oReportOutput
  12745. TCTYPE
  12746. TIINDEX
  12747. IINDEX
  12748. _OREPORTOUTPUT
  12749. CLASS
  12750. COUNT
  12751. GETKEY
  12752. TISESSION
  12753. TCLANGUAGE
  12754. PR_SETLANGUAGE$
  12755. ERRSENDMAI
  12756. MSGNOTSENT
  12757. ERROR
  12758. Error sending emailC
  12759. Message was not sent
  12760. Error
  12761. TNMAPIERRNO    
  12762. LCMESSAGE    
  12763. LCMAPIMSG
  12764. PR_MAPI_GETMESSAGETEXT    
  12765. _GOHELPER
  12766. GETLOCx
  12767. One or more files could not be located. No message was sent.
  12768. An attachment could not be written to a temporary file. Check directory permissions.
  12769. One or more unspecified errors occurred while sending the message. It is not known if the message was sent.
  12770. There was insufficient memory to proceed.
  12771. There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed. No message was sent.
  12772. The user canceled one of the dialog boxes. No message was sent.
  12773. The user had too many sessions open simultaneously. No session handle was returned.
  12774. A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set. No message was sent.
  12775. The specified attachment was not found. No message was sent.
  12776. The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC. No message was sent.
  12777. One or more recipients were invalid or did not resolve to any address.
  12778. The text in the message was too large. No message was sent.
  12779. There were too many file attachments. No message was sent.
  12780. There were too many recipients. No message was sent.
  12781. A recipient did not appear in the address list. No message was sent.
  12782. TNERR
  12783. LCRET
  12784. lPrinted_Assign%
  12785. lSaved_Assign
  12786. lEmailed_Assign
  12787. cDestFile_Assign
  12788. DoEncrypt
  12789. DoDecrypt
  12790. OpenFile
  12791. UpdateProperties
  12792. UpdateSettings
  12793. nThermType_AssignK(
  12794. cLanguage_Assign
  12795. SetLanguage
  12796. SetError
  12797. GetLocQ.
  12798. DESTROY
  12799. CloseSheets
  12800. AddReport
  12801. CallReportJ6
  12802. RestorePrinterA=
  12803. RunReport
  12804. DoOutputkF
  12805. SendReportToEmail
  12806. ReportReleased|b
  12807. ClearCache1d
  12808. SetPrinter
  12809. STB_Handler
  12810. AddBarsToMenu
  12811. CheckHelperClass}~
  12812. ActionShowToolbar4
  12813. actionToolbarVisibilityx
  12814. ActionGotoPage
  12815. DoCustomPrintZ
  12816. DialogPrinting
  12817. ActionClose^
  12818. PreviewUnload
  12819. PreviewUnload2
  12820. HideFormM
  12821. RestoreParent
  12822. ActionPrint 
  12823. ActionPrintExg
  12824. SizePages
  12825. DoSetup
  12826. SetImagesH
  12827. RestoreFromResource_Bind"
  12828. HandledError
  12829. SynchPageNo:
  12830. RefreshToolbarf
  12831. UpdateToolbar
  12832. ParentClosed]
  12833. DoProof
  12834. CmdSearchVisibility
  12835. DoSearch
  12836. DoSearchAgain
  12837. DoSearchBack}
  12838. HandleFind
  12839. ClearBox
  12840. ScrollToObject
  12841. HighLightObject)
  12842. RenderPageL
  12843. PAINTF
  12844. DoSaveM
  12845. DoSaveType    
  12846. DoMakePDFOffline
  12847. DoMakeRTFOffline
  12848. DoMakeXLSOffline
  12849. DoMakeHTMLOffline_old-
  12850. DoMakeHTMLOfflineF
  12851. DoSendEmail
  12852. HandledKeyPress
  12853. RELEASE
  12854. DESTROY
  12855. AdjustControls
  12856. Enabled_Assign"
  12857. INTERACTIVECHANGE
  12858. CLICK
  12859. INIT"
  12860. DROPDOWN
  12861. VALID
  12862. CLICK
  12863. CLICKg
  12864. CLICK!
  12865. INITx
  12866. CLICK
  12867. MOUSEENTER
  12868. MOUSELEAVEG
  12869. INITK
  12870. RIGHTCLICK
  12871. CLICK
  12872. CLICKK
  12873. AdjustControls
  12874. Enabled_Assign
  12875. CLICK7 
  12876. CLICK
  12877. INITU!
  12878. CLICK
  12879. INIT "
  12880. VALID
  12881. CLICK
  12882. INIT:'
  12883. INITW*
  12884. spnpageno.LOSTFOCUS
  12885. cmdok.CLICK
  12886. cmdcancel.CLICK
  12887. Init3,
  12888. MOUSELEAVE
  12889. MOUSEENTER
  12890. CLICK
  12891. CLICK
  12892. REFRESH//
  12893. RefreshPageBtnm6
  12894. SetReport
  12895. RESIZE*7
  12896. ACTIVATE
  12897. QUERYUNLOAD
  12898. nPageSet_assign,8
  12899. SetProofCaptionM:
  12900. ReportListener_Assigns;
  12901. nMaxMiniatureItem_Assign
  12902. DoResizeProofSheet9<
  12903. PAINT
  12904. SHOW1A
  12905. DESTROY
  12906. PR_ScreenToClienteF
  12907. PR_GetCursorPos
  12908. PR_PathFileExists
  12909. PR_GetFocus    H
  12910. PR_GetWindowTextbH
  12911. PR_GetActiveWindow
  12912. PR_MAPISendDocuments
  12913. CleanClauses
  12914. IsDotMatrix9K
  12915. PR_DeviceCapabilities,L
  12916. PR_MessageBeep-M
  12917. GetParentWindow
  12918. GetWinText
  12919. PR_SendMailEx
  12920. getNewSession
  12921. num2dwordRU
  12922. INIT}U
  12923. DESTROY
  12924. getAddr
  12925. getValue)V
  12926. getAllocSize!W
  12927. setValue
  12928. ReleaseString
  12929. DeclMapiRY
  12930. SENDj[
  12931. ClearErrors
  12932. GetErrorCount
  12933. GetError"d
  12934. SetConfiguration
  12935. AddError{i
  12936. AddOneError
  12937. ERRORbk
  12938. SetHeader
  12939. ClearTherm
  12940. ShowTherm
  12941. BEFOREREPORT
  12942. Report2Pic
  12943. SendCDOMail!v
  12944. SetPrinterPropsN
  12945. xfcGdipDrawString
  12946. xfcGdipMeasureString
  12947. xfcGdipRestoreGraphicsE
  12948. xfcGdipSaveGraphics
  12949. xfcGdipSetPixelOffsetMode
  12950. xfcGdipSetRenderingOrigin
  12951. xfcGdipSetSmoothingModeQ
  12952. xfcGdipSetStringFormatAlign
  12953. xfcGdipSetStringFormatFlags
  12954. xfcGdipSetTextRenderingHint
  12955. xfcGdipSetWorldTransform
  12956. xfcGdipStringFormatGetGenericTypographicN
  12957. xfcGdipTransformPointsC
  12958. xfcGdipTransformPointsI@
  12959. xfcGdipTranslateClipA
  12960. xfcGdipCloneStringFormat
  12961. xfcGdipCreateStringFormat
  12962. xfcGdipDeleteStringFormat
  12963. xfcGdipGetStringFormatAlignr
  12964. xfcGdipGetStringFormatDigitSubstitutionF
  12965. xfcGdipGetStringFormatFlagsf
  12966. xfcGdipGetStringFormatHotkeyPrefix:
  12967. xfcGdipGetStringFormatLineAlign-
  12968. xfcGdipGetStringFormatTabStopCount
  12969. xfcGdipGetStringFormatTabStops
  12970. xfcGdipGetStringFormatTrimming
  12971. xfcGdipSetStringFormatAlign
  12972. xfcGdipSetStringFormatDigitSubstitution
  12973. xfcGdipSetStringFormatFlags
  12974. xfcGdipSetStringFormatHotkeyPrefix
  12975. xfcGdipSetStringFormatLineAlign
  12976. xfcGdipSetStringFormatMeasurableCharacterRanges
  12977. xfcGdipSetStringFormatTabStops
  12978. xfcGdipSetStringFormatTrimming
  12979. xfcGdipStringFormatGetGenericDefault
  12980. xfcGdipStringFormatGetGenericTypographic
  12981. xfcCreateDC
  12982. xfcDeleteDCS
  12983. xfcStartPage
  12984. xfcEndPage1
  12985. xfcStartDoc
  12986. xfcEndDoc
  12987. xfcGetDeviceCapsv
  12988. GetCurPath
  12989. PR_SetLanguage
  12990. PR_GetLoc
  12991. GetInnerTextFromHTML(
  12992. GetFormDimensions
  12993. cUnit_Assign
  12994. Destroy>
  12995. GetFormList
  12996. ConvertFormDimension.
  12997. MarkSupportedForms
  12998. OneFormObj
  12999. ClearErrors)
  13000. LoadApiDllsw
  13001. OpenPrinters
  13002. ClosePrinter
  13003. EnumFormsz
  13004. DeviceCapabilitiesK
  13005. Num2Long
  13006. Long2Num
  13007. Long2NumFromBuffer
  13008. Short2NumD
  13009. StrZFromBuffer
  13010. StrZFromBufferW\
  13011. StrZCopy_
  13012. RtlPL2PS
  13013. RtlS2PL
  13014. RtlP2PL
  13015. RtlP2PS
  13016. lstrcpyU
  13017. lstrlenW
  13018. lstrlen
  13019. WinApiErrMsgg
  13020. GetVfpVersion
  13021. DoFoxyTherm:
  13022. CreateTherm
  13023. BringWindowToFront1
  13024. LoadF
  13025. InitY
  13026. Destroy"4
  13027. ClearSetProc>4
  13028. ClearSetClassLib,5
  13029. ToMHTML
  13030. PR_FRXOUTPUT
  13031. ReportOutputCleanup
  13032. TestListenerReference
  13033. GetSupportedListenerInfo
  13034. ReportOutputConfig>J
  13035. GetConfigObject
  13036. ReportOutputDeclareReference
  13037. UnloadListenerWT
  13038. HandleError
  13039. CheckPublicListenerCollection
  13040. Execute
  13041. cLanguage_Assign
  13042. PR_MAPIShowMessage
  13043. PR_MAPI_GetMessageText
  13044. Printer
  13045. FOXYLISTENER
  13046. wwrite.ico
  13047. ENGLISH
  13048. Printer
  13049. v2.99 RC 2012.06.20
  13050. FOXYTHERM
  13051. ?GotData?9FoxIt!!!
  13052. PDFx / FoxyPreviewer
  13053. Helvetica
  13054. CPRINTERNAME
  13055. LSAVETOFILE
  13056. LSENDTOEMAIL
  13057. LPRINTVISIBLE
  13058. LSHOWCOPIES
  13059. LSHOWMINIATURES
  13060. LSHOWCLOSE
  13061. LSHOWPRINTBTN
  13062. LSHOWPAGECOUNT
  13063. LPRINTERPREF
  13064. LSAVEASIMAGE
  13065. LSAVEASHTML
  13066. LSAVEASRTF
  13067. LSAVEASXLS
  13068. LSAVEASPDF
  13069. LSAVEASTXT
  13070. LSAVEASMHT
  13071. LQUIETMODE    
  13072. CDESTFILE
  13073. LPRINTED
  13074. LSAVED
  13075. LEMAILED
  13076. NPAGETOTAL
  13077. NCOPIES
  13078. CTITLE
  13079. CTOOLBARTITLE    
  13080. OLISTENER
  13081. CDEFAULTLISTENER
  13082. CSUCCESSOR
  13083. NCANVASCOUNT
  13084. NZOOMLEVEL
  13085. NWINDOWSTATE    
  13086. NDOCKTYPE    
  13087. CFORMICON
  13088. LUSELISTENER
  13089. LEMAILAUTO
  13090. CEMAILTYPE    
  13091. CEMAILPRG
  13092. CSAVEDEFNAME
  13093. CSMTPSERVER    
  13094. NSMTPPORT
  13095. LSMTPUSESSL
  13096. CSMTPUSERNAME
  13097. CSMTPPASSWORD
  13098. CEMAILTO
  13099. CEMAILSUBJECT
  13100. CEMAILBODY
  13101. CEMAILFROM
  13102. CEMAILCC    
  13103. CEMAILBCC
  13104. CEMAILREPLYTO
  13105. LAUTOSENDMAIL
  13106. NBUTTONSIZE    
  13107. CCODEPAGE
  13108. LPDFASIMAGE
  13109. NMAXMINIATUREDISPLAY    
  13110. CLANGUAGE
  13111. NSHOWTOOLBAR
  13112. LSHOWSETUP
  13113. LSHOWPRINTERS
  13114. LSHOWSEARCH
  13115. LSILENT
  13116. CERRORS    
  13117. LEXTENDED
  13118. _CLAUSENRANGEFROM
  13119. _CLAUSENRANGETO
  13120. _CLAUSENPRINTRANGEFROM
  13121. _CLAUSENPRINTRANGETO
  13122. _CLAUSELSUMMARY
  13123. _CLAUSECHEADING    
  13124. _CFRXNAME
  13125. _CFRXFULLNAME    
  13126. _OREPORTS    
  13127. _OCLAUSES    
  13128. _OALIASES
  13129. _ONAMES
  13130. _OPROOFSHEET
  13131. _OSETTINGSSHEET
  13132. _OEMAILSHEET
  13133. _CORIGINALPRINTER
  13134. _LSENDTOPRINTER
  13135. _LNOWAIT
  13136. _OLDREPORTOUTPUT
  13137. _OEXHANDLER
  13138. _OCALLER
  13139. _OPARENTFORM
  13140. _DE_NAME
  13141. _OREPORT
  13142. _LSENDINGEMAIL
  13143. _CDEFAULTFOLDER
  13144. _LISDOTMATRIX
  13145. _OLANG
  13146. _NBTSIZE
  13147. _ALANGUAGES
  13148. _ALANGLOCAL
  13149. _LANGINDEX
  13150. COUTPUTPATH
  13151. _COUTPUTALIAS
  13152. _CTEXTTOFIND
  13153. _NINDEX
  13154. _LCANSEARCH
  13155. _LSHOWSEARCHAGAIN
  13156. NPRINTERPROPTYPE
  13157. LDIRECTPRINT
  13158. _TOPFORM
  13159. NVERSION
  13160. CVERSION
  13161. NSEARCHPAGES
  13162. _CTHERMCLASS
  13163. NTHERMTYPE
  13164. CDECRYPTPROCEDURE
  13165. CENCRYPTPROCEDURE    
  13166. CCRYPTKEY
  13167. _CATTACHMENT
  13168. CATTACHMENTS
  13169. LREADRECEIPT    
  13170. LPRIORITY
  13171. NEMAILMODE
  13172. CEMAILBODYFILE
  13173. LPDFEMBEDFONTS
  13174. LPDFCANPRINT
  13175. LPDFCANEDIT
  13176. LPDFCANCOPY
  13177. LPDFCANADDNOTES
  13178. LPDFENCRYPTDOCUMENT
  13179. CPDFMASTERPASSWORD
  13180. CPDFUSERPASSWORD
  13181. LOPENVIEWER
  13182. NPDFPAGEMODE
  13183. LPDFSHOWERRORS
  13184. CPDFSYMBOLFONTSLIST
  13185. CPDFAUTHOR    
  13186. CPDFTITLE
  13187. CPDFSUBJECT
  13188. CPDFKEYWORDS
  13189. CPDFCREATOR
  13190. CPDFDEFAULTFONT
  13191. LPDFREPLACEFONTS
  13192. CADRESSTABLE
  13193. CADRESSSEARCH
  13194. LEXCELCONVERTTOXLS
  13195. LEXCELREPEATHEADERS
  13196. LEXCELREPEATFOOTERS
  13197. LEXCELHIDEPAGENO
  13198. LEXCELALIGNLEFT
  13199. NEXCELSAVEFORMAT
  13200. _SETUDFPARMS    
  13201. CIMGPRINT
  13202. CIMGPRINTPREF
  13203. CIMGSAVE    
  13204. CIMGCLOSE
  13205. CIMGCLOSE2    
  13206. CIMGEMAIL    
  13207. CIMGSETUP
  13208. CIMGMINIATURES
  13209. CIMGSEARCH
  13210. CIMGSEARCHAGAIN
  13211. CIMGSEARCHBACK
  13212. CIMGPRINTBIG
  13213. CIMGPRINTPREFBIG
  13214. CIMGSAVEBIG
  13215. CIMGCLOSEBIG
  13216. CIMGCLOSE2BIG
  13217. CIMGEMAILBIG
  13218. CIMGSETUPBIG
  13219. CIMGMINIATURESBIG
  13220. CIMGSEARCHBIG
  13221. CIMGSEARCHAGAINBIG
  13222. CIMGSEARCHBACKBIG
  13223. _SETTINGSFILE
  13224. _LALREADYOPENED
  13225. _SYS16
  13226. _CLOCALPATH
  13227. _CORIGREPPREVIEW
  13228. _CLANGLOADED
  13229. _PREVIEWVERSION
  13230. OSETTINGSDLG
  13231. LEXPANDFIELDS
  13232. CPRINTJOBNAME
  13233. CEXCELDEFAULTEXTENSION
  13234. _INITSTATUSTEXT
  13235. _PREPASSSTATUSTEXT
  13236. _RUNSTATUSTEXT
  13237. _SECONDSTEXT
  13238. _CANCELINSTRTEXT
  13239. _CANCELQUERYTEXT
  13240. _REPORTINCOMPLETETEXT
  13241. _ATTENTIONTEXT
  13242. LREPEATINPAGE
  13243. CWATERMARKIMAGE
  13244. NWATERMARKTYPE
  13245. NWATERMARKTRANSPARENCY
  13246. NWATERMARKWIDTHRATIO
  13247. NWATERMARKHEIGHTRATIO
  13248. pr_previous.bmp
  13249. pr_next.bmp
  13250. pr_top.bmp
  13251. pr_bottom.bmp
  13252. pr_Locate.bmp
  13253. pr_Print.bmp
  13254. pr_PrintPref.bmp
  13255. pr_gotopage.bmp
  13256. pr_1page.bmp
  13257. pr_2page.bmp
  13258. pr_4page.bmp
  13259. pr_close.bmp
  13260. pr_close2.bmp
  13261. pr_Save.bmp
  13262. pr_Mail.bmp
  13263. pr_Gear.bmp
  13264. pr_Search.bmp
  13265. pr_SearchAgain.bmp
  13266. pr_SearchBack.bmp
  13267. PREVIEWFORM
  13268. LHIGHLIGHTTEXT
  13269. _CREATINGCANVASES
  13270. IMGBTN_PREV
  13271. IMGBTN_NEXT
  13272. IMGBTN_TOP
  13273. IMGBTN_BOTT
  13274. IMGBTN_MINI
  13275. IMGBTN_PRINT
  13276. IMGBTN_PRINTPREF
  13277. IMGBTN_GOTOPG
  13278. IMGBTN_1PG
  13279. IMGBTN_2PG
  13280. IMGBTN_4PG
  13281. IMGBTN_CLOSE
  13282. IMGBTN_CLOSE2
  13283. IMGBTN_SAVE
  13284. IMGBTN_EMAIL
  13285. IMGBTN_SETUP
  13286. IMGBTN_SEARCH
  13287. IMGBTN_SEARCHAGAIN
  13288. IMGBTN_SEARCHBACK9
  13289. WIDTH
  13290. BORDERWIDTH
  13291. HEIGHT
  13292. VISIBLEA
  13293. CAPTION
  13294. WIDTH    
  13295. _GOHELPER
  13296. _NBTSIZE
  13297. HEIGHT
  13298. SPECIALEFFECTx
  13299. BACKSTYLE
  13300. BORDERWIDTH
  13301. HEIGHT
  13302. WIDTH
  13303. VISIBLE
  13304. SPNCOPIES1    
  13305. SPNCOPIES
  13306. LBLCOPIES1    
  13307. LBLCOPIES
  13308. WIDTH
  13309. HEIGHT
  13310. SPECIALEFFECT    
  13311. INCREMENT
  13312. SPINNERHIGHVALUE
  13313. SPINNERLOWVALUE
  13314. KEYBOARDHIGHVALUE
  13315. KEYBOARDLOWVALUE
  13316. VISIBLE3
  13317. AUTOSIZE    
  13318. BACKSTYLE
  13319. VISIBLE:
  13320. pr_Save.bmp
  13321. PICTURE
  13322. VISIBLEI
  13323. HEIGHT
  13324. WIDTH
  13325. VISIBLE
  13326. NINDEX?
  13327. pr_PrintPref.bmp
  13328. PICTURE
  13329. VISIBLE:
  13330. pr_Gear.bmp
  13331. PICTURE
  13332. VISIBLE:
  13333. pr_Mail.bmp
  13334. PICTURE
  13335. VISIBLEO
  13336. pr_close.bmp
  13337. PICTURE
  13338. VISIBLEO
  13339. pr_Print.bmp
  13340. PICTURE
  13341. VISIBLE>
  13342. pr_gotopage.bmp
  13343. PICTURE
  13344. VISIBLEz
  13345. BACKSTYLE
  13346. BORDERWIDTH
  13347. HEIGHT
  13348. WIDTH
  13349. VISIBLE
  13350. CMDSEARCH1    
  13351. CMDSEARCH
  13352. CMDSEARCHAGAIN1
  13353. CMDSEARCHAGAIN
  13354. CMDSEARCHBACK1
  13355. CMDSEARCHBACK<
  13356. pr_Search.bmp
  13357. PICTURE
  13358. VISIBLEA
  13359. pr_SearchAgain.bmp
  13360. PICTURE
  13361. VISIBLE@
  13362. pr_SearchBack.bmp
  13363. PICTURE
  13364. VISIBLE
  13365. 220,140
  13366. WIDTH
  13367. COLUMNCOUNT
  13368. COLUMNLINES
  13369. ROWSOURCETYPE
  13370. COLUMNWIDTHS
  13371. STYLE
  13372. VISIBLE
  13373. _CORIGINALPRINTER<
  13374. pr_Locate.bmp
  13375. PICTURE
  13376. VISIBLE
  13377. BACKSTYLE
  13378. BORDERWIDTH
  13379. frxgotopageform
  13380. spnPageno
  13381. lblCaption
  13382. cmdOK
  13383. cmdCancel
  13384. DESKTOP
  13385. HEIGHT
  13386. WIDTH
  13387. SHOWWINDOW
  13388. DOCREATE
  13389. AUTOCENTER
  13390. BORDERSTYLE
  13391. CLOSABLE    
  13392. MAXBUTTON    
  13393. MINBUTTON
  13394. ALWAYSONTOP
  13395. ALLOWOUTPUT
  13396. PAGENO    
  13397. PAGETOTAL
  13398. OPARENTFORM
  13399. SHAPE
  13400. LEFT    
  13401. BACKSTYLE    
  13402. ZORDERSET
  13403. STYLE    
  13404. SPNPAGENO
  13405. SPINNER    
  13406. INPUTMASK
  13407. LBLCAPTION
  13408. LABEL
  13409. AUTOSIZE
  13410. CMDOK    
  13411. CMDREPORT
  13412. DEFAULT
  13413. SPECIALEFFECT    
  13414. CMDCANCEL
  13415. CANCEL/
  13416. wwrite.ico
  13417. SHOWTIPS_
  13418. proofshape
  13419. HEIGHT
  13420. WIDTH
  13421. PAGENO
  13422. NAMEU
  13423. HEIGHT    
  13424. _GOHELPER
  13425. _NBTSIZE
  13426. WIDTH
  13427. CAPTION
  13428. CTYPE
  13429. proofsheet
  13430. HEIGHT
  13431. WIDTH
  13432. SCROLLBARS
  13433. DOCREATE
  13434. AUTOCENTER
  13435. SHOWWINDOW
  13436. DESKTOP
  13437. CURRENTPAGE
  13438. REPORTLISTENER
  13439. LSTARTED
  13440. NPAGES
  13441. LPAINTED
  13442. NCURRSHAPE
  13443. NPAGESET    
  13444. LSHOWDONE    
  13445. LINACTIVE
  13446. NOTHERTHENPROOFOBJ
  13447. NMAXMINIATUREITEM
  13448. OLDESCFUNCTIONP
  13449. VFP CDO 2000(CDOSYS) mailer Ver 1.1 2009
  13450. AERRORS
  13451. NERRORCOUNT
  13452. CXMAILER
  13453. CFROM
  13454. CREPLYTO
  13455. CATTACHMENT
  13456. CSUBJECT    
  13457. CHTMLBODY    
  13458. CTEXTBODY
  13459. CHTMLBODYURL
  13460. CCHARSET
  13461. CSERVER
  13462. NSERVERPORT
  13463. LUSESSL
  13464. NCONNECTIONTIMEOUT
  13465. NAUTHENTICATE    
  13466. CUSERNAME    
  13467. CPASSWORD
  13468. LURLGETLATESTVERSION
  13469. LREADRECEIPT    
  13470. LPRIORITY
  13471. OTHERMFORM
  13472. SHOWWINDOW'
  13473. CDESTFILE
  13474. LISTENERTYPE%
  13475. Internal
  13476. ffffff9@
  13477. HHEAP
  13478. NINCH2MM
  13479. NCM2MM
  13480. NCOEFFICIENT
  13481. CPRINTERNAME
  13482. CUNIT
  13483. NROUND
  13484. CAPIERRORMESSAGE
  13485. CERRORMESSAGE    
  13486. OFORMLIST
  13487. OWAS    
  13488. CFORMNAME
  13489. NFORMNUMBERI
  13490. SHOWWINDOW
  13491. SHOWINTASKBARD
  13492. DATASESSION
  13493. VISIBLE
  13494. ALLOWOUTPUT
  13495. CLANGUAGE
  13496. PreviewHelper
  13497. CUSTOM)y
  13498. ExtensionHandler
  13499. CUSTOM1
  13500. BoxLine
  13501. Line\
  13502. cmdReport
  13503. COMMANDBUTTON
  13504. cntCopies    
  13505. CONTAINER?
  13506. spnCopies
  13507. SPINNER
  13508. lblCopies
  13509. LABEL!
  13510. cmdSave    
  13511. cmdReport{
  13512. cmbSave
  13513. COMBOBOX
  13514. cmdPrinterProps    
  13515. cmdReport8
  13516. cmdSetup    
  13517. cmdReport
  13518. cmdEmail    
  13519. cmdReport
  13520. cmdExit    
  13521. cmdReport-
  13522. cmdPrintEx    
  13523. cmdReport
  13524. cmdGotoEx    
  13525. cmdReport
  13526. cntSearch    
  13527. CONTAINERK
  13528. cmdSearch    
  13529. cmdReportP
  13530. cmdSearchAgain    
  13531. cmdReport
  13532. cmdSearchBack    
  13533. cmdReport
  13534. cmbPrinters
  13535. COMBOBOXO
  13536. cmdProof    
  13537. cmdReport6
  13538. cntCanvas    
  13539. Container
  13540. CustomFrxGotoPageForm    
  13541. frmReport
  13542. frmReport
  13543. proofshape
  13544. SHAPE2
  13545. PageSetBtn
  13546. COMMANDBUTTON
  13547. proofsheet    
  13548. frmReport?
  13549. PChar
  13550. CUSTOM
  13551. cdo2000
  13552. CUSTOM
  13553. ITLFForm
  13554. FormC
  13555. ExportListener
  13556. REPORTLISTENERc
  13557. EnumPrinterForms
  13558. Custom
  13559. WinApiSupport
  13560. Custom^
  13561. ATLForm
  13562. FoxyInitForm
  13563. CustomP
  13564. Customa
  13565. EXCEPTION
  13566. OBJECT
  13567. ENDTEXT
  13568. LPARAMETERS oFoxcode
  13569. LOCAL lcPurpose
  13570. IF oFoxcode.Location = 0
  13571.    RETURN "FoxyPreview"
  13572. ENDIF
  13573. oFoxcode.valuetype = "V"
  13574. <<lcText>> TO lcScript TEXTMERGE NOSHOW
  13575. **********************************************************************
  13576. * FoxyPreview sample script
  13577. SET PROCEDURE TO FoxyPreviewer.prg ADDITIVE
  13578. LOCAL loReport AS ReportHelper OF FoxyPreviewer.prg
  13579. loReport = CREATEOBJECT("PreviewHelper")
  13580. WITH loReport as ReportHelper
  13581.     * Add the FRX and clauses here
  13582.     .AddReport(_Samples + "\Solution\Reports\colors.frx")
  13583. *    .AddReport(_Samples + "\Solution\Reports\wrapping.frx", "NODIALOG FOR title = [S]")
  13584.     * Optional available parameters
  13585.     .cDestFile       = ""  && the destination file (image, htm, pdf, etc)
  13586.             && if using this property, the preview window will not open, and the 
  13587.             && output file will be automatically generated
  13588.     .cTitle = "Report custom title" && The preview window title 
  13589.     .lSendToEmail     = .T. && adds the send to email button
  13590.     .lSaveToFile      = .T. && adds the save to file button
  13591.     .lShowCopies      = .T. && shows the copies spinner
  13592.     .lShowMiniatures  = .T. && shows the miniatures page
  13593.     .lShowSearch      = .T. && shows the search buttons
  13594.     .nCopies          = 3 && The quantity of copies to be printed
  13595.     .lPrintVisible    = .T. && shows the print button in the toolbar
  13596.     .lPrinterPref     = .T. && shows the Printer preferences button
  13597.     .nShowToolBar = 1 && 1 = Visible (default), 2 = Invisible, 3 = Use resource
  13598.     .lShowSetup  = .T.
  13599.     .lShowPrinters  = .T. && determines if the available printers combo will be shown
  13600.     * Output types allowed in the "Save as..." button from the toolbar
  13601.     .lSaveAsImage        = .T.
  13602.     .lSaveAsHTML        = .T.
  13603.     .lSaveAsRTF            = .T.
  13604.     .lSaveAsXLS            = .T.
  13605.     .lSaveAsPDF            = .T.
  13606.     .lSaveAsTXT            = .T.
  13607.     .nCanvasCount     = 1 && initial nr of pages rendered on the preview form. 
  13608.             && Valid values are 1 (default), 2, or 4.
  13609.     .nZoomLevel        = 5 && initial zoom level of the preview window. Possible values are:
  13610.             && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ;
  13611.             && 7-200%, 8-300%, 9-500%, 10-whole page
  13612.     .nDockType        = .F. && Default = False - means to keep the current dock settings from the resource 
  13613.             *    
  13614. 1 Undocks the toolbar or form.
  13615.             *     0 Positions the toolbar or form at the top of the main Visual FoxPro window.
  13616.             *     1 Positions the toolbar or form at the left side of the main Visual FoxPro window.
  13617.             *     2 Positions the toolbar or form at the right side of the main Visual FoxPro window.
  13618.             *     3 Positions the toolbar or form at the bottom of the main Visual FoxPro window.
  13619.     .cFormIcon = "" && the icon used in the dialogs
  13620.     .lUseListener = .T. && Determines if ReportBehavior80 will be used for printing (dotmatrix)
  13621.     .cLanguage = "SPANISH"
  13622.     .nButtonSize   = 1 && 1=16x16 pixels (default), 2=32x32 pixels
  13623.     * PDF options
  13624.     .lPDFasImage     = .F.
  13625.     .nPDFPageMode = 0 && Default = 0, 0 = Normal view, 1 = Show the outlines pane, 2 = Show the thumbnails pane
  13626.     * Email options
  13627.     .lEmailAuto = .T.         && Automatically generates the report output file
  13628.     .cEmailType = "PDF"         && The file type to be used in Emails (PDF, RTF, HTML, XML or XLS)
  13629.     .cEmailPRG  = ""
  13630.     .nEmailMode = 1          && 1 = MAPI, 2 = CDOSYS, 3 = Custom procedure
  13631.     .cSMTPServer   = ""
  13632.     .nSMTPPort     = 25
  13633.     .lSMTPUseSSL   = .F.
  13634.     .cSMTPUserName = ""
  13635.     .cSMTPPassword = ""
  13636.     .cEmailTo      = ""
  13637.     .cEmailSubject = ""
  13638.     .cEmailBody    = ""
  13639.     .cEmailFrom    = ""
  13640.     .cEmailCC         = ""
  13641.     .cEmailBCC         = ""
  13642.     .cEmailReplyTo    = ""
  13643.     .lAutoSendMail= .F.        && Send an email automatically when processing the report
  13644.     * Execute the report preview
  13645.     .RunReport()
  13646.     MESSAGEBOX("Report was " + IIF(.lPrinted, "", "NOT ") + "printed !",64, "Attention !")
  13647.     * Check also .lSaved and .lEmailed
  13648. ENDWITH
  13649. loReport = NULL
  13650. RELEASE loReport
  13651. **********************************************************************
  13652. <<lcEndText>>
  13653. RETURN lcScript
  13654. FoxyPreview
  13655. FOXYPREVIEW
  13656. LNSELECT
  13657. LOEXC    
  13658. LCFOXCODE
  13659. LCSYSTEMFOXCODE
  13660. LODATA
  13661. LCTEXT    
  13662. LCENDTEXT
  13663. LCSCRIPT
  13664. ABBREV
  13665. aWM_J6_K8_L9_M:_M;_M<^L8\^`
  13666.                             
  13667.                             
  13668. u5s5s-3-3m
  13669. V                
  13670. ^[                    
  13671. AAx;<x;<r99n67
  13672. D$G2!
  13673. 91r99
  13674. q[KG<4
  13675. =5x;<
  13676. G<4G<4
  13677. B<}>>
  13678. q[Kq[Kq[Kq[Kq[Kq[KvbR}j[
  13679. R?g33
  13680. opBM6
  13681. 'Cv%H
  13682. \deDl
  13683. ???%%%%%%%%%%%%%%%%%%%%%%%%
  13684. xuuuss
  13685. zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  13686. bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4bH4
  13687. Y0k<&
  13688. cI5cI5cI5
  13689. teKg|~
  13690. !This program cannot be run in DOS mode.
  13691. .text
  13692. `.rdata
  13693. @.data
  13694. .rsrc
  13695. @.reloc
  13696. T$$A;
  13697. T$    ~s
  13698. F<!r4<~w0<\t,<%t(<#t$</t <(t
  13699. r4<~w0<\t,<%t(<#t$</t <(t
  13700. L$ QW
  13701. T$ RW
  13702. T$TRU
  13703. L$PQV
  13704. D$TPU
  13705. L$PQV
  13706. 8MRTSu
  13707. tHj0j
  13708. t:j0j
  13709. VWj0S
  13710. L$/QR@P
  13711. L$;QhD
  13712. T$(RP
  13713. T$(QRP
  13714. u%j W
  13715. L$(QW
  13716. T$<RW
  13717. D$PPW
  13718. t@j0j
  13719. y#^][
  13720. ]_^[Y
  13721. ]_^[Y
  13722. ]_^[Y
  13723. V$UQSR
  13724. ]_^[Y
  13725. L$$SQ
  13726. T$WRh
  13727. D$DPW
  13728. L$CQRP
  13729. T$[Rh
  13730. D$HPW
  13731. D$DPW
  13732. t ^[_
  13733. D$0PS
  13734. 8DCNEu
  13735. @Af;F
  13736. 8DCNEu    
  13737. 8DCNEt
  13738. ?DCNEt
  13739. 8DCNEt
  13740. 8DCNEu
  13741. Pt<It'It
  13742. VWt    S
  13743. L$4j<U
  13744. T$,RP
  13745. L$$QR
  13746. D$ r7
  13747. T$<RP
  13748. D$<PQ
  13749. VWj!S
  13750. Ws/Qj
  13751. D$0j 
  13752. t$dWj 
  13753. D$$vT2
  13754. D$(vT2
  13755. D$\vT2
  13756. D$$PV
  13757. D$ vT2
  13758. ~,PQV
  13759. D$(PQ
  13760. uH+|$
  13761. L$ VQ
  13762. T$3UR
  13763. D$8PW
  13764. 0^_][
  13765. ][_^Y
  13766. t-[_^]
  13767. L$<QR
  13768. t+[_^]
  13769. L$$QW
  13770. L$<QW
  13771. L$TQW
  13772. D$ PW
  13773. D$8PW
  13774. D$PPW
  13775. L$ PW
  13776. D$8PW
  13777. D$PPW
  13778. L$LQR
  13779. L$LQR
  13780. D$4PV
  13781. D$LPV
  13782. D$4PV
  13783. D$LPV
  13784. D$4PV
  13785. D$LPV
  13786. D$4PV
  13787. D$LPV
  13788. L$$QS
  13789. L$<QS
  13790. L$,QS
  13791. D$(u V
  13792. L$<QR
  13793. L$$QV
  13794. D$$PV
  13795. T$ RV
  13796. L$0QV
  13797. L$(QV
  13798. D$,SUVW
  13799. \$ t;j
  13800. D$ f=
  13801. T$$VRf
  13802. D$ ;D$
  13803. t$<    t <
  13804. D$ hT4
  13805. tO<    tK<
  13806. t?< t;
  13807. L$$hH4
  13808. L$$h@4
  13809. T$$h04
  13810. D$$h$4
  13811. u0QRP
  13812. SUVW3
  13813. T$0RP
  13814. t$(VR
  13815. T$(RP
  13816. SVWu4
  13817. QSUVW
  13818. _^][Y
  13819. T$ VR
  13820. _^][Y
  13821. _^][Y
  13822. _^][Y
  13823. _^][Y
  13824. _^][Y
  13825. _^][Y
  13826. T$8RW
  13827. D$8PW
  13828. D$ PW
  13829. D$ PW
  13830. D$8PhH4
  13831. _^][Y
  13832. D$$PU
  13833. L$$QU
  13834. L$0UQ
  13835. T$$WR
  13836. T$0VR
  13837. L$4QhH4
  13838. U$WhL
  13839. D$(SUVW
  13840. D$<VP
  13841. L$(QU
  13842. T$ RU
  13843. |$DSW
  13844. D$4PU
  13845. T$,GRU
  13846. L$H@;
  13847. T$4Ph
  13848. L$8h@
  13849. D$XPQ
  13850. D$ h0
  13851. D$4PQ
  13852. D$@hp
  13853. D$(h`
  13854. D$TPQ
  13855. D$ h@
  13856. T$@RP
  13857. D$@PQ
  13858. T$XRP
  13859. T$@RP
  13860. D$8PQ
  13861. L$(QR
  13862. T$4RP
  13863. T$DRP
  13864. D$(PQ
  13865. L$(QR
  13866. D$DPQ
  13867. D$ hd
  13868. D$(PQ
  13869. D$ hT
  13870. T$ UR
  13871. T$ VR
  13872. T$8RQ
  13873. L$(WU
  13874. T$(h$
  13875. 8FDPAu
  13876. 8FDPAu)
  13877. >FDPAu$
  13878. N`RPQ
  13879. 8FDPAu$
  13880. >FDPAt    
  13881. >FDPAu!
  13882. >FDPAu$
  13883. >FDPAu$
  13884. 8FDPAu!
  13885. 8FDPAuN
  13886. >FDPAu$
  13887. >FDPAu$
  13888. V$WSR
  13889. 8FDPAt
  13890. WLSVR
  13891. ?FDPAu$
  13892. WPSVR
  13893. ?FDPAu$
  13894. 8FDPAu!
  13895. SUVW3
  13896. >FDPAu(
  13897. HtGHt
  13898. >FDPAu$
  13899. ^Du!j
  13900. ^Du!j
  13901. >FDPAu$
  13902. >FDPAu$
  13903. >FDPAu$
  13904. 8FDPAu!
  13905. 8FDPAu$
  13906. 8FDPAu!
  13907. 8FDPAu$
  13908. >FDPAu$
  13909. 8FDPAu!
  13910. 8FDPAu$
  13911. >FDPAu$
  13912. >FDPAu!
  13913. L$8QP
  13914. >FDPAu$
  13915. 8FDPAu$
  13916. 8FDPAt
  13917. 8FDPAt
  13918. 8FDPAt
  13919. 8FDPAu
  13920. >FDPA
  13921. ;FDPAu1S
  13922. >FDPAu$
  13923. ^h[_3
  13924. V`QPR
  13925. F(_^[
  13926. >FDPAu$
  13927. >FDPAu$
  13928. >FDPAu$
  13929. t ;Flw
  13930. >FDPAu*
  13931. =FDPAt    
  13932. >FDPAu(
  13933. _[t    U
  13934. >FDPAu$
  13935. >FDPAu$
  13936. >FDPAt
  13937. L$,RPQ
  13938. L$<PQV
  13939. t!_^[
  13940. t!_^[
  13941. O,WSP
  13942. SWUh\
  13943. ttWhX
  13944. D$(PQ
  13945. D$(PQ
  13946. D$(PQ
  13947. \$@VS
  13948. t$0Wh
  13949. T$(RP
  13950. D$$t,
  13951. D$(PQ
  13952. T$8RP
  13953. T$8RP
  13954. T$8RP
  13955. T$ RP
  13956. T$0RP
  13957. T$8RP
  13958. T$8RP
  13959. T$ RP
  13960. T$DRP
  13961. T$DRP
  13962. |$$WP
  13963. |$$WP
  13964. |$$WP
  13965. |$$WP
  13966. F,SUWh
  13967. D$ PQ
  13968. T$0RP
  13969. |$ WP
  13970. |$ WP
  13971. F,SUWh
  13972. D$ PQ
  13973. @SUWQ
  13974. T$HRP
  13975. VLSWR
  13976. NLPSWQ
  13977. ^(^_[
  13978. N,_]3
  13979. N0_]3
  13980. QRWUP
  13981. VRPWUQ
  13982. u    _^]
  13983. T$LQRV
  13984. T$TRj
  13985. D$dPUV
  13986. T$,RW
  13987. L$$QW
  13988. D$LPV
  13989. D$PPV
  13990. L$PQV
  13991. D$TPj
  13992. D$(PV
  13993. L$4QV
  13994. D$(PV
  13995. L$4QV
  13996. T$@RV
  13997. D$(PV
  13998. L$4QV
  13999. T$@RV
  14000. T$ Rh
  14001. T$$QRW
  14002. L$$QW
  14003. T$ RU
  14004. D$ PU
  14005. L$ QU
  14006. \$ uR
  14007. L$(Rhx
  14008. V$PQR
  14009. T$$RV
  14010. D$0PV
  14011. L$<QV
  14012. T$HRV
  14013. D$TPV
  14014.  SUW3
  14015. F$QRP
  14016. N$SPQ
  14017. tQVhx
  14018. L$(IQV
  14019. L$ PQ
  14020. D$$PS
  14021. Sj VW
  14022. 0:@j?Q
  14023. )QWh`
  14024. SVWPQj
  14025. _^][Y
  14026. _^][Y
  14027. Eh_^][Y
  14028. El@u    U
  14029. MxQRU
  14030. BPARQVU
  14031. @PQRU
  14032. SUVW3
  14033. _^][Y
  14034. \$HUVWt
  14035. l$(u[
  14036. HtpHtAHt
  14037. T$0t^Ht/Hur
  14038. Fp@t=
  14039. \$,v~
  14040. HHIIN
  14041. T$0W3
  14042. :D$$u
  14043. :D$,u
  14044. D$$GH
  14045. f;D$,
  14046. f;D$(u    
  14047. D$(FH
  14048. D$@GFH
  14049. |$4u    f;
  14050. D$,FGH
  14051. D$HFA
  14052. f;t$ u
  14053. L$Df3
  14054. L$4f3
  14055. L$$f;q
  14056. u8f;y
  14057. u2f;i
  14058. u9f;U
  14059. u3f;u
  14060. _^][Y
  14061. \$ HIK
  14062. _^][Y
  14063. _^][Y
  14064. _^][Y
  14065. _^][Y
  14066. _^][Y
  14067. D$ w93
  14068. GTPVj
  14069. |$PVU
  14070. L$TQU
  14071. |$Lu&VU
  14072. T$TRU
  14073. D$TPU
  14074. T$DQURV
  14075. $_^][
  14076. _^][Y
  14077. _^][Y
  14078. _^][Y
  14079. _^][Y
  14080. _^][Y
  14081.  t h@
  14082. D$L=x
  14083. L$$UR
  14084. D$`QRPV
  14085. QSUVW
  14086. _^][Y
  14087. _^][Y
  14088. _^][Y
  14089. _^][Y
  14090. _^][Y
  14091. D$ VUSPW
  14092. _^][Y
  14093. _^][Y
  14094. l$,VUW
  14095. RPWSV
  14096. RPWSV
  14097. T$0RS
  14098. ;t$(w
  14099. ;t$(w
  14100. t$0UQ
  14101. T$<PQVRS
  14102. D$$PQ
  14103. D$$GPW
  14104. L$4RPQS
  14105. L$ QS
  14106. QSUVW
  14107. _^][Y
  14108. _^][Y
  14109. QVRSUW
  14110. _^][Y
  14111. _^][Y
  14112. \$ UV
  14113.  u'US
  14114. D$4PS
  14115. t$4VS
  14116. t$ VPS
  14117.  u+US
  14118. <ArE<zwA<Zv
  14119. <Ar2<zw.<Zv
  14120. SUVWuV
  14121. D$,VW3
  14122. ExPRU
  14123. Eh_^][Y
  14124. Fl_^][
  14125. 8U    uA
  14126. L$Th\
  14127. T$Th(
  14128. t$(VU
  14129. L$(@;
  14130. W(9W$u
  14131. tv9_ tq9_$tl
  14132. U0PQR
  14133. U0PQR
  14134. U0PQR
  14135. U0PQR
  14136. S0UQR
  14137. K0UPQ
  14138. _^][Y
  14139. _^][Y
  14140. l$ VW
  14141. D$(8D
  14142. Nxf+Fd
  14143. _^][Y
  14144. _^][Y
  14145. ~(9~$u
  14146. N(h0%
  14147. D$(PQ
  14148. D$(PQ
  14149. D$(PQ
  14150. T$8t=
  14151. L$,t,
  14152. T$8t!
  14153. S@;Q 
  14154. L$,t,
  14155. T$8t!
  14156. S@;Q(
  14157. KpPQj
  14158. DSpQPj
  14159. T$,AB
  14160. L$(Pt
  14161. L$8;K
  14162. D$TRP
  14163. D$4_^][
  14164. 9s4u(
  14165. K,_^][
  14166. K,_^]3
  14167. |$ WUSV
  14168. @APQV
  14169. T$ RV
  14170. D$$SUV
  14171. D$0tc
  14172. _^][Y
  14173. D$DSU
  14174. L$Xt5;
  14175. L$XJ#
  14176. l$XI;
  14177. ;l$(s^;t$,sX
  14178. DDLJu
  14179. L\Lf9t\L
  14180. |$ AB
  14181. u.;5l
  14182. YYt,V
  14183. C =02CVu
  14184. B 02CV
  14185. VC20XC00U
  14186. YYt-V
  14187.     9x4t
  14188.     9x0t
  14189.     9x@t
  14190. YYt+V
  14191. btFHt+
  14192. u79=P
  14193. Y]_^[
  14194. QQSVW3
  14195. @PVSS
  14196. t#SSUP
  14197. t$$VSS
  14198. _^][YY
  14199. HHt`HHt\
  14200. SVWUj
  14201. t.;t$$t(
  14202. HHtjHHtF
  14203. VWj Y
  14204. SVWj ^
  14205. F,98uX
  14206. VWumh`M
  14207. t|hDM
  14208. v    N+D$
  14209. t]HtN
  14210. t:Ht+
  14211. t5Ht&Ht
  14212. t5Ht&-=
  14213. t6Ht*Ht
  14214. t+Ht$Ht
  14215. +t"HHt
  14216.     j    XO
  14217. j8h0S
  14218. u8SS3
  14219. FVh,S
  14220. t!SS9]
  14221. u.hdS
  14222. PPPPPPPP
  14223. GWh,S
  14224. PPPPPPPP
  14225. wLVWP
  14226. It    Iu*
  14227. WWWWVSW
  14228. t2WWVPVSW
  14229. LSVWj
  14230. xd;=L
  14231. F1.2.3
  14232. false
  14233. Length
  14234. endstream
  14235. stream
  14236. DCTDecode
  14237. FlateDecode
  14238. Filter
  14239. %%EOF
  14240. startxref
  14241. trailer
  14242. endobj
  14243.    ! 
  14244.  &   ! 
  14245.  &   ! 
  14246.  &   ! 
  14247.  &   ! 
  14248.  &   ! 
  14249.  &   ! 
  14250.  &   ! 
  14251.  &   ! 
  14252.  &   ! 
  14253.  &   ! 
  14254. %$%,%4%<%
  14255. "H"d"e"
  14256. P%Q%R%Q
  14257. S%T%U%V%W%X%Y%Z%[%\%]%^%_%`%a%
  14258. b%c%d%e%f%g%h%i%j%k%l%
  14259. KOI8-R
  14260. CP1258
  14261. CP1257
  14262. CP1256
  14263. CP1255
  14264. CP1254
  14265. CP1253
  14266. CP1252
  14267. CP1251
  14268. CP1250
  14269. ISO8859-16
  14270. ISO8859-15
  14271. ISO8859-14
  14272. ISO8859-13
  14273. ISO8859-11
  14274. ISO8859-10
  14275. ISO8859-9
  14276. ISO8859-8
  14277. ISO8859-7
  14278. ISO8859-6
  14279. ISO8859-5
  14280. ISO8859-4
  14281. ISO8859-3
  14282. ISO8859-2
  14283. WinAnsiEncoding
  14284. MacRomanEncoding
  14285. StandardEncoding
  14286. FontSpecific
  14287. afii57700
  14288. afii57723
  14289. afii57695
  14290. afii57694
  14291. afii57705
  14292. bracerightbt
  14293. bracerightmid
  14294. bracerighttp
  14295. bracketrightbt
  14296. bracketrightex
  14297. bracketrighttp
  14298. parenrightbt
  14299. parenrightex
  14300. parenrighttp
  14301. integralex
  14302. braceex
  14303. braceleftbt
  14304. braceleftmid
  14305. bracelefttp
  14306. bracketleftbt
  14307. bracketleftex
  14308. bracketlefttp
  14309. parenleftbt
  14310. parenleftex
  14311. parenlefttp
  14312. trademarksans
  14313. copyrightsans
  14314. registersans
  14315. arrowhorizex
  14316. arrowvertex
  14317. radicalex
  14318. Ydieresissmall
  14319. Thornsmall
  14320. Yacutesmall
  14321. Udieresissmall
  14322. Ucircumflexsmall
  14323. Uacutesmall
  14324. Ugravesmall
  14325. Oslashsmall
  14326. Odieresissmall
  14327. Otildesmall
  14328. Ocircumflexsmall
  14329. Oacutesmall
  14330. Ogravesmall
  14331. Ntildesmall
  14332. Ethsmall
  14333. Idieresissmall
  14334. Icircumflexsmall
  14335. Iacutesmall
  14336. Igravesmall
  14337. Edieresissmall
  14338. Ecircumflexsmall
  14339. Eacutesmall
  14340. Egravesmall
  14341. Ccedillasmall
  14342. AEsmall
  14343. Aringsmall
  14344. Adieresissmall
  14345. Atildesmall
  14346. Acircumflexsmall
  14347. Aacutesmall
  14348. Agravesmall
  14349. questiondownsmall
  14350. Cedillasmall
  14351. Acutesmall
  14352. Macronsmall
  14353. Dieresissmall
  14354. centoldstyle
  14355. exclamdownsmall
  14356. Zsmall
  14357. Ysmall
  14358. Xsmall
  14359. Wsmall
  14360. Vsmall
  14361. Usmall
  14362. Tsmall
  14363. Ssmall
  14364. Rsmall
  14365. Qsmall
  14366. Psmall
  14367. Osmall
  14368. Nsmall
  14369. Msmall
  14370. Lsmall
  14371. Ksmall
  14372. Jsmall
  14373. Ismall
  14374. Hsmall
  14375. Gsmall
  14376. Fsmall
  14377. Esmall
  14378. Dsmall
  14379. Csmall
  14380. Bsmall
  14381. Asmall
  14382. Gravesmall
  14383. questionsmall
  14384. nineoldstyle
  14385. eightoldstyle
  14386. sevenoldstyle
  14387. sixoldstyle
  14388. fiveoldstyle
  14389. fouroldstyle
  14390. threeoldstyle
  14391. twooldstyle
  14392. oneoldstyle
  14393. zerooldstyle
  14394. ampersandsmall
  14395. dollaroldstyle
  14396. exclamsmall
  14397. Zcaronsmall
  14398. Tildesmall
  14399. Scaronsmall
  14400. Ringsmall
  14401. Ogoneksmall
  14402. OEsmall
  14403. Lslashsmall
  14404. Hungarumlautsmall
  14405. Dotaccentsmall
  14406. Circumflexsmall
  14407. Caronsmall
  14408. Brevesmall
  14409. tsuperior
  14410. ssuperior
  14411. rsuperior
  14412. osuperior
  14413. msuperior
  14414. lsuperior
  14415. isuperior
  14416. esuperior
  14417. dsuperior
  14418. bsuperior
  14419. asuperior
  14420. periodsuperior
  14421. periodinferior
  14422. hyphensuperior
  14423. hypheninferior
  14424. dollarsuperior
  14425. dollarinferior
  14426. commasuperior
  14427. commainferior
  14428. centsuperior
  14429. centinferior
  14430. threequartersemdash
  14431. rupiah
  14432. onefitted
  14433. trademarkserif
  14434. registerserif
  14435. copyrightserif
  14436. dieresisgrave
  14437. dieresisacute
  14438. dblgrave
  14439. cyrflex
  14440. cyrbreve
  14441. dblGrave
  14442. cyrFlex
  14443. cyrBreve
  14444. Macron
  14445. Hungarumlaut
  14446. Grave
  14447. DieresisGrave
  14448. DieresisAcute
  14449. Dieresis
  14450. Caron
  14451. Acute
  14452. afii10832
  14453. afii10831
  14454. afii10192
  14455. afii10064
  14456. afii10063
  14457. commaaccent
  14458. dotlessj
  14459. musicalnotedbl
  14460. musicalnote
  14461. diamond
  14462. heart
  14463. spade
  14464. female
  14465. invsmileface
  14466. smileface
  14467. openbullet
  14468. invcircle
  14469. invbullet
  14470. H18533
  14471. circle
  14472. lozenge
  14473. triaglf
  14474. triagdn
  14475. triagrt
  14476. triagup
  14477. filledrect
  14478. H18551
  14479. H18543
  14480. H22073
  14481. filledbox
  14482. dkshade
  14483. shade
  14484. ltshade
  14485. rtblock
  14486. lfblock
  14487. block
  14488. dnblock
  14489. upblock
  14490. SF440000
  14491. SF530000
  14492. SF540000
  14493. SF400000
  14494. SF460000
  14495. SF450000
  14496. SF410000
  14497. SF480000
  14498. SF470000
  14499. SF230000
  14500. SF200000
  14501. SF190000
  14502. SF420000
  14503. SF370000
  14504. SF360000
  14505. SF260000
  14506. SF270000
  14507. SF280000
  14508. SF380000
  14509. SF490000
  14510. SF500000
  14511. SF250000
  14512. SF210000
  14513. SF220000
  14514. SF390000
  14515. SF520000
  14516. SF510000
  14517. SF240000
  14518. SF430000
  14519. SF050000
  14520. SF070000
  14521. SF060000
  14522. SF090000
  14523. SF080000
  14524. SF040000
  14525. SF020000
  14526. SF030000
  14527. SF010000
  14528. SF110000
  14529. SF100000
  14530. angleright
  14531. angleleft
  14532. integralbt
  14533. integraltp
  14534. revlogicalnot
  14535. house
  14536. dotmath
  14537. perpendicular
  14538. circlemultiply
  14539. circleplus
  14540. reflexsuperset
  14541. reflexsubset
  14542. notsubset
  14543. propersuperset
  14544. propersubset
  14545. greaterequal
  14546. lessequal
  14547. equivalence
  14548. notequal
  14549. approxequal
  14550. congruent
  14551. similar
  14552. therefore
  14553. integral
  14554. union
  14555. intersection
  14556. logicalor
  14557. logicaland
  14558. angle
  14559. orthogonal
  14560. infinity
  14561. proportional
  14562. radical
  14563. asteriskmath
  14564. minus
  14565. summation
  14566. product
  14567. suchthat
  14568. notelement
  14569. element
  14570. gradient
  14571. emptyset
  14572. existential
  14573. partialdiff
  14574. universal
  14575. arrowdblboth
  14576. arrowdbldown
  14577. arrowdblright
  14578. arrowdblup
  14579. arrowdblleft
  14580. carriagereturn
  14581. arrowupdnbse
  14582. arrowupdn
  14583. arrowboth
  14584. arrowdown
  14585. arrowright
  14586. arrowup
  14587. arrowleft
  14588. seveneighths
  14589. fiveeighths
  14590. threeeighths
  14591. oneeighth
  14592. twothirds
  14593. onethird
  14594. aleph
  14595. estimated
  14596. trademark
  14597. prescription
  14598. Rfraktur
  14599. weierstrass
  14600. afii61352
  14601. afii61289
  14602. Ifraktur
  14603. afii61248
  14604. afii57636
  14605. peseta
  14606. franc
  14607. colonmonetary
  14608. parenrightinferior
  14609. parenleftinferior
  14610. nineinferior
  14611. eightinferior
  14612. seveninferior
  14613. sixinferior
  14614. fiveinferior
  14615. fourinferior
  14616. threeinferior
  14617. twoinferior
  14618. oneinferior
  14619. zeroinferior
  14620. nsuperior
  14621. parenrightsuperior
  14622. parenleftsuperior
  14623. ninesuperior
  14624. eightsuperior
  14625. sevensuperior
  14626. sixsuperior
  14627. fivesuperior
  14628. foursuperior
  14629. zerosuperior
  14630. fraction
  14631. exclamdbl
  14632. guilsinglright
  14633. guilsinglleft
  14634. second
  14635. minute
  14636. perthousand
  14637. afii61575
  14638. afii61574
  14639. afii61573
  14640. ellipsis
  14641. twodotenleader
  14642. onedotenleader
  14643. bullet
  14644. daggerdbl
  14645. dagger
  14646. quotedblbase
  14647. quotedblright
  14648. quotedblleft
  14649. quotereversed
  14650. quotesinglbase
  14651. quoteright
  14652. quoteleft
  14653. underscoredbl
  14654. afii00208
  14655. emdash
  14656. endash
  14657. figuredash
  14658. afii300
  14659. afii299
  14660. afii301
  14661. afii61664
  14662. ygrave
  14663. Ygrave
  14664. wdieresis
  14665. Wdieresis
  14666. wacute
  14667. Wacute
  14668. wgrave
  14669. Wgrave
  14670. afii57534
  14671. afii57519
  14672. afii57514
  14673. afii57509
  14674. afii57505
  14675. afii57508
  14676. afii57513
  14677. afii57512
  14678. afii57507
  14679. afii57506
  14680. afii57511
  14681. afii63167
  14682. afii57381
  14683. afii57401
  14684. afii57400
  14685. afii57399
  14686. afii57398
  14687. afii57397
  14688. afii57396
  14689. afii57395
  14690. afii57394
  14691. afii57393
  14692. afii57392
  14693. afii57458
  14694. afii57457
  14695. afii57456
  14696. afii57455
  14697. afii57454
  14698. afii57453
  14699. afii57452
  14700. afii57451
  14701. afii57450
  14702. afii57449
  14703. afii57448
  14704. afii57470
  14705. afii57446
  14706. afii57445
  14707. afii57444
  14708. afii57443
  14709. afii57442
  14710. afii57441
  14711. afii57440
  14712. afii57434
  14713. afii57433
  14714. afii57432
  14715. afii57431
  14716. afii57430
  14717. afii57429
  14718. afii57428
  14719. afii57427
  14720. afii57426
  14721. afii57425
  14722. afii57424
  14723. afii57423
  14724. afii57422
  14725. afii57421
  14726. afii57420
  14727. afii57419
  14728. afii57418
  14729. afii57417
  14730. afii57416
  14731. afii57415
  14732. afii57414
  14733. afii57413
  14734. afii57412
  14735. afii57411
  14736. afii57410
  14737. afii57409
  14738. afii57407
  14739. afii57403
  14740. afii57388
  14741. afii57718
  14742. afii57717
  14743. afii57716
  14744. afii57690
  14745. afii57689
  14746. afii57688
  14747. afii57687
  14748. afii57686
  14749. afii57685
  14750. afii57684
  14751. afii57683
  14752. afii57682
  14753. afii57681
  14754. afii57680
  14755. afii57679
  14756. afii57678
  14757. afii57677
  14758. afii57676
  14759. afii57675
  14760. afii57674
  14761. afii57673
  14762. afii57672
  14763. afii57671
  14764. afii57670
  14765. afii57669
  14766. afii57668
  14767. afii57667
  14768. afii57666
  14769. afii57665
  14770. afii57664
  14771. afii57658
  14772. afii57803
  14773. afii57804
  14774. afii57842
  14775. afii57841
  14776. afii57645
  14777. afii57839
  14778. afii57807
  14779. afii57796
  14780. afii57806
  14781. afii57797
  14782. afii57798
  14783. afii57795
  14784. afii57794
  14785. afii57793
  14786. afii57802
  14787. afii57800
  14788. afii57801
  14789. afii57799
  14790. afii10846
  14791. afii10098
  14792. afii10050
  14793. afii10196
  14794. afii10148
  14795. afii10195
  14796. afii10147
  14797. afii10194
  14798. afii10146
  14799. afii10193
  14800. afii10110
  14801. afii10109
  14802. afii10108
  14803. afii10107
  14804. afii10106
  14805. afii10105
  14806. afii10104
  14807. afii10103
  14808. afii10102
  14809. afii10101
  14810. afii10100
  14811. afii10099
  14812. afii10071
  14813. afii10097
  14814. afii10096
  14815. afii10095
  14816. afii10094
  14817. afii10093
  14818. afii10092
  14819. afii10091
  14820. afii10090
  14821. afii10089
  14822. afii10088
  14823. afii10087
  14824. afii10086
  14825. afii10085
  14826. afii10084
  14827. afii10083
  14828. afii10082
  14829. afii10081
  14830. afii10080
  14831. afii10079
  14832. afii10078
  14833. afii10077
  14834. afii10076
  14835. afii10075
  14836. afii10074
  14837. afii10073
  14838. afii10072
  14839. afii10070
  14840. afii10069
  14841. afii10068
  14842. afii10067
  14843. afii10066
  14844. afii10065
  14845. afii10049
  14846. afii10048
  14847. afii10047
  14848. afii10046
  14849. afii10045
  14850. afii10044
  14851. afii10043
  14852. afii10042
  14853. afii10041
  14854. afii10040
  14855. afii10039
  14856. afii10038
  14857. afii10037
  14858. afii10036
  14859. afii10035
  14860. afii10034
  14861. afii10033
  14862. afii10032
  14863. afii10031
  14864. afii10030
  14865. afii10029
  14866. afii10028
  14867. afii10027
  14868. afii10026
  14869. afii10025
  14870. afii10024
  14871. afii10022
  14872. afii10021
  14873. afii10020
  14874. afii10019
  14875. afii10018
  14876. afii10017
  14877. afii10145
  14878. afii10062
  14879. afii10061
  14880. afii10060
  14881. afii10059
  14882. afii10058
  14883. afii10057
  14884. afii10056
  14885. afii10055
  14886. afii10054
  14887. afii10053
  14888. afii10052
  14889. afii10051
  14890. afii10023
  14891. omega1
  14892. Upsilon1
  14893. theta1
  14894. omegatonos
  14895. upsilontonos
  14896. omicrontonos
  14897. upsilondieresis
  14898. iotadieresis
  14899. omega
  14900. upsilon
  14901. sigma
  14902. sigma1
  14903. omicron
  14904. lambda
  14905. kappa
  14906. theta
  14907. epsilon
  14908. delta
  14909. gamma
  14910. alpha
  14911. upsilondieresistonos
  14912. iotatonos
  14913. etatonos
  14914. epsilontonos
  14915. alphatonos
  14916. Upsilondieresis
  14917. Iotadieresis
  14918. Omega
  14919. Upsilon
  14920. Sigma
  14921. Omicron
  14922. Lambda
  14923. Kappa
  14924. Theta
  14925. Epsilon
  14926. Delta
  14927. Gamma
  14928. Alpha
  14929. iotadieresistonos
  14930. Omegatonos
  14931. Upsilontonos
  14932. Omicrontonos
  14933. Iotatonos
  14934. Etatonos
  14935. Epsilontonos
  14936. anoteleia
  14937. Alphatonos
  14938. dieresistonos
  14939. tonos
  14940. dotbelowcomb
  14941. hookabovecomb
  14942. tildecomb
  14943. acutecomb
  14944. gravecomb
  14945. hungarumlaut
  14946. tilde
  14947. ogonek
  14948. dotaccent
  14949. breve
  14950. caron
  14951. circumflex
  14952. afii64937
  14953. afii57929
  14954. scommaaccent
  14955. Scommaaccent
  14956. oslashacute
  14957. Oslashacute
  14958. aeacute
  14959. AEacute
  14960. aringacute
  14961. Aringacute
  14962. gcaron
  14963. Gcaron
  14964. uhorn
  14965. Uhorn
  14966. ohorn
  14967. Ohorn
  14968. florin
  14969. longs
  14970. zcaron
  14971. Zcaron
  14972. zdotaccent
  14973. Zdotaccent
  14974. zacute
  14975. Zacute
  14976. Ydieresis
  14977. ycircumflex
  14978. Ycircumflex
  14979. wcircumflex
  14980. Wcircumflex
  14981. uogonek
  14982. Uogonek
  14983. uhungarumlaut
  14984. Uhungarumlaut
  14985. uring
  14986. Uring
  14987. ubreve
  14988. Ubreve
  14989. umacron
  14990. Umacron
  14991. utilde
  14992. Utilde
  14993. tcaron
  14994. Tcaron
  14995. tcommaaccent
  14996. Tcommaaccent
  14997. scaron
  14998. Scaron
  14999. scedilla
  15000. Scedilla
  15001. scircumflex
  15002. Scircumflex
  15003. sacute
  15004. Sacute
  15005. rcaron
  15006. Rcaron
  15007. rcommaaccent
  15008. Rcommaaccent
  15009. racute
  15010. Racute
  15011. ohungarumlaut
  15012. Ohungarumlaut
  15013. obreve
  15014. Obreve
  15015. omacron
  15016. Omacron
  15017. napostrophe
  15018. ncaron
  15019. Ncaron
  15020. ncommaaccent
  15021. Ncommaaccent
  15022. nacute
  15023. Nacute
  15024. lslash
  15025. Lslash
  15026. lcaron
  15027. Lcaron
  15028. lcommaaccent
  15029. Lcommaaccent
  15030. lacute
  15031. Lacute
  15032. kgreenlandic
  15033. kcommaaccent
  15034. Kcommaaccent
  15035. jcircumflex
  15036. Jcircumflex
  15037. dotlessi
  15038. Idotaccent
  15039. iogonek
  15040. Iogonek
  15041. ibreve
  15042. Ibreve
  15043. imacron
  15044. Imacron
  15045. itilde
  15046. Itilde
  15047. hcircumflex
  15048. Hcircumflex
  15049. gcommaaccent
  15050. Gcommaaccent
  15051. gdotaccent
  15052. Gdotaccent
  15053. gbreve
  15054. Gbreve
  15055. gcircumflex
  15056. Gcircumflex
  15057. ecaron
  15058. Ecaron
  15059. eogonek
  15060. Eogonek
  15061. edotaccent
  15062. Edotaccent
  15063. ebreve
  15064. Ebreve
  15065. emacron
  15066. Emacron
  15067. dcroat
  15068. Dcroat
  15069. dcaron
  15070. Dcaron
  15071. ccaron
  15072. Ccaron
  15073. cdotaccent
  15074. Cdotaccent
  15075. ccircumflex
  15076. Ccircumflex
  15077. cacute
  15078. Cacute
  15079. aogonek
  15080. Aogonek
  15081. abreve
  15082. Abreve
  15083. amacron
  15084. Amacron
  15085. ydieresis
  15086. thorn
  15087. yacute
  15088. udieresis
  15089. ucircumflex
  15090. uacute
  15091. ugrave
  15092. oslash
  15093. divide
  15094. odieresis
  15095. otilde
  15096. ocircumflex
  15097. oacute
  15098. ograve
  15099. ntilde
  15100. idieresis
  15101. icircumflex
  15102. iacute
  15103. igrave
  15104. edieresis
  15105. ecircumflex
  15106. eacute
  15107. egrave
  15108. ccedilla
  15109. aring
  15110. adieresis
  15111. atilde
  15112. acircumflex
  15113. aacute
  15114. agrave
  15115. germandbls
  15116. Thorn
  15117. Yacute
  15118. Udieresis
  15119. Ucircumflex
  15120. Uacute
  15121. Ugrave
  15122. Oslash
  15123. multiply
  15124. Odieresis
  15125. Otilde
  15126. Ocircumflex
  15127. Oacute
  15128. Ograve
  15129. Ntilde
  15130. Idieresis
  15131. Icircumflex
  15132. Iacute
  15133. Igrave
  15134. Edieresis
  15135. Ecircumflex
  15136. Eacute
  15137. Egrave
  15138. Ccedilla
  15139. Aring
  15140. Adieresis
  15141. Atilde
  15142. Acircumflex
  15143. Aacute
  15144. Agrave
  15145. questiondown
  15146. threequarters
  15147. onehalf
  15148. onequarter
  15149. guillemotright
  15150. ordmasculine
  15151. onesuperior
  15152. cedilla
  15153. periodcentered
  15154. paragraph
  15155. acute
  15156. threesuperior
  15157. twosuperior
  15158. plusminus
  15159. degree
  15160. macron
  15161. registered
  15162. logicalnot
  15163. guillemotleft
  15164. ordfeminine
  15165. copyright
  15166. dieresis
  15167. section
  15168. brokenbar
  15169. currency
  15170. sterling
  15171. exclamdown
  15172. asciitilde
  15173. braceright
  15174. braceleft
  15175. grave
  15176. underscore
  15177. asciicircum
  15178. bracketright
  15179. backslash
  15180. bracketleft
  15181. question
  15182. greater
  15183. equal
  15184. semicolon
  15185. colon
  15186. eight
  15187. seven
  15188. three
  15189. slash
  15190. period
  15191. hyphen
  15192. comma
  15193. asterisk
  15194. parenright
  15195. parenleft
  15196. quotesingle
  15197. ampersand
  15198. percent
  15199. dollar
  15200. numbersign
  15201. quotedbl
  15202. exclam
  15203. space
  15204. .notdef
  15205. /Differences [
  15206. /Encoding 
  15207. /Encoding <<
  15208. /Type /Encoding
  15209. /BaseEncoding 
  15210. dSizStandard
  15211. Italic
  15212. Regular
  15213. StartCharMetrics
  15214. STDHV
  15215. STDHW
  15216. Descender
  15217. Ascender
  15218. CapHeight
  15219. EncodingScheme
  15220. FontBBox
  15221. CharacterSet
  15222. ItalicAngle
  15223. IsFixedPitch
  15224. Weight
  15225. FontName
  15226. StartFontMetrics
  15227. cleartomark
  15228. eexec
  15229. ZapfDingbats
  15230. Symbol
  15231. Times-BoldItalic
  15232. Times-Italic
  15233. Times-Bold
  15234. Times-Roman
  15235. Helvetica-BoldOblique
  15236. Helvetica-Oblique
  15237. Helvetica-Bold
  15238. Helvetica
  15239. Courier-BoldOblique
  15240. Courier-Oblique
  15241. Courier-Bold
  15242. Courier
  15243. Length3
  15244. Length2
  15245. Length1
  15246. FontFile
  15247. CharSet
  15248. XHeight
  15249. StemV
  15250. Flags
  15251. Descent
  15252. Ascent
  15253. FontDescriptor
  15254. Widths
  15255. /LastChar 
  15256. /FirstChar 
  15257. MissingWidth
  15258. Subtype
  15259. Type1
  15260. BaseFont
  15261. FontFile2
  15262. LastChar
  15263. FirstChar
  15264. TrueType
  15265. Supplement
  15266. Ordering
  15267. Registry
  15268. CIDSystemInfo
  15269. CIDFontType0
  15270. %%EOF
  15271. %%EndResource
  15272. CMapName currentdict /CMap defineresource pop
  15273. endcmap
  15274. endcidrange
  15275. endcidrange
  15276.  begincidrange
  15277. endnotdefrange
  15278.  beginnotdefrange
  15279. endcodespacerange
  15280.  begincodespacerange
  15281. /WMode 
  15282. ] def
  15283. /XUID [
  15284. /UIDOffset 
  15285. /CMapType 1 def
  15286. /CMapVersion 1.0 def
  15287. /CMapName /
  15288. end def
  15289.   /Supplement 
  15290.   /Ordering (
  15291. ) def
  15292.   /Registry (
  15293. /CIDSystemInfo 3 dict dup begin
  15294. begincmap
  15295. 12 dict begin
  15296. /CIDInit /ProcSet findresource begin
  15297. %%EndComments
  15298. %%Version: 1.0
  15299. %%Title: (
  15300. %%BeginResource: CMap (
  15301. %%IncludeResource: ProcSet (CIDInit)
  15302. %%DocumentNeededResources: ProcSet (CIDInit)
  15303. %!PS-Adobe-3.0 Resource-CMap
  15304. WMode
  15305. CMapName
  15306. CIDToGIDMap
  15307. CIDFontType2
  15308. DescendantFonts
  15309. Encoding
  15310. Type0
  15311. %PDF-1.6
  15312. %PDF-1.5
  15313. %PDF-1.4
  15314. %PDF-1.3
  15315. %PDF-1.2
  15316. 2.0.8
  15317. Encrypt
  15318. HPDFAA
  15319. Outlines
  15320. Haru Free PDF Library 
  15321. Keywords
  15322. Subject
  15323. Title
  15324. Producer
  15325. Creator
  15326. Author
  15327. ModDate
  15328. CreationDate
  15329. UseAttachments
  15330. UseOC
  15331. FullScreen
  15332. UseThumbs
  15333. UseOutlines
  15334. UseNone
  15335. TwoColumnRight
  15336. TwoColumnLeft
  15337. OneColumn
  15338. SinglePage
  15339. Pages
  15340. Catalog
  15341. PageLayout
  15342. PageMode
  15343. OpenAction
  15344. PageLabels
  15345. CenterWindow
  15346. FitWindow
  15347. HideWindowUI
  15348. HideMenubar
  15349. HideToolbar
  15350. ViewerPreferences
  15351. Rotate
  15352. CropBox
  15353. MediaBox
  15354. Resources
  15355. Parent
  15356. ImageI
  15357. ImageC
  15358. ImageB
  15359. ProcSet
  15360. XObject
  15361. ExtGState
  15362. Annots
  15363. Count
  15364. Contents
  15365. @UUUUUU
  15366. Glitter
  15367. Dissolve
  15368. Blinds
  15369. Split
  15370. Trans
  15371. ?FitBV
  15372. FitBH
  15373. ?Insert
  15374. Paragraph
  15375. NewParagraph
  15376. Comment
  15377. Popup
  15378. FileAttachment
  15379. Underline
  15380. Highlight
  15381. StrikeOut
  15382. Circle
  15383. Square
  15384. Stamp
  15385. FreeText
  15386. Sound
  15387. Annot
  15388. Border
  15389. Action
  15390. First
  15391. _OPENED
  15392. Outline
  15393. DeviceGray
  15394. DeviceRGB
  15395. DeviceCMYK
  15396. BitsPerComponent
  15397. ColorSpace
  15398. Decode
  15399. Width
  15400. Height
  15401. Image
  15402. AImageMask
  15403. Japan1
  15404. Adobe
  15405. EUC-V
  15406. EUC-H
  15407. 90msp-RKSJ-H
  15408. 90ms-RKSJ-V
  15409. 90ms-RKSJ-H
  15410. Korea1
  15411. KSC-EUC-V
  15412. KSC-EUC-H
  15413. KSCms-UHC-HW-V
  15414. KSCms-UHC-HW-H
  15415. KSCms-UHC-H
  15416. GB-EUC-V
  15417. GB-EUC-H
  15418. GBK-EUC-V
  15419. GBK-EUC-H
  15420. ETen-B5-V
  15421. ETen-B5-H
  15422. MS-PMincyo,BoldItalic
  15423. MS-PMincyo,Italic
  15424. MS-PMincyo,Bold
  15425. MS-PMincyo
  15426. MS-Mincyo,BoldItalic
  15427. MS-Mincyo,Italic
  15428. MS-Mincyo,Bold
  15429. MS-Mincyo
  15430. MS-PGothic,BoldItalic
  15431. MS-PGothic,Italic
  15432. MS-PGothic,Bold
  15433. MS-PGothic
  15434. MS-Gothic,BoldItalic
  15435. MS-Gothic,Italic
  15436. MS-Gothic,Bold
  15437. MS-Gothic
  15438. Batang,BoldItalic
  15439. Batang,Italic
  15440. Batang,Bold
  15441. Batang
  15442. BatangChe,BoldItalic
  15443. BatangChe,Italic
  15444. BatangChe,Bold
  15445. BatangChe
  15446. Dotum,BoldItalic
  15447. Dotum,Italic
  15448. Dotum,Bold
  15449. Dotum
  15450. DotumChe,BoldItalic
  15451. DotumChe,Italic
  15452. DotumChe,Bold
  15453. DotumChe
  15454. SimHei,BoldItalic
  15455. SimHei,Italic
  15456. SimHei,Bold
  15457. SimHei
  15458. SimSun,BoldItalic
  15459. SimSun,Italic
  15460. SimSun,Bold
  15461. SimSun
  15462. MingLiU,BoldItalic
  15463. MingLiU,Italic
  15464. MingLiU,Bold
  15465. MingLiU
  15466. Indexed
  15467. 1.2.10
  15468. _FILE_NAME
  15469. Exclusion
  15470. Difference
  15471. SoftLight
  15472. HardLight
  15473. ColorBurn
  15474. ColorDodge
  15475. Lighten
  15476. Darken
  15477. Overlay
  15478. Screen
  15479. Multiply
  15480. Normal
  15481. 1.2.10
  15482. 0123456789ABCDEF
  15483.  0@P`p
  15484. !1AQaq
  15485. "2BRbr
  15486. #3CScs
  15487. $4DTdt
  15488. %5EUeu
  15489. &6FVfv
  15490. '7GWgw
  15491. (8HXhx
  15492. )9IYiy
  15493. *:JZjz
  15494. +;K[k{
  15495. ,<L\l|
  15496. -=M]m}
  15497. .>N^n~
  15498. /?O_o
  15499. > deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly 
  15500. 1.2.3
  15501. Qkkbal
  15502. wn>Jj
  15503. Z* ,    
  15504.     #jT$
  15505. [-&LMb#{'
  15506. w+OQvr
  15507. R1h58
  15508. )\ZEo^m/
  15509. H*0"ZOW
  15510. l!;b    F
  15511. mj>zjZ
  15512. l6qnk
  15513. IiGM>nw
  15514. 1A26b
  15515. ewh/?y
  15516. 1wsHp
  15517. #bML"
  15518. vQO+t
  15519. ^oEZ_
  15520. OZw3(?
  15521. V_:X1:
  15522. NJ2"v
  15523. O*9y]
  15524.                                 
  15525.  inflate 1.2.3 Copyright 1995-2005 Mark Adler 
  15526. e+000
  15527. GAIsProcessorFeaturePresent
  15528. KERNEL32
  15529. FlsFree
  15530. FlsSetValue
  15531. FlsGetValue
  15532. FlsAlloc
  15533. kernel32.dll
  15534. CorExitProcess
  15535. mscoree.dll
  15536. runtime error 
  15537. TLOSS error
  15538. SING error
  15539. DOMAIN error
  15540. R6029
  15541. - This application cannot run using the active version of the Microsoft .NET Runtime
  15542. Please contact the application's support team for more information.
  15543. R6028
  15544. - unable to initialize heap
  15545. R6027
  15546. - not enough space for lowio initialization
  15547. R6026
  15548. - not enough space for stdio initialization
  15549. R6025
  15550. - pure virtual function call
  15551. R6024
  15552. - not enough space for _onexit/atexit table
  15553. R6019
  15554. - unable to open console device
  15555. R6018
  15556. - unexpected heap error
  15557. R6017
  15558. - unexpected multithread lock error
  15559. R6016
  15560. - not enough space for thread data
  15561. This application has requested the Runtime to terminate it in an unusual way.
  15562. Please contact the application's support team for more information.
  15563. R6009
  15564. - not enough space for environment
  15565. R6008
  15566. - not enough space for arguments
  15567. R6002
  15568. - floating point not loaded
  15569. Microsoft Visual C++ Runtime Library
  15570. Runtime Error!
  15571. Program: 
  15572. <program name unknown>
  15573.  (8PX
  15574. 700WP
  15575. `h````
  15576. ppxxxx
  15577. (null)
  15578. AuthenticAMD
  15579. ?X&eB
  15580. ?h6_~
  15581. ?7Tf(
  15582. =\uI=
  15583. ]vQ<)8
  15584. |)P!?Ua0
  15585. Eb2]A=
  15586. hb?O2
  15587. 2ieO=
  15588. |W8A=
  15589. np?z 
  15590. u?^p?o4
  15591. Pex?0
  15592. y1~?|"
  15593. V%A+=
  15594. ?|I7Z#
  15595. >,'1D=
  15596. ?g)([|X>=
  15597. ?IT$7
  15598. :h"?bC
  15599. @H#?43
  15600. Ax#?uN}*
  15601. r7Yr7=
  15602. .K="=
  15603. F0$?3=1
  15604. H`$?h|
  15605. &?~YK|
  15606. sU0&?W
  15607. :]=O>
  15608. CqTR;
  15609. AiFC.
  15610. <{Q}<
  15611. hI{L[
  15612. <8bunz8
  15613. ?(FN\
  15614. K<<H!
  15615. m1WY$
  15616. ?#%X.y
  15617. F||<##
  15618. T~OXu
  15619. <@En[vP
  15620. InitializeCriticalSectionAndSpinCount
  15621.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  15622. GetProcessWindowStation
  15623. GetUserObjectInformationA
  15624. GetLastActivePopup
  15625. GetActiveWindow
  15626. MessageBoxA
  15627. user32.dll
  15628. floor
  15629. exp10
  15630. log10
  15631. 1#QNAN
  15632. 1#INF
  15633. 1#IND
  15634. 1#SNAN
  15635. Program: 
  15636. A buffer overrun has been detected which has corrupted the program's
  15637. internal state.  The program cannot safely continue execution and must
  15638. now be terminated.
  15639. Buffer overrun detected!
  15640. A security error of unknown cause has been detected which has
  15641. corrupted the program's internal state.  The program cannot safely
  15642. continue execution and must now be terminated.
  15643. Unknown security failure detected!
  15644. HH:mm:ss
  15645. dddd, MMMM dd, yyyy
  15646. MM/dd/yy
  15647. December
  15648. November
  15649. October
  15650. September
  15651. August
  15652. April
  15653. March
  15654. February
  15655. January
  15656. Saturday
  15657. Friday
  15658. Thursday
  15659. Wednesday
  15660. Tuesday
  15661. Monday
  15662. Sunday
  15663. _nextafter
  15664. _logb
  15665. frexp
  15666. _hypot
  15667. _cabs
  15668. ldexp
  15669. atan2
  15670. SunMonTueWedThuFriSat
  15671. JanFebMarAprMayJunJulAugSepOctNovDec
  15672. HeapAlloc
  15673. HeapFree
  15674. GetSystemTimeAsFileTime
  15675. GetCurrentThreadId
  15676. GetCommandLineA
  15677. GetVersionExA
  15678. EnterCriticalSection
  15679. LeaveCriticalSection
  15680. GetProcAddress
  15681. GetModuleHandleA
  15682. DeleteCriticalSection
  15683. HeapDestroy
  15684. HeapCreate
  15685. VirtualFree
  15686. VirtualAlloc
  15687. HeapReAlloc
  15688. GetLastError
  15689. ReadFile
  15690. SetFilePointer
  15691. SetHandleCount
  15692. GetStdHandle
  15693. GetFileType
  15694. GetStartupInfoA
  15695. WriteFile
  15696. CloseHandle
  15697. TlsAlloc
  15698. SetLastError
  15699. TlsFree
  15700. TlsSetValue
  15701. TlsGetValue
  15702. ExitProcess
  15703. TerminateProcess
  15704. GetCurrentProcess
  15705. GetModuleFileNameA
  15706. FreeEnvironmentStringsA
  15707. GetEnvironmentStrings
  15708. FreeEnvironmentStringsW
  15709. WideCharToMultiByte
  15710. GetEnvironmentStringsW
  15711. UnhandledExceptionFilter
  15712. RtlUnwind
  15713. InitializeCriticalSection
  15714. InterlockedExchange
  15715. VirtualQuery
  15716. SetStdHandle
  15717. FlushFileBuffers
  15718. GetACP
  15719. GetOEMCP
  15720. GetCPInfo
  15721. CreateFileA
  15722. LoadLibraryA
  15723. LCMapStringA
  15724. MultiByteToWideChar
  15725. LCMapStringW
  15726. QueryPerformanceCounter
  15727. GetTickCount
  15728. GetCurrentProcessId
  15729. GetLocaleInfoA
  15730. GetStringTypeA
  15731. GetStringTypeW
  15732. SetEndOfFile
  15733. HeapSize
  15734. RaiseException
  15735. VirtualProtect
  15736. GetSystemInfo
  15737. KERNEL32.dll
  15738. LIBHPDF.DLL
  15739. HPDF_AddPage
  15740. HPDF_AddPageLabel
  15741. HPDF_CreateExtGState
  15742. HPDF_CreateOutline
  15743. HPDF_Destination_SetFit
  15744. HPDF_Destination_SetFitB
  15745. HPDF_Destination_SetFitBH
  15746. HPDF_Destination_SetFitBV
  15747. HPDF_Destination_SetFitH
  15748. HPDF_Destination_SetFitR
  15749. HPDF_Destination_SetFitV
  15750. HPDF_Destination_SetXYZ
  15751. HPDF_Encoder_GetByteType
  15752. HPDF_Encoder_GetType
  15753. HPDF_Encoder_GetUnicode
  15754. HPDF_Encoder_GetWritingMode
  15755. HPDF_ExtGState_SetAlphaFill
  15756. HPDF_ExtGState_SetAlphaStroke
  15757. HPDF_ExtGState_SetBlendMode
  15758. HPDF_Font_GetAscent
  15759. HPDF_Font_GetBBox
  15760. HPDF_Font_GetCapHeight
  15761. HPDF_Font_GetDescent
  15762. HPDF_Font_GetEncodingName
  15763. HPDF_Font_GetFontName
  15764. HPDF_Font_GetUnicodeWidth
  15765. HPDF_Font_GetXHeight
  15766. HPDF_Font_MeasureText
  15767. HPDF_Font_TextWidth
  15768. HPDF_Free
  15769. HPDF_FreeDoc
  15770. HPDF_FreeDocAll
  15771. HPDF_GetCurrentEncoder
  15772. HPDF_GetCurrentPage
  15773. HPDF_GetEncoder
  15774. HPDF_GetError
  15775. HPDF_GetErrorDetail
  15776. HPDF_GetFont
  15777. HPDF_GetInfoAttr
  15778. HPDF_GetPageByIndex
  15779. HPDF_GetPageLayout
  15780. HPDF_GetPageMode
  15781. HPDF_GetStreamSize
  15782. HPDF_GetVersion
  15783. HPDF_GetViewerPreference
  15784. HPDF_HasDoc
  15785. HPDF_Image_GetBitsPerComponent
  15786. HPDF_Image_GetColorSpace
  15787. HPDF_Image_GetHeight
  15788. HPDF_Image_GetSize2
  15789. HPDF_Image_GetSize
  15790. HPDF_Image_GetWidth
  15791. HPDF_Image_SetColorMask
  15792. HPDF_Image_SetMaskImage
  15793. HPDF_InsertPage
  15794. HPDF_LinkAnnot_SetBorderStyle
  15795. HPDF_LinkAnnot_SetHighlightMode
  15796. HPDF_LoadJpegImageFromFile
  15797. HPDF_LoadPngImageFromFile2
  15798. HPDF_LoadPngImageFromFile
  15799. HPDF_LoadRawImageFromFile
  15800. HPDF_LoadRawImageFromMem
  15801. HPDF_LoadTTFontFromFile2
  15802. HPDF_LoadTTFontFromFile
  15803. HPDF_LoadType1FontFromFile
  15804. HPDF_New
  15805. HPDF_NewDoc
  15806. HPDF_NewEx
  15807. HPDF_Outline_SetDestination
  15808. HPDF_Outline_SetOpened
  15809. HPDF_Page_Arc
  15810. HPDF_Page_BeginText
  15811. HPDF_Page_Circle
  15812. HPDF_Page_Clip
  15813. HPDF_Page_ClosePath
  15814. HPDF_Page_ClosePathEofillStroke
  15815. HPDF_Page_ClosePathFillStroke
  15816. HPDF_Page_ClosePathStroke
  15817. HPDF_Page_Concat
  15818. HPDF_Page_CreateDestination
  15819. HPDF_Page_CreateLinkAnnot
  15820. HPDF_Page_CreateTextAnnot
  15821. HPDF_Page_CreateURILinkAnnot
  15822. HPDF_Page_CurveTo2
  15823. HPDF_Page_CurveTo3
  15824. HPDF_Page_CurveTo
  15825. HPDF_Page_DrawImage
  15826. HPDF_Page_Ellipse
  15827. HPDF_Page_EndPath
  15828. HPDF_Page_EndText
  15829. HPDF_Page_Eoclip
  15830. HPDF_Page_Eofill
  15831. HPDF_Page_EofillStroke
  15832. HPDF_Page_ExecuteXObject
  15833. HPDF_Page_Fill
  15834. HPDF_Page_FillStroke
  15835. HPDF_Page_GRestore
  15836. HPDF_Page_GSave
  15837. HPDF_Page_GetCMYKFill
  15838. HPDF_Page_GetCMYKStroke
  15839. HPDF_Page_GetCharSpace
  15840. HPDF_Page_GetCurrentFont
  15841. HPDF_Page_GetCurrentFontSize
  15842. HPDF_Page_GetCurrentPos2
  15843. HPDF_Page_GetCurrentPos
  15844. HPDF_Page_GetCurrentTextPos2
  15845. HPDF_Page_GetCurrentTextPos
  15846. HPDF_Page_GetDash
  15847. HPDF_Page_GetFillingColorSpace
  15848. HPDF_Page_GetFlat
  15849. HPDF_Page_GetGMode
  15850. HPDF_Page_GetGStateDepth
  15851. HPDF_Page_GetGrayFill
  15852. HPDF_Page_GetGrayStroke
  15853. HPDF_Page_GetHeight
  15854. HPDF_Page_GetHorizontalScalling
  15855. HPDF_Page_GetLineCap
  15856. HPDF_Page_GetLineJoin
  15857. HPDF_Page_GetLineWidth
  15858. HPDF_Page_GetMiterLimit
  15859. HPDF_Page_GetRGBFill
  15860. HPDF_Page_GetRGBStroke
  15861. HPDF_Page_GetStrokingColorSpace
  15862. HPDF_Page_GetTextLeading
  15863. HPDF_Page_GetTextMatrix
  15864. HPDF_Page_GetTextRaise
  15865. HPDF_Page_GetTextRenderingMode
  15866. HPDF_Page_GetTextRise
  15867. HPDF_Page_GetTransMatrix
  15868. HPDF_Page_GetWidth
  15869. HPDF_Page_GetWordSpace
  15870. HPDF_Page_LineTo
  15871. HPDF_Page_MeasureText
  15872. HPDF_Page_MoveTextPos2
  15873. HPDF_Page_MoveTextPos
  15874. HPDF_Page_MoveTo
  15875. HPDF_Page_MoveToNextLine
  15876. HPDF_Page_Rectangle
  15877. HPDF_Page_SetCMYKFill
  15878. HPDF_Page_SetCMYKStroke
  15879. HPDF_Page_SetCharSpace
  15880. HPDF_Page_SetDash
  15881. HPDF_Page_SetExtGState
  15882. HPDF_Page_SetFlat
  15883. HPDF_Page_SetFontAndSize
  15884. HPDF_Page_SetGrayFill
  15885. HPDF_Page_SetGrayStroke
  15886. HPDF_Page_SetHeight
  15887. HPDF_Page_SetHorizontalScalling
  15888. HPDF_Page_SetLineCap
  15889. HPDF_Page_SetLineJoin
  15890. HPDF_Page_SetLineWidth
  15891. HPDF_Page_SetMiterLimit
  15892. HPDF_Page_SetRGBFill
  15893. HPDF_Page_SetRGBStroke
  15894. HPDF_Page_SetRotate
  15895. HPDF_Page_SetSize
  15896. HPDF_Page_SetSlideShow
  15897. HPDF_Page_SetTextLeading
  15898. HPDF_Page_SetTextMatrix
  15899. HPDF_Page_SetTextRaise
  15900. HPDF_Page_SetTextRenderingMode
  15901. HPDF_Page_SetTextRise
  15902. HPDF_Page_SetWidth
  15903. HPDF_Page_SetWordSpace
  15904. HPDF_Page_ShowText
  15905. HPDF_Page_ShowTextNextLine
  15906. HPDF_Page_ShowTextNextLineEx
  15907. HPDF_Page_Stroke
  15908. HPDF_Page_TextOut
  15909. HPDF_Page_TextRect
  15910. HPDF_Page_TextWidth
  15911. HPDF_ReadFromStream
  15912. HPDF_ResetError
  15913. HPDF_ResetStream
  15914. HPDF_SaveToFile
  15915. HPDF_SaveToStream
  15916. HPDF_SetCompressionMode
  15917. HPDF_SetCurrentEncoder
  15918. HPDF_SetEncryptionMode
  15919. HPDF_SetErrorHandler
  15920. HPDF_SetInfoAttr
  15921. HPDF_SetInfoDateAttr
  15922. HPDF_SetOpenAction
  15923. HPDF_SetPageLayout
  15924. HPDF_SetPageMode
  15925. HPDF_SetPagesConfiguration
  15926. HPDF_SetPassword
  15927. HPDF_SetPermission
  15928. HPDF_SetViewerPreference
  15929. HPDF_TextAnnot_SetIcon
  15930. HPDF_TextAnnot_SetOpened
  15931. HPDF_UseCNSEncodings
  15932. HPDF_UseCNSFonts
  15933. HPDF_UseCNTEncodings
  15934. HPDF_UseCNTFonts
  15935. HPDF_UseJPEncodings
  15936. HPDF_UseJPFonts
  15937. HPDF_UseKREncodings
  15938. HPDF_UseKRFonts
  15939. DN*1DR(zD
  15940. CN*1D
  15941. Too many bytes for PNG signature.
  15942. Potential overflow in png_zalloc()
  15943. libpng error: %s
  15944. libpng error: %s, offset=%d
  15945. libpng error no. %s: %s
  15946. libpng warning: %s
  15947. libpng warning no. %s: %s
  15948. Unknown zlib error
  15949. zlib version error
  15950. zlib memory error
  15951. 1.2.3
  15952. Incompatible libpng version in application and library
  15953. Application  is  running with png.c from libpng-%.20s
  15954. Application was compiled with png.h from libpng-%.20s
  15955. Missing PLTE before IDAT
  15956. Missing IHDR before IDAT
  15957. PNG file corrupted by ASCII conversion
  15958. Not a PNG file
  15959. Ignoring extra png_read_update_info() call; row buffer not reallocated
  15960. Extra compressed data
  15961. Decompression error
  15962. Not enough image data
  15963. Invalid attempt to read row data
  15964. png_do_dither returned rowbytes=0
  15965. png_do_rgb_to_gray found nongray pixel
  15966. NULL row buffer for row %ld, pass %d
  15967. Call to NULL read function
  15968. Read Error
  15969. same structure.  Resetting write_data_fn to NULL.
  15970. It's an error to set both read_data_fn and write_data_fn in the 
  15971. Out of Memory!
  15972. Error decoding compressed text
  15973. PNG unsigned integer out of range.
  15974. CRC error
  15975. Unknown zTXt compression type %d
  15976. Not enough memory for text.
  15977. Incomplete compressed datastream in %s chunk
  15978. Data error in compressed datastream in %s chunk
  15979. Buffer error in compressed datastream in %s chunk
  15980. Not enough memory to decompress chunk
  15981. Not enough memory to decompress chunk..
  15982. Not enough memory to decompress chunk.
  15983. Invalid IHDR chunk
  15984. Out of place IHDR
  15985. Truncating incorrect info tRNS chunk length
  15986. Truncating incorrect tRNS chunk length
  15987. Invalid palette chunk
  15988. Ignoring PLTE chunk in grayscale PNG
  15989. Duplicate PLTE chunk
  15990. Invalid PLTE after IDAT
  15991. Missing IHDR before PLTE
  15992. Incorrect IEND chunk length
  15993. No image in file
  15994. gamma = (%d/100000)
  15995. Ignoring incorrect gAMA value when sRGB is also present
  15996. Ignoring gAMA chunk with gamma=0
  15997. Incorrect gAMA chunk length
  15998. Duplicate gAMA chunk
  15999. Out of place gAMA chunk
  16000. Invalid gAMA after IDAT
  16001. Missing IHDR before gAMA
  16002. Incorrect sBIT chunk length
  16003. Duplicate sBIT chunk
  16004. Out of place sBIT chunk
  16005. Invalid sBIT after IDAT
  16006. Missing IHDR before sBIT
  16007. Invalid cHRM white point
  16008. gx=%f, gy=%f, bx=%f, by=%f
  16009. wx=%f, wy=%f, rx=%f, ry=%f
  16010. Ignoring incorrect cHRM value when sRGB is also present
  16011. Invalid cHRM blue point
  16012. Invalid cHRM green point
  16013. Invalid cHRM red point
  16014. Incorrect cHRM chunk length
  16015. Duplicate cHRM chunk
  16016. Missing PLTE before cHRM
  16017. Invalid cHRM after IDAT
  16018. Missing IHDR before cHRM
  16019. incorrect gamma=(%d/100000)
  16020. Unknown sRGB intent
  16021. Incorrect sRGB chunk length
  16022. Duplicate sRGB chunk
  16023. Out of place sRGB chunk
  16024. Invalid sRGB after IDAT
  16025. Missing IHDR before sRGB
  16026. Profile size field missing from iCCP chunk
  16027. Ignoring truncated iCCP profile.
  16028. Ignoring nonzero compression type in iCCP chunk
  16029. Malformed iCCP chunk
  16030. Duplicate iCCP chunk
  16031. Out of place iCCP chunk
  16032. Invalid iCCP after IDAT
  16033. Missing IHDR before iCCP
  16034. Invalid sPLT after IDAT
  16035. sPLT chunk requires too much memory
  16036. sPLT chunk too long
  16037. sPLT chunk has bad length
  16038. malformed sPLT chunk
  16039. Missing IHDR before sPLT
  16040. Duplicate tRNS chunk
  16041. Invalid tRNS after IDAT
  16042. tRNS chunk not allowed with alpha channel
  16043. Zero length tRNS chunk
  16044. Missing PLTE before tRNS
  16045. Incorrect tRNS chunk length
  16046. Missing IHDR before tRNS
  16047. Duplicate bKGD chunk
  16048. Missing PLTE before bKGD
  16049. Invalid bKGD after IDAT
  16050. Incorrect bKGD chunk index value
  16051. Incorrect bKGD chunk length
  16052. Missing IHDR before bKGD
  16053. Duplicate hIST chunk
  16054. Missing PLTE before hIST
  16055. Invalid hIST after IDAT
  16056. Incorrect hIST chunk length
  16057. Missing IHDR before hIST
  16058. Duplicate pHYs chunk
  16059. Invalid pHYs after IDAT
  16060. Incorrect pHYs chunk length
  16061. Missing IHDR before pHYs
  16062. Duplicate oFFs chunk
  16063. Invalid oFFs after IDAT
  16064. Incorrect oFFs chunk length
  16065. Missing IHDR before oFFs
  16066. Duplicate pCAL chunk
  16067. Invalid pCAL after IDAT
  16068. No memory for pCAL params.
  16069. Unrecognized equation type for pCAL chunk
  16070. Invalid pCAL parameters for equation type
  16071. Invalid pCAL data
  16072. No memory for pCAL purpose.
  16073. Missing IHDR before pCAL
  16074. Duplicate sCAL chunk
  16075. Invalid sCAL after IDAT
  16076. Invalid sCAL data
  16077. malformed height string in sCAL chunk
  16078. malformed width string in sCAL chunk
  16079. Out of memory while processing sCAL chunk
  16080. Missing IHDR before sCAL
  16081. Duplicate tIME chunk
  16082. Incorrect tIME chunk length
  16083. Out of place tIME chunk
  16084. Insufficient memory to process text chunk.
  16085. Not enough memory to process text chunk.
  16086. No memory to process text chunk.
  16087. Missing IHDR before tEXt
  16088. Insufficient memory to store zTXt chunk.
  16089. Not enough memory to process zTXt chunk.
  16090. Unknown compression type in zTXt chunk
  16091. Zero length zTXt chunk
  16092. Out of memory processing zTXt chunk.
  16093. Missing IHDR before zTXt
  16094. unknown critical chunk
  16095. invalid chunk type
  16096. Ignoring bad adaptive filter type
  16097. Extra compression data
  16098. Extra compressed data.
  16099. Decompression Error
  16100. Row has too many bytes to allocate in memory.
  16101. Ignoring attempt to set negative chromaticity value
  16102. Ignoring attempt to set chromaticity value exceeding 21474.83
  16103. Setting gamma=0
  16104. Limiting gamma to 21474.83
  16105. Setting negative gamma to zero
  16106. Invalid palette size, hIST allocation skipped.
  16107. Insufficient memory for hIST chunk data.
  16108. Invalid filter method in IHDR
  16109. Unknown filter method in IHDR
  16110. MNG features are not allowed in a PNG datastream
  16111. Unknown compression method in IHDR
  16112. Unknown interlace method in IHDR
  16113. Invalid color type/bit depth combination in IHDR
  16114. Invalid color type in IHDR
  16115. Invalid bit depth in IHDR
  16116. Width is too large for libpng to process pixels
  16117. Invalid image size in IHDR
  16118. image size exceeds user limits in IHDR
  16119. Image width or height is zero in IHDR
  16120. Insufficient memory for pCAL parameter.
  16121. Insufficient memory for pCAL params.
  16122. Insufficient memory for pCAL units.
  16123. Insufficient memory for pCAL purpose.
  16124. Invalid palette length
  16125. Insufficient memory to process iCCP profile.
  16126. Insufficient memory to process iCCP chunk.
  16127. iTXt chunk not supported.
  16128. No memory for sPLT palettes.
  16129. Out of memory processing unknown chunk.
  16130. Out of memory while processing unknown chunk.
  16131. too many length or distance symbols
  16132. incorrect length check
  16133. incorrect data check
  16134. invalid distance too far back
  16135. invalid distance code
  16136. invalid literal/length code
  16137. invalid distances set
  16138. invalid literal/lengths set
  16139. invalid bit length repeat
  16140. invalid code lengths set
  16141. invalid stored block lengths
  16142. invalid block type
  16143. header crc mismatch
  16144. unknown header flags set
  16145. incorrect header check
  16146. invalid window size
  16147. unknown compression method
  16148. incompatible version
  16149. buffer error
  16150. insufficient memory
  16151. data error
  16152. stream error
  16153. file error
  16154. stream end
  16155. need dictionary
  16156. z?aUY
  16157. zc%C1
  16158. -64OS
  16159. 0u0|0
  16160. 1.252l2p2t2x2|2
  16161. 3(3,3034383<3@3D3H3L3P3T3X3\3`3d3$4
  16162. 3;3Q3
  16163. 406P6b6
  16164. 7*8~8
  16165. 9A:R:
  16166. 566A6H6S6Z6e6l6w6
  16167. 7 7*7
  16168. 1*1C1P1d1}1
  16169. 2i9s9
  16170. >)?U?
  16171. :5:p:
  16172. ;$<L<t<
  16173. ,0w0E3
  16174. =1=F=`=x=
  16175. >">8>J>
  16176. 151V1l1
  16177. 3#3M3T3
  16178. 5I5[5n5
  16179. 5 686E6T6
  16180. 8U9w9
  16181. :a;h;o;
  16182. <-<@<b<
  16183. =*=;=h=
  16184. ?+?@?W?l?
  16185. 0I0m0
  16186. 222n2~2
  16187. 849f9
  16188. :2:\:
  16189. ;&;8;O;v;
  16190. <*<T<z<
  16191. < =z=
  16192. 061y1
  16193. 222E2
  16194. 3'3V3M4M5
  16195. 606B6@7i7p7
  16196. 3V4{4
  16197. =G>8?<?@?
  16198. 040?0
  16199. 1-1C1i1
  16200. 1.2m2
  16201. 343J3j3
  16202. 4 4>4
  16203. 44585<5@5D5
  16204. ===h=
  16205. >(?a?
  16206. 3@4E4
  16207. 556u6
  16208. 1&272O2
  16209. 2D3R3j3z3
  16210. 4/4H4
  16211. 8_9s9
  16212. <b>B?
  16213. 4,5O5U5
  16214. 7%7\7
  16215. 8,9O9U9
  16216. 9O:c:
  16217. ;#;X;
  16218. <k=M>
  16219. 0S1m1
  16220. 1n2<3
  16221. 4:5R5j5
  16222. 727J7b7
  16223. 9*9B9
  16224. ;2;J;b;
  16225. =.>H>
  16226. 2'2v2
  16227. 2N3g3
  16228. 9:9S9
  16229. ;";-;2;?;D;[;`;k;p;};
  16230. <4<9<D<I<`<e<p<u<
  16231. =-=@=D=H=L=P=T=X=\=`=d=h=l=p=t=x=|=
  16232. >9>&?
  16233. 0*0B0!1O2
  16234. 565R5i5w5
  16235. :4:r:.;
  16236. 0:1o1
  16237. 1*2>3R3Y3`3e3
  16238. 3C4f4s4
  16239. 4    5#5J5
  16240. 5=6e6
  16241. 7>7a7t7y7
  16242. 818>8C8
  16243. <g<l<~<
  16244. >0>C>W>/?4???D?p?
  16245. 0(0?0V0
  16246. 0)161
  16247. 3Z3{3
  16248. 8%858
  16249. 9*949K9[9
  16250. ;+;;;
  16251. <,<7<A<X<h<
  16252. =6=;=W=\=N>y>
  16253. 1'2?2J2T2k2
  16254. 2%3,3T3l3w3
  16255. 41464R4W4s4x4
  16256. 898?8g8
  16257. 9;9e9l9
  16258. 9L:Q:m:r:
  16259. =(>H?
  16260. 1o2t2
  16261. 3(3-3M3R3r3w3
  16262. 4+404L4Q4m4r4
  16263. 5(6H7h8L9Q9q9v9
  16264. :*:/:O:T:t:y:
  16265. ;);.;J;O;k;p;
  16266. >6>;>[>`>
  16267. <0A0]0b0~0
  16268. 3e4o4u4
  16269. 6&6A6
  16270. ;&;7;
  16271. 5*5/5?5D5
  16272. 5    797J7e7
  16273. 8 8p8t8x8|8
  16274. :E:[:
  16275. ;-;W;
  16276. ;)<S<}<
  16277. =6=Q=e=
  16278. =#>B>o>
  16279. 1X2\2`2d2h2l2p2
  16280. : ;(;i;x;~;
  16281. <C<P<V<z<
  16282. %0H0k0
  16283. 5]5j5p5
  16284. 6)6I6V6\6
  16285. ;,<8<M<
  16286. 5X6\6`6d6h6l6p6
  16287. 8B8a8
  16288. :$:J:f:R;
  16289. >'>3>;>I>
  16290. ?T?Y?
  16291. 0I1}1
  16292. 4B4w4
  16293. 4/5U5
  16294. 9:9m9
  16295. <><z<
  16296. 2F2e2v2
  16297. 3Y3|3
  16298. 4L5p5
  16299. 4W4^4
  16300. 41575<7
  16301. <$<9<N<c<x<
  16302. = =5=J=_=
  16303. >#>/>>>J>Y>e>t>
  16304. >I?b?{?
  16305. +030;0C0K0S0[0c0
  16306. 181D1P1a1k1{1
  16307. 3+3I3_3
  16308. 4*4`4v4
  16309. =$=.=B=N=j=q=
  16310. >,>6>J>V>r>|>
  16311. ?&?/?R?
  16312. 0'0]1F2y2
  16313. 9);e;
  16314. ;R>i>
  16315. 2y3W5
  16316. 5_7h7l7p7t7x7|7
  16317. <a>o>
  16318. 3;4I4
  16319. 1$191
  16320. 2"2f2y2
  16321. :0:8:A:S:a:m:
  16322. :6;<;M;~;
  16323. ;"<`<o<
  16324. ?"?0?>?E?T?]?n?
  16325. 0$0G0
  16326. 2'242
  16327. 3N4k4
  16328. 4k5w5
  16329. 6C7A8J8e8z8
  16330. 979I9O9X9g9
  16331. :(:1:S:Z:i:
  16332. ;&;3;:;@;H;N;Y;a;
  16333. >(>3>9>>>D>Q>n>t>
  16334. ?,?2?C?
  16335. 6!656
  16336. 9c:q:
  16337. :H;`;g;o;t;x;|;
  16338. <V<\<`<d<h<
  16339. =)=S=
  16340. 0(0I0
  16341. 141i1p1
  16342. 112_2m2
  16343. 3t3|3
  16344. 4"5K5
  16345. 777E7S7
  16346. 8'878=8E8f8l8w8
  16347. :.:4:@:E:M:S:Z:`:g:m:u:{:
  16348. ;W<t<
  16349. =/=?=Q=V=    >
  16350. >3>c>u>z>
  16351. ?$?*?;?@?K?P?j?
  16352. -030?0o0~0
  16353. 1(1z1P2i2
  16354. 2-343B3L3e3q3}3
  16355. 4T4d4p4w4
  16356. 4o5t5
  16357. 5D6}6
  16358. 607E7d7v7
  16359. <$=?=P=
  16360. 0^1x1
  16361. 3'3V3
  16362. 3E4N4T4
  16363. 5P5W5u5{5
  16364. 5,656@6{6
  16365. 8Y8e8}8
  16366. 9/:7:
  16367. :?;l;
  16368. 2H2e2y2
  16369. 6+7e7
  16370. 8%838f8y8
  16371. 9/:1;B>X>t>
  16372. >(?@?G?O?T?X?\?
  16373. 60<0@0D0H0
  16374. 0    131e1l1p1t1x1|1
  16375. 7&7+74797l7
  16376. 9+929C9J9X9l9
  16377. :>:k:{:
  16378. :(;D;
  16379. ;#<5<
  16380. =f=t=
  16381. =%>9>
  16382. ?G?p?
  16383. 0%040K0`0
  16384. 2!2;2G2Y2g2
  16385. 3#3C3I3j3p3
  16386. 4+494C4P4Z4g4p4y4
  16387. 5#5/5^5o5
  16388. 6Y7f7q7w7
  16389. 9%9-9D9R9W9a9
  16390. :$:):F:V:n:
  16391. <Z<m<y<
  16392. <%=s=
  16393. >%>4>=>F>s>
  16394. ?%?-?
  16395. 6    8$8u8
  16396. 9 9B9}9
  16397. 3!3%3)3-3135393=3A3
  16398. 4+4Z4~4
  16399. 5"6/6
  16400. 7Y7Y879
  16401. <*<4<<<l<v<
  16402. <!=-=W=    ?
  16403. ?%?0?A?L?m?x?
  16404. 2$2N2r2
  16405. 3$313v3
  16406. 4$5Y5
  16407. 6T6Z6j6
  16408. 6$7*7>9{:
  16409. :0;s;};
  16410. 0 1G1
  16411. 2>2C2d2
  16412. 2U3@5
  16413. 2$2,242<2D2L2T2\2d2l2t2|2
  16414. 3$3,343<3D3L3T3\3d3l3t3|3
  16415. 4$4,444<4D4L4T4\4d4l4t4|4
  16416. 5$5,545<5D5L5T5\5d5l5t5|5
  16417. 6$6,646<6D6L6T6\6d6l6t6|6
  16418. 7$7,747<7D7L7T7\7d7l7t7|7
  16419. 8$8,848<8D8L8T8\8d8l8t8|8
  16420. 9$9,949<9D9L9T9\9d9l9t9|9
  16421. :$:,:4:<:D:L:T:\:d:l:t:|:
  16422. ;$;,;4;<;D;L;T;\;d;l;t;|;
  16423. <$<,<4<<<D<L<T<\<d<l<t<|<
  16424. =$=,=4=<=D=L=T=\=d=l=t=|=
  16425. >$>,>4><>D>L>T>\>d>l>t>|>
  16426. ?$?,?4?<?D?L?T?\?d?l?t?|?
  16427. 0$0,040<0D0L0T0\0d0l0t0|0
  16428. 1$1,141<1D1L1T1\1d1l1t1|1
  16429. 2$2,242<2D2L2T2\2d2l2t2|2
  16430. 3$3,343<3D3L3T3\3d3l3t3|3
  16431. 4$4,444<4D4L4T4\4d4l4t4|4
  16432. 5$5,545<5D5L5T5\5d5l5t5|5
  16433. 6$6,646<6D6L6T6\6d6l6t6|6
  16434. 7$7,747<7D7L7T7\7d7l7t7|7
  16435. 8$8,848<8D8L8T8\8d8l8t8|8
  16436. 9$9,949<9D9L9T9\9d9l9t9|9
  16437. :$:,:4:<:D:L:T:\:d:l:t:|:
  16438. ;$;,;4;<;D;L;T;\;d;l;t;|;
  16439. <$<,<4<<<D<L<T<\<d<l<t<|<
  16440. =$=,=4=<=D=L=T=\=d=l=t=|=
  16441. >$>,>4><>D>L>T>\>d>l>t>|>
  16442. ?$?,?4?<?D?L?T?\?d?l?t?|?
  16443. 0$0,040<0D0L0T0\0d0l0t0|0
  16444. 1$1,141<1D1L1T1\1d1l1t1|1
  16445. 2$2,242<2D2L2T2\2d2l2t2|2
  16446. 4$4(40444<4@4H4L4T4X4`4d4l4p4x4|4
  16447. 5 5$5,5
  16448. 70747T7X7x7|7
  16449. 8,808P8T8t8x8
  16450. :P;`;p;
  16451. <8<H<T<X<d<h<
  16452. 1$1(1
  16453. ; ;,;8;
  16454. 4383@3D3L3P3
  16455. 5 5T6X6h6x6
  16456. 0(0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|0
  16457. 0@1D1H1L1T1X1\1`1d1h1l1p1x1|1
  16458. <$<<<@<D<
  16459. L0P0T0X0\0`0L2T2\2d2l2t2|2
  16460. 2J3N3R3V304@4D4L4
  16461. 7"7&7*7.72767:7>7B7F7J7N7R7V7Z7^7b7f7j7n7r7v7z7~7
  16462. 7(8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|8
  16463. 9<9D9L9T9\9d9l9t9|9
  16464. gggg`
  16465. vvvvp
  16466. gggg`
  16467. vvvvp
  16468. gggg`
  16469. vvvvp
  16470. gggg`
  16471. gggg`
  16472. wwwwwwwwwwwp
  16473. gggggggggg`p
  16474. vvvvvvvvvvpp
  16475. gggggggggg`p
  16476. vvvvvvvvvvpp
  16477. gggggggggg`p
  16478. vvvvvvvvvvpp
  16479. gggggggggg`p
  16480. vvvvvvvvvvpp
  16481. gggggggggg`p
  16482. vvvvvvvvvvpp
  16483. gggggggggg`p
  16484. vvvvvvvvvvpp
  16485. gggggggggg`p
  16486. vvvvvvvvvvpp
  16487. gggggggggg`p
  16488. vvvvvvvvvvpp
  16489. gggggggggg`p
  16490. wwwww
  16491. wwwww
  16492. wwwww
  16493. gggggggggg`p
  16494. vvvvvvvvvvpp
  16495. gggggggggg`p
  16496. PLATFORM
  16497. UNIQUEID
  16498. TIMESTAMP
  16499. CLASS
  16500. CLASSLOC
  16501. BASECLASS
  16502. OBJNAME
  16503. PARENT
  16504. PROPERTIES
  16505. PROTECTED
  16506. METHODS
  16507. OBJCODE
  16508. RESERVED1
  16509. RESERVED2
  16510. RESERVED3
  16511. RESERVED4
  16512. RESERVED5
  16513. RESERVED6
  16514. RESERVED7
  16515. RESERVED8
  16516.  COMMENT Class               
  16517.  WINDOWS _1WE14QM5X1087766862
  16518.  COMMENT RESERVED            
  16519. VERSION =   3.00
  16520. frxpreview.hf;
  16521. foxpro_reporting.hn<
  16522. frxpreview_loc.hv=}GO7
  16523. excellistener
  16524. frxpreview.h
  16525. Pixels
  16526. Class
  16527. fxlistener
  16528. excellistener
  16529. coutputalias
  16530. coutputdbf
  16531. loutputtocursor
  16532. closeondeactivate
  16533. nlastpercent
  16534. cworkbookfile
  16535. cworksheetname
  16536. applyexcelstyleprogram
  16537. cexcelstyle
  16538. waitfornextreport
  16539. ldefaultmode
  16540. cfrxalias
  16541. lobjtypemode
  16542. targetfilename
  16543. lopenviewer
  16544. ccodepage
  16545. ctempfrx
  16546. lalignleft
  16547. nexcelsaveformat
  16548. setstrictdate
  16549. *isnumber 
  16550. *xml_numberformat 
  16551. *xml_file_header 
  16552. *xml_style 
  16553. *xml_workbook_header 
  16554. *xml_worksheet_header 
  16555. *xml_row_header 
  16556. *xml_row_footer 
  16557. *xml_cell 
  16558. *xml_table_header 
  16559. *xml_workbook_footer 
  16560. *xml_worksheet_footer 
  16561. *xml_stylenumber 
  16562. *xml_type 
  16563. *xml_styles_header 
  16564. *xml_styles_footer 
  16565. *xml_table_footer 
  16566. *xml_encode 
  16567. *calcbandnumbers 
  16568. *xextractexcelcol 
  16569. *applyexcelstyle 
  16570. *islonghorizontalline 
  16571. *isshorthorizontalline 
  16572. *calcbasefilename 
  16573. *calcnextfilename 
  16574. *xml_names_header 
  16575. *xml_name 
  16576. *xml_names_footer 
  16577. *outputfromdata 
  16578. *updateproperties 
  16579. *topurexlsusingexcel 
  16580. *topurexlsusingoo 
  16581. *showtherm 
  16582. 0123456789.,$
  16583. 0123456789.,$
  16584. TCCONTENTS
  16585. LLISNUMBER
  16586. LCALIAS
  16587. LLALLDIGITS
  16588. LCTEST
  16589. LNTIMES
  16590. LNPOS
  16591. LNOLDPOS
  16592. LNLOOP
  16593. SETPOINT
  16594. SETSEPARATOR`
  16595. NUMBER
  16596. ###,###,##0
  16597. ########0
  16598. DATETIME
  16599. Short Date
  16600. String
  16601. TCCONTENTS
  16602. LCTYPE
  16603. XML_TYPE
  16604. LCPOINT
  16605. LCSEPAR
  16606. SETPOINT
  16607. SETSEPARATOR
  16608. LCFORMAT
  16609. ISO-8859-1
  16610. CP950
  16611. CP936
  16612. UTF-8
  16613. Windows-CC
  16614. <?xml version="1.0" encoding="<<lcEncoding>>"?>
  16615. <?mso-application progid="Excel.Sheet"?>
  16616. LCRETVAL
  16617. LCCODEPAGE
  16618. LCENCODING
  16619. THIS    
  16620. CCODEPAGE
  16621. LCONVERTTOUTF8
  16622.  ss:FontName="CC
  16623.  ss:Size="CCC
  16624. 000000
  16625.  ss:Color="#
  16626.  ss:Bold="1"
  16627.  ss:Italic="1"
  16628.  ss:Format="C
  16629. LEFTCC
  16630.  ss:Horizontal="Left"
  16631. CENTERCC
  16632.  ss:Horizontal="Center"
  16633. RIGHTCC
  16634.  ss:Horizontal="Right"
  16635. <Borders/>
  16636. <Borders>
  16637. "Bottom"
  16638. SINGLE
  16639. "Continuous"
  16640. <Border ss:Position=
  16641.  ss:LineStyle=
  16642.  ss:Weight=
  16643. </Borders>
  16644. FFFFFF
  16645. <Interior/>
  16646.  ss:Pattern=CCC
  16647. "Solid"
  16648.  ss:Color=CCC
  16649. "#FFFFFF"
  16650.  ss:PatternColor=
  16651. <Interior 
  16652.   <Style ss:ID="<<'s' + TRANSFORM(tnID,'@L 99')>>">
  16653.    <Alignment ss:Vertical="Bottom" <<lcHorizontalAlignment>>/>
  16654.    <<lcBorders>>
  16655.    <Font<<lcFont>>/>
  16656.    <<lcInterior>>
  16657.    <NumberFormat<<lcNumberFormat>>/>
  16658.    <Protection/>
  16659.   </Style>
  16660. LCFONT
  16661. PASTYLES
  16662. LCTEXTCOLOR
  16663. LCBOLD
  16664. LCITALIC
  16665. LCFAMILY
  16666. LCNUMBERFORMAT
  16667. LCHORIZONTALALIGNMENT    
  16668. LABORDERS
  16669. LABORDER
  16670. LCPOSITION
  16671. LCLINESTYLE
  16672. LCWEIGHT
  16673. LCBORDER    
  16674. LCBORDERS
  16675. LAINTERIOR
  16676. LCINTERIOR    
  16677. LCPATTERN
  16678. LCCOLOR
  16679. LCPATTERNCOLOR
  16680. LCRETVALW
  16681. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  16682.  xmlns:o="urn:schemas-microsoft-com:office:office"
  16683.  xmlns:x="urn:schemas-microsoft-com:office:excel"
  16684.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  16685.  xmlns:html="http://www.w3.org/TR/REC-html40">
  16686. LCRETVALi
  16687. <Worksheet ss:Name="<<tcWorksheetName>>">
  16688. TCWORKSHEETNAME
  16689. LCRETVAL
  16690. <Row ss:Index="<<ALLTRIM(TRANSFORM(ExcelRow))>>" ss:AutoFitHeight="1">
  16691. LCRETVAL
  16692. </Row>C
  16693. DATETIME
  16694. STRING
  16695. @L 9999_
  16696. @L 99_
  16697. @L 99_
  16698. T00:00:00.000
  16699. NUMBER
  16700. Currency
  16701. STRING
  16702. STRING
  16703.  ss:MergeAcross="CC
  16704. 99999
  16705. STRING
  16706. <Data ss:Type="C
  16707. </Data>
  16708.  ss:Formula="C
  16709. <NamedCell ss:Name="C
  16710. =Sheet1!R
  16711. <Cell  ss:Index="CC
  16712.  ss:StyleID="s
  16713. @L 99_
  16714. </Cell>
  16715. TCCONTENTS    
  16716. TCUNICODE
  16717. TNSTYLENUMBER
  16718. LCORIGCONTENTS
  16719. LCSTYLE
  16720. PASTYLES
  16721. LCRETVAL
  16722. SETSEPARATOR
  16723. SETPOINT
  16724. LLUSEUNICODE    
  16725. LLCHINESE    
  16726. CCODEPAGE
  16727. LCUNVALUE    
  16728. LNUNVALUE
  16729. LCNEWCONTENTS
  16730. LNCHARS
  16731. LCMERGEACROSS
  16732. NEXCELMERGEACROSS
  16733. LCDATA
  16734. LCINSERTFORMULA
  16735. LCNAMEDCELL
  16736. CEXCELINSERTFORMULA
  16737. CEXCELNAMEDCELL
  16738. CEXCELNAMEDRANGE
  16739. EXCELROW
  16740. EXCELCOLE
  16741. <Column ss:Index="
  16742.  ss:AutoFitWidth="
  16743.  ss:Width="
  16744. <Table ss:ExpandedColumnCount="<<ja[1]>>" ss:ExpandedRowCount="<<ja[2]>>" x:FullColumns="1"
  16745.  x:FullRows="1" ss:StyleID="s21"><<lcColumns>> 
  16746. TNROWS
  16747. TNCOLS
  16748. LCRETVAL
  16749. LCCOLUMNS
  16750. EXCELCOL
  16751. EXCELROW
  16752. COUTPUTALIAS    
  16753. PACOLDATA#
  16754. </Workbook>C
  16755.  </Worksheet>
  16756. LCRETVAL@
  16757. Number
  16758. DateTime
  16759. Short Date
  16760. TCCONTENTS
  16761. LCTYPE
  16762. LCNUMBERFORMAT
  16763. LCKEY
  16764. XML_TYPE
  16765. XML_NUMBERFORMAT
  16766. FONTFACE
  16767. FONTSIZE    
  16768. FONTSTYLE
  16769. CEXCELALIGNMENT
  16770. CEXCELBORDER
  16771. CEXCELINTERIOR
  16772. PASTYLES
  16773. String
  16774. DateTime
  16775. Number
  16776. DateTime
  16777. String
  16778. String
  16779. TCCONTENTS
  16780. LCTYPE    
  16781. LCSETDATE
  16782. SETDATEANSI
  16783. ISNUMBER 
  16784. <Styles>C
  16785. </Styles>C
  16786. </Table>C
  16787. TCCONTENTS
  16788. TCCHAR
  16789. LCVALUE
  16790. WINDOWS
  16791. WINDOWS
  16792. LABANDS
  16793. LNVPOS
  16794. LNSELECT
  16795. G_PIXELSIZE
  16796. G_BANDHEIGHT
  16797. G_BANDFUDGE
  16798. OBJCODE
  16799. HEIGHT
  16800. THIS    
  16801. CFRXALIAS
  16802. PLATFORM
  16803. OBJTYPE
  16804. LNVPOSBOTTOM
  16805. 0000000
  16806. TCCOMMENTT
  16807. &tcExcelStyle.(tnOption,This)
  16808. TCEXCELSTYLE
  16809. TNOPTION
  16810. COUTPUTALIAS;
  16811. TCEXPR9
  16812. TCEXPR
  16813. REP_C
  16814. @L 99_
  16815. REP_C
  16816. @L 99_
  16817. REP_??.
  16818. TCWORKBOOK
  16819. LCFILENAME
  16820. LADIR
  16821. TCEXTENSION
  16822. @L 99_
  16823. @L 99_
  16824. TCWORKBOOK
  16825. LCBASENAME
  16826. LCFILENAME
  16827. LADIR
  16828. <Names>C
  16829.   <NamedRange ss:Name="
  16830. " ss:RefersTo="
  16831. LCRETVAL
  16832. LAITEMS
  16833. PANAMES 
  16834. </Names>C
  16835. Invalid parameter. Report listener not available
  16836. Error
  16837. The helper FRX table is not available. Output can't be created
  16838. Error
  16839. Datasessionv
  16840. FRXCopy
  16841. FRXCopy
  16842. REPLACE ALL Contents WITH  strt(strt(strt(STRCONV(Contents, 6),'&','&'),'>','>' ),'<','<')
  16843. TOLISTENER
  16844. TCOUTPUTDBF
  16845. THIS    
  16846. SHOWTHERM    
  16847. CFRXALIAS
  16848. LNSELECT
  16849. LNORIGDATASESSION
  16850. LISTENERDATASESSION
  16851. LDEFAULTMODE
  16852. FRXCOPY
  16853. COUTPUTDBF
  16854. COUTPUTALIAS
  16855. CALCBANDNUMBERS
  16856. NOREPEAT
  16857. OBJTYPE
  16858. OBJCODE
  16859. LCRENDERALIAS
  16860. LNPGFROM
  16861. LNPGTO    
  16862. _GOHELPER
  16863. _CLAUSENRANGEFROM
  16864. _CLAUSENRANGETO
  16865. FRXRECNO    
  16866. NFRXRECNO
  16867. NLEFT
  16868. WIDTH
  16869. NWIDTH
  16870. HEIGHT
  16871. NHEIGHT
  16872. UNCONTENTS
  16873. CONTENTS
  16874. NPAGENO
  16875. AFTERREPORT
  16876. LOEXCL
  16877. xls;xml
  16878. LOBJTYPEMODE
  16879. OFOXYPREVIEWER
  16880. COMMANDCLAUSES
  16881. LOPENVIEWER
  16882. PREVIEW
  16883. TOFILE
  16884. TARGETFILENAME    
  16885. CDESTFILE
  16886. LCDESTFILE
  16887. COUTPUTPATH
  16888. LCFILE
  16889. _REPORTLISTENER
  16890. CANCELREPORT    
  16891. QUIETMODE
  16892. LQUIETMODE
  16893. Spreadsheet file
  16894. excel.application
  16895. LOGICAL
  16896. excel.application
  16897. TCSOURCE
  16898. TCDESTINATION
  16899. LOEXCEL
  16900. LLRETURN
  16901. ALERTBEFOREOVERWRITING
  16902. DISPLAYALERTS    
  16903. WORKBOOKS
  16904. ACTIVEWORKBOOK
  16905. SAVEAS
  16906. NEXCELSAVEFORMAT
  16907. ACTIVEWINDOW
  16908. CLOSE
  16909. LOEXC
  16910. Spreadsheet file
  16911. TCSOURCE
  16912. TCDESTINATION
  16913. LLRETURN
  16914. PR_OOXML2XLS
  16915. PLEASEWAIT
  16916. TNVALUE
  16917. TCTEXT
  16918. TCTITLE    
  16919. _GOHELPER
  16920. LQUIETMODE
  16921. DOFOXYTHERM
  16922. _RUNSTATUSTEXT
  16923. GETLOC
  16924. lDefaultMode
  16925. DATASESSIONv
  16926. FRXDataSession
  16927. LDEFAULTMODE
  16928. FRXDATASESSION
  16929. RESETTODEFAULT
  16930. RESETDATASESSION
  16931. UPDATEPROPERTIESo!
  16932. 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
  16933. @L 999999_C
  16934. @L 999999_
  16935. @L 999999_C
  16936. @L 999999_
  16937. @L 999999_
  16938. _PAGENOC
  16939. Widths
  16940. Solid,CCCC
  16941. Horizontal,Left
  16942. Horizontal,Right
  16943. Horizontal,Center66
  16944. Horizontal,Left
  16945. <data> <datos>
  16946. </datos> </data>
  16947. PageTop
  16948. @L 999999_C
  16949. @L 999999_
  16950. @L 999999_C
  16951. @L 999999_
  16952. Lefts
  16953. @L 999999_
  16954. Sheet1
  16955. ADDITIVE
  16956. ADDITIVE
  16957. WINDOWS 
  16958. Lucida Console
  16959. RowCol
  16960. TEMP5
  16961. Error creating file: 
  16962. Error
  16963. Safetyv
  16964. SET SAFETY &lcOldSetSafe.
  16965. xlConv2xls
  16966. Report is too big to be exported to the Excel format.C
  16967. Please revise the created document because it will be incomplete!
  16968. Attention
  16969. XLTOOBIG
  16970. ATTENTION
  16971. LEFTSW
  16972. PAGETOPW
  16973. THIS    
  16974. SHOWTHERM
  16975. LDEFAULTMODE
  16976. SETFRXDATASESSION    
  16977. CFRXALIAS
  16978. NRECNO
  16979. NSECS
  16980. LCFRXALIAS    
  16981. NFRXRECNO
  16982. OBJTYPE
  16983. EXCELROW
  16984. EXCELCOL
  16985. NPAGENO
  16986. CEXPR
  16987. CUSER
  16988. ROWCOL    
  16989. PAGROWCOL
  16990. LREPEATHEADERS
  16991. LREPEATFOOTERS    
  16992. LNMINPAGE    
  16993. LNMAXPAGE
  16994. COUTPUTALIAS
  16995. LAPAGES
  16996. LHIDEPAGENO
  16997. EXPR    
  16998. CCONTENTS
  16999. PNROWHEIGHT
  17000. PNCOLWIDTH
  17001. NWIDTH
  17002. WIDTHS
  17003. FILLRED
  17004. PENRED
  17005. PENGREEN
  17006. PENBLUE    
  17007. FILLGREEN
  17008. FILLBLUE
  17009. CEXCELINTERIOR
  17010. LALIGNLEFT
  17011. CEXCELALIGNMENT
  17012. OFFSET
  17013. APPLYEXCELSTYLE
  17014. CEXCELSTYLE    
  17015. LCCOMMENT
  17016. COMMENT
  17017. NEXCELCOLREQUEST    
  17018. XMLRESULT
  17019. NEXCELSPECIALCOLREQUEST
  17020. EXCELSPECIALCOL
  17021. EXCELDELETE
  17022. NEXCELCOLWIDTH
  17023. EXCELCOLWIDTH
  17024. EXCELALIGNMENT
  17025. EXCELALIGN
  17026. NEXCELMERGEACROSS
  17027. EXCELMERGEACROSS
  17028. CEXCELBORDER
  17029. EXCELBORDER
  17030. EXCELINTERIOR
  17031. NEXCELUNDERLINEDCOLCOUNT
  17032. EXCELUNDERLINEDCOLCOUNT
  17033. CEXCELINSERTFORMULA
  17034. EXCELINSERTFORMULA
  17035. CEXCELNAMEDRANGE
  17036. EXCELNAMEDRANGE
  17037. CEXCELNAMEDCELL
  17038. EXCELNAMEDCELL
  17039. DISTINCT
  17040. PAGETOP
  17041. PAGTOP    
  17042. LNLASTTOP    
  17043. LNLASTROW
  17044. LNLASTPAGENO    
  17045. LLSKIPPED    
  17046. LNOLDPAGE    
  17047. LLNEWPAGE
  17048. LNLASTLEFT    
  17049. LNLASTCOL
  17050. LLASSIGNEDCOL
  17051. LNEXCELCOL
  17052. NLEFT
  17053. CPARSEORDER
  17054. LEFTS
  17055. LEFORD
  17056. LACOUNT
  17057. LNTHISLEFT
  17058. COUNT
  17059. PNMAXCOL    
  17060. PACOLDATA    
  17061. LNCOLDATA
  17062. CWORKBOOKFILE
  17063. LUWORKBOOK
  17064. CALCBASEFILENAME
  17065. LCWORKSHEETNAME
  17066. CWORKSHEETNAME
  17067. LCOPCIONES    
  17068. LLERASEOK
  17069. CALCNEXTFILENAME
  17070. PASTYLES
  17071. FONTFACE
  17072. FONTSIZE    
  17073. FONTSTYLE
  17074. PLATFORM
  17075. OBJCODE
  17076. LCXMLTABLE
  17077. LCCRLF
  17078. XML_TABLE_HEADER    
  17079. LILASTROW    
  17080. LILASTCOL    
  17081. LICURRROW    
  17082. LICURRCOL
  17083. LIREC
  17084. LCPREVCONTENTS
  17085. CONTENTS
  17086. LLINCOMPLETE
  17087. LNRECS
  17088. LN100
  17089. XML_ROW_FOOTER
  17090. XML_ROW_HEADER
  17091. LNSTYLENUMBER
  17092. XML_STYLENUMBER
  17093. XML_CELL
  17094. UNCONTENTS
  17095. XML_TABLE_FOOTER
  17096. LCXML
  17097. XML_FILE_HEADER
  17098. XML_WORKBOOK_HEADER
  17099. XML_STYLES_HEADER
  17100. XML_STYLE
  17101. XML_STYLES_FOOTER
  17102. PANAMES
  17103. XML_NAMES_HEADER
  17104. XML_NAME
  17105. XML_NAMES_FOOTER
  17106. XML_WORKSHEET_HEADER
  17107. SETSTRICTDATE
  17108. LCTEMPFILE
  17109. LNHANDLE
  17110. XML_WORKSHEET_FOOTER
  17111. XML_WORKBOOK_FOOTER
  17112. LLSAVED
  17113. LCONVERTTOUTF8
  17114. LCXMLWKS
  17115. LCOLDSETSAFE
  17116. TARGETFILENAME
  17117. LCONVERTTOXLS    
  17118. _GOHELPER
  17119. GETLOC
  17120. TOPUREXLSUSINGEXCEL
  17121. TOPUREXLSUSINGOO
  17122. LOBJTYPEMODE
  17123. OFOXYPREVIEWER
  17124. LSAVED
  17125. LOPENVIEWER    
  17126. SHELLEXEC
  17127. SETCURRENTDATASESSION
  17128. CTEMPFRX
  17129. GetDeviceCaps
  17130. WIN32API
  17131. GetDC
  17132. WIN32API
  17133. ReleaseDC
  17134. WIN32API
  17135. GetWindowDC
  17136. WIN32API
  17137. SetSeparatorC
  17138. Separatorv
  17139. SetPointC
  17140. Pointv
  17141. SetDateC
  17142. Datev
  17143. SetDateAnsiCC
  17144. Datev
  17145. GERMAN
  17146. lConvertToXLSa
  17147. lRepeatHeadersa
  17148. lRepeatFootersa
  17149. lHidePageNo-
  17150. lUseUnicode-
  17151. lConvertToUTF8-
  17152. GETDEVICECAPS
  17153. WIN32API
  17154. GETDC    
  17155. RELEASEDC
  17156. GETWINDOWDC
  17157. ADDPROPERTY<
  17158. CopyFRX
  17159. Datev
  17160. Strictdatev
  17161. LDEFAULTMODE
  17162. LOBJTYPEMODE
  17163. LOUTPUTTOCURSOR
  17164. COUTPUTDBF
  17165. COUTPUTALIAS
  17166. SETFRXDATASESSION
  17167. CTEMPFRX    
  17168. CFRXALIAS
  17169. CALCBANDNUMBERS
  17170. NOREPEAT
  17171. OBJTYPE
  17172. OBJCODE    
  17173. NFRXRECNO
  17174. NLEFT
  17175. NWIDTH
  17176. NHEIGHT
  17177. CONTENTS
  17178. UNCONTENTS
  17179. NPAGENO
  17180. SETCURRENTDATASESSION
  17181. SETDATE
  17182. SETSTRICTDATE
  17183. cContents = strt(strt(strt(lcTmpContent,'&','&'),'>','>' ),'<','<')
  17184. NFRXRECNO
  17185. NLEFT
  17186. NWIDTH
  17187. NHEIGHT
  17188. NOBJECTCONTINUATIONTYPE
  17189. CCONTENTSTOBERENDERED
  17190. GDIPLUSIMAGE
  17191. TWOPASSPROCESS
  17192. CURRENTPASS
  17193. LOUTPUTTOCURSOR    
  17194. CCONTENTS
  17195. LCTMPCONTENT
  17196. SETFRXDATASESSION
  17197. COUTPUTALIAS
  17198. CONTENTS
  17199. UNCONTENTS
  17200. NPAGENO
  17201. PAGENO
  17202. SETCURRENTDATASESSION
  17203. DRIVINGALIAS
  17204. MACDESKTOP
  17205. SCREEN
  17206. MACDESKTOP
  17207. SCREEN
  17208. CMESSAGE
  17209. LOPARENTFORM    
  17210. LCCAPTION
  17211. LCPARENTFORMNAME
  17212. THIS    
  17213. QUIETMODE    
  17214. ISRUNNING
  17215. COMMANDCLAUSES
  17216. NODIALOG
  17217. NLASTPERCENT
  17218. PERCENTDONE
  17219. THERMCAPTION    
  17220. THERMFORM
  17221. CREATETHERM
  17222. CLOSABLE
  17223. MOVABLE
  17224. THERM
  17225. VALUE
  17226. THERMLABEL
  17227. CAPTION
  17228. VISIBLE
  17229. GETPARENTWINDOWREF
  17230. DESKTOP
  17231. MACDESKTOP
  17232. SHOWWINDOW
  17233. ALWAYSONTOP
  17234. AUTOCENTER8
  17235. SETFRXDATASESSION
  17236. SETSEPARATOR
  17237. SETPOINT
  17238. isnumber,
  17239. xml_numberformat\
  17240. xml_file_header
  17241. xml_style
  17242. xml_workbook_header"
  17243. xml_worksheet_header
  17244. xml_row_header
  17245. xml_row_footer
  17246. xml_cell
  17247. xml_table_headerA
  17248. xml_workbook_footer
  17249. xml_worksheet_footer
  17250. xml_stylenumberc
  17251. xml_typeO 
  17252. xml_styles_headerI"
  17253. xml_styles_footerm"
  17254. xml_table_footer
  17255. xml_encode
  17256. calcbandnumbers3#
  17257. xextractexcelcol
  17258. applyexcelstyle    &
  17259. islonghorizontalline
  17260. isshorthorizontalline
  17261. calcbasefilename
  17262. calcnextfilename
  17263. xml_names_header
  17264. xml_name
  17265. xml_names_footer
  17266. outputfromdata
  17267. updateproperties
  17268. topurexlsusingexcel
  17269. topurexlsusingoo
  17270. showtherm
  17271. setfrxdatasession
  17272. LoadReport#:
  17273. AfterReportX:
  17274. BeforeReport(f
  17275. Render
  17276. Destroy
  17277. DoStatus
  17278. setfrxdatasessionenvironment
  17279. (}PROCEDURE isnumber
  17280. LPARAMETERS tcContents
  17281. LOCAL llIsNumber, lcAlias, llAllDigits
  17282. tcContents  = ALLTRIM(tcContents)
  17283. llAllDigits = LEN(CHRTRAN(tcContents, '0123456789.,$', "")) = 0
  17284. IF llAllDigits
  17285.     * Preliminary test
  17286.     * Check if the separator symbols have a distance of 3 chars
  17287.     LOCAL lcTest, lnTimes, lnPos, lnOldPos, lnLoop
  17288.     lcTest = tcContents
  17289.     IF OCCURS(This.SetPoint, lcTest) = 1
  17290.         lcTest = LEFT(lcTest, AT(This.SetPoint, lcTest) - 1)
  17291.     ENDIF
  17292.     lnTimes = OCCURS(This.SetSeparator, lcTest)
  17293.     lnOldPos = 0
  17294.     IF lnTimes > 0
  17295.         FOR lnLoop = 1 TO lnTimes
  17296.             lnPos = AT(This.SetSeparator, lcTest, lnLoop)
  17297.             IF lnLoop > 1
  17298.                 IF lnPos - lnOldPos <> 4
  17299.                     RETURN .F. && Not a number
  17300.                 ENDIF
  17301.             ENDIF
  17302.             lnOldPos = lnPos
  17303.         ENDFOR
  17304.         IF LEN(lcTest) - AT(This.SetSeparator, lcTest, lnTimes) <> 3
  17305.             RETURN .F. && Not a number
  17306.         ENDIF
  17307.     ENDIF
  17308. ENDIF
  17309. * 06/09/09 Generic method using value of FillChar in report file!
  17310. *!*        lcAlias = ALIAS()
  17311. *!*        llIsNumber = &lcAlias..FillChar = 'N'
  17312. DO CASE
  17313.     *!*            CASE &lcAlias..FillChar = 'N'
  17314.     *!*                llIsNumber = .T.
  17315.     *!*            CASE &lcAlias..FillChar = 'C'
  17316.     *!*                llIsNumber = .F.
  17317.     * 02/01/07 Case added by Andrus Moor to handle dd.mm.yyyy date format.
  17318.     * Not very satisfying...  need to devise something more explicit and general.
  17319.     *        CASE OCCURS('.', tcContents) > 1
  17320.     * CChalom - Check XML_Type method, a new checking was added there
  17321.     * 2010/08/08 Fix by Jaketon / CChalom, when SET("POINT") = ","
  17322.     *!*            CASE FillChar = "N"
  17323.     *!*                llIsNumber = .T.
  17324. CASE (" " $ tcContents) OR ("%" $ tcContents)
  17325.     llIsNumber = .F.
  17326. CASE llAllDigits AND LEN(CHRTRAN(tcContents, ".,$", "")) > 15 && Excel can't deal with numbers of more than 15 positions
  17327.     llIsNumber = .F.
  17328. CASE OCCURS(This.SetPoint, tcContents) > 0 AND ;
  17329.         OCCURS(This.SetSeparator, tcContents) > 0 AND ;
  17330.         (AT(This.SetPoint, tcContents) < AT(This.SetSeparator, tcContents))
  17331.     llIsNumber = .F.
  17332. CASE OCCURS(This.SetPoint, tcContents) > 1
  17333.     llIsNumber = .F.
  17334. CASE LEN(tcContents) = 0
  17335.     llIsNumber = .F.
  17336.     * 2011-02-23 Fix by Julio Laborin (Mexico)
  17337.     * CASE LEN(CHRTRAN(tcContents, '0123456789.,$', '')) = 0
  17338. CASE llAllDigits AND LEFT(tcContents, 2) = "0" + This.SetPoint
  17339.     llIsNumber = .T.
  17340. CASE LEFT(tcContents, 1) = "0" AND NOT EMPTY(SUBSTR(tcContents,2,1)) AND (SUBSTR(tcContents,2,1) <> This.SetPoint)
  17341.     llIsNumber = .F.
  17342. CASE llAllDigits AND SUBSTR(tcContents,1,1) <> "0"
  17343.     llIsNumber = .T.
  17344. CASE llAllDigits AND VAL(tcContents) = 0
  17345.     llIsNumber = .T.
  17346. OTHERWISE
  17347.     llIsNumber = (LEFT(tcContents,1) = '-' AND LEN(CHRTRAN(SUBSTR(tcContents,2),'0123456789.,$','')) = 0)
  17348. ENDCASE
  17349. RETURN llIsNumber
  17350. ENDPROC
  17351. PROCEDURE xml_numberformat
  17352. LPARAMETERS tcContents
  17353. LOCAL lcType
  17354. lcType = UPPER(This.Xml_Type(tcContents))
  17355. DO CASE
  17356.     CASE lcType = 'NUMBER'
  17357.         *    IF AT(',',tcContents) > 0
  17358.         *        lcFormat = '###,###,##0'
  17359.         *    ELSE
  17360.         *        lcFormat = '########0'
  17361.         *    ENDIF
  17362.         *    IF AT('.',tcContents) > 0
  17363.         *        lcFormat = lcFormat + '.' + REPLICATE('0',LEN(tcContents) - AT('.',tcContents))
  17364.         *    ENDIF
  17365.         *    2010/08/08 Fix by Jaketon / CChalom, when SET("POINT") = ","
  17366.         LOCAL lcPoint, lcSepar
  17367.         lcPoint = This.SetPoint
  17368.         lcSepar = This.SetSeparator
  17369.         IF AT(lcSepar, tcContents) > 0 
  17370.             lcFormat = '###,###,##0' 
  17371. *            lcFormat = '###' + lcSepar + '###' + lcSepar + '##0' 
  17372.         ELSE
  17373.             lcFormat = '########0' 
  17374.         ENDIF
  17375.         IF AT(lcPoint, tcContents) > 0
  17376. *            lcFormat = lcFormat + lcPoint + REPLICATE('0',LEN(tcContents) - AT(lcPoint, tcContents))
  17377.             lcFormat = lcFormat + "." + REPLICATE('0',LEN(tcContents) - AT(lcPoint, tcContents))
  17378.         ENDIF 
  17379.     CASE lcType = 'DATETIME'
  17380.         lcFormat = 'Short Date'
  17381.     OTHERWISE
  17382.         lcFormat = 'String'
  17383. ENDCASE
  17384. RETURN lcFormat
  17385. ENDPROC
  17386. PROCEDURE xml_file_header
  17387. LOCAL lcRetVal, lcCodePage, lcEncoding
  17388. IF EMPTY(This.cCodePage)
  17389.     lcCodePage = TRANSFORM(CPCURRENT())
  17390. ELSE 
  17391.     lcCodePage = ALLTRIM(This.cCodePage)
  17392. ENDIF
  17393. * Let's use ISO-8859-1 instead of Windows-1252, to make it compatible with LibreOffice
  17394. * Still need checking from people that use different CodePages
  17395. DO CASE
  17396. CASE "1252" $ lcCodePage
  17397.     lcEncoding = "ISO-8859-1"
  17398. CASE INLIST(lcCodePage, "CP950", "CP936", "950", "936")  && Chinese
  17399.     lcEncoding = "UTF-8"
  17400.     This.lConvertToUTF8    = .T.
  17401. *    lcEncoding = "GB2312"
  17402. OTHERWISE
  17403.     * lcEncoding = "Windows-" + IIF("CP" $ lcCodePage, "", "CP") + lcCodePage && comment by amaximum
  17404.     lcEncoding = "Windows-" + IIF(LEFT(lcCodePage, 2) = "CP", SUBSTR(lcCodePage, 3), lcCodePage)
  17405. ENDCASE
  17406. TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17407. <?xml version="1.0" encoding="<<lcEncoding>>"?>
  17408. <?mso-application progid="Excel.Sheet"?>
  17409. ENDTEXT
  17410. *!*    * Original code from Alejandro Sosa
  17411. *!*    TEXT TO lcRetVal NOSHOW PRETEXT 2
  17412. *!*    <?xml version="1.0"?>
  17413. *!*    <?mso-application progid="Excel.Sheet"?>
  17414. *!*    ENDTEXT
  17415. * Cancelled Andrus Moor'update because the resulting header would not allow the 
  17416. * XML to be opened by LIBREOFFICE
  17417. * 02/01/07 Change by andrus Moor
  17418. *!*    TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17419. *!*    <?xml version="1.0" encoding="Windows-<<TRANSFORM(CPCURRENT())>>"?>
  17420. *!*    <?mso-application progid="Excel.Sheet"?>
  17421. *!*    ENDTEXT
  17422. RETURN lcRetVal + CHR(13) + CHR(10)
  17423. *!*    Microsoft's
  17424. *!*    ISO Code Page Charts
  17425. *!*    Globalization site: GlobalDev
  17426. *!*    ISO Code Pages at Microsoft's site
  17427. *!*    ISO/IEC 8859-1 (Latin 1)
  17428. *!*    ISO/IEC 8859-2 (Latin 2)
  17429. *!*    ISO/IEC 8859-3 (Latin 3)
  17430. *!*    ISO/IEC 8859-4 (Baltic)
  17431. *!*    ISO/IEC 8859-5 (Cyrillic)
  17432. *!*    ISO/IEC 8859-6 (Arabic)
  17433. *!*    ISO/IEC 8859-7 (Greek)
  17434. *!*    ISO/IEC 8859-8 (Hebrew)
  17435. *!*    ISO/IEC 8859-9 (Turkish)
  17436. *!*    ISO/IEC 8859-15 (Latin 9)
  17437. ENDPROC
  17438. PROCEDURE xml_style
  17439. LPARAMETERS tnID
  17440. *!*    IF "936" $ This.cCodepage && We are not setting fonts for Chinese
  17441. *!*                                && Let's allow Excel to use the one it has default for the language
  17442. *!*        lcFont = ""
  17443. *!*    ELSE
  17444. *!*        lcFont     = IIF(EMPTY(paStyles[tnId-20,2]),'',[ ss:FontName="] + ALLTRIM(paStyles[tnId-20,2]) + ["])
  17445. *!*    ENDIF
  17446. lcFont     = IIF(EMPTY(paStyles[tnId-20,2]),'',[ ss:FontName="] + ALLTRIM(paStyles[tnId-20,2]) + ["])
  17447. * 2010.01.30 - CChalom: Fix in the name of the field, correct = "Size"
  17448. lcFont     = lcFont + IIF(EMPTY(paStyles[tnId-20,3]),'',[ ss:Size="] + ALLTRIM(TRANSFORM(paStyles[tnId-20,3])) + ["])
  17449. *lcFont     = lcFont + IIF(EMPTY(paStyles[tnId-20,3]),'',[ ss:FontSize="] + ALLTRIM(TRANSFORM(paStyles[tnId-20,3])) + ["])
  17450. * 2010.01.30 - CChalom: Create a tag for the text color
  17451. LOCAL lcTextColor
  17452. lcTextColor = ALLTRIM(GETWORDNUM(paStyles[tnId-20,9],3,","))
  17453. IF NOT EMPTY(lcTextColor) AND lcTextColor <> "000000"
  17454.     lcFont     = lcFont + IIF(EMPTY(lcTextColor),'',[ ss:Color="#] + lcTextColor + ["])
  17455. ENDIF 
  17456. lcBold     = IIF(BITTEST(paStyles[tnId-20,4],0), [ ss:Bold="1"],'')
  17457. lcItalic = IIF(BITTEST(paStyles[tnId-20,4],1), [ ss:Italic="1"],'')
  17458. lcFamily = ''  && IIF(EMPTY(lcBold) AND EMPTY(lcItalic),'',[ x:Family="Modern"])
  17459. lcFont   = lcFont + lcFamily + lcBold + lcItalic
  17460. lcNumberFormat = IIF(EMPTY(paStyles[tnId-20,6]),'',[ ss:Format="] + paStyles[tnId-20,6] + ["])
  17461. *lcHorizontalAlignment = IIF(paStyles[tnId-20,7] = 2,[ ss:Horizontal="Center"],'')
  17462. DO CASE
  17463.     CASE 'LEFT' $ UPPER(paStyles[tnId-20,7])
  17464.         lcHorizontalAlignment = [ ss:Horizontal="Left"]
  17465.     CASE 'CENTER' $ UPPER(paStyles[tnId-20,7])
  17466.         lcHorizontalAlignment = [ ss:Horizontal="Center"]
  17467.     CASE 'RIGHT' $ UPPER(paStyles[tnId-20,7])
  17468.         lcHorizontalAlignment = [ ss:Horizontal="Right"]
  17469.     OTHERWISE
  17470.         lcHorizontalAlignment = ''
  17471. ENDCASE
  17472. *!* ExcelBorders format: <ExcelBorders>Top,Single,1;Bottom,Double,3</ExcelBorders>
  17473. *!*       <Borders>
  17474. *!*        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
  17475. *!*        <Border ss:Position="Bottom" ss:LineStyle="Double" ss:Weight="3"/>
  17476. *!*       </Borders>
  17477. LOCAL laBorders[1],laBorder[1],i,j,lcPosition,lcLineStyle,lcWeight,lcBorder,lcBorders
  17478. ALINES(laBorders,paStyles[tnId-20,8],1,';')
  17479. IF EMPTY(laBorders[1])
  17480.     lcBorders = '<Borders/>'
  17481.     lcBorders = '<Borders>'
  17482.     FOR m.i = 1 TO ALEN(laBorders,1)
  17483.         ALINES(laBorder,laBorders[m.i],1,',')
  17484.         DIMENSION laBorder[3]
  17485.         IF EMPTY(laBorder[1])
  17486.             LOOP
  17487.         ENDIF
  17488.         lcPosition  = IIF(EMPTY(laBorder[1]),["Bottom"],["]+laBorder[1]+["])
  17489.         lcLineStyle = IIF(EMPTY(laBorder[2]) OR UPPER(laBorder[2]) = 'SINGLE',["Continuous"],["]+laBorder[2]+["])
  17490.         lcWeight    = IIF(EMPTY(laBorder[3]),["1"],["]+laBorder[3]+["])
  17491.         lcBorder    = [<Border ss:Position=]+lcPosition+[ ss:LineStyle=]+lcLineStyle + [ ss:Weight=] + lcWeight + [/>]
  17492.         lcBorders = lcBorders + lcBorder
  17493.     ENDFOR
  17494.     lcBorders = lcBorders + '</Borders>'
  17495. ENDIF
  17496. *!* Interior properties.
  17497. *!*        Color         = Background Color
  17498. *!*        Pattern         = "Solid" --> no pattern, "Gray125", "ThinVert ss:Pattern="Solid"Stripe"
  17499. *!*        PatternColor
  17500. *!* Samples:
  17501. *!*    <ExcelInterior>Solid,FFFF00</ExcelInterior>
  17502. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="Gray125"/>
  17503. *!*    <ExcelInterior>Gray125,FFFFFF,000000</ExcelInterior>
  17504. *!*        <Interior ss:Color="#FFFFFF" ss:Pattern="Gray125" ss:PatternColor="#000000"/>
  17505. *!*    <ExcelInterior>ThinVertStripe,FFFF00,00FF00</ExcelInterior>
  17506. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="ThinVertStripe" ss:PatternColor="#00FF00"/>
  17507. LOCAL laInterior[1],lcPosition,lcLineStyle,lcWeight,lcInterior
  17508. ALINES(laInterior,paStyles[tnId-20,9],1,',')
  17509. DIMENSION laInterior[3]
  17510. * 2010.01.30 - CChalom: Modified to create the tag only for non white background
  17511. IF EMPTY(laInterior[1]) OR laInterior[2] = "FFFFFF"
  17512.     lcInterior = '<Interior/>'
  17513.     lcPattern       = [ ss:Pattern=] + IIF(EMPTY(laInterior[1]),["Solid"],["]+laInterior[1]+["])
  17514.     lcColor           = [ ss:Color=] + IIF(EMPTY(laInterior[2]),["#FFFFFF"],["#]+laInterior[2]+["])
  17515.     lcPatternColor = IIF(EMPTY(laInterior[3]),[],[ ss:PatternColor=] + ["#]+laInterior[3]+["])
  17516.     lcInterior = '<Interior ' + lcColor + lcPattern + lcPatternColor + '/>'
  17517. ENDIF
  17518. TEXT TO lcRetVal NOSHOW TEXTMERGE PRETEXT 2
  17519.   <Style ss:ID="<<'s' + TRANSFORM(tnID,'@L 99')>>">
  17520.    <Alignment ss:Vertical="Bottom" <<lcHorizontalAlignment>>/>
  17521.    <<lcBorders>>
  17522.    <Font<<lcFont>>/>
  17523.    <<lcInterior>>
  17524.    <NumberFormat<<lcNumberFormat>>/>
  17525.    <Protection/>
  17526.   </Style>
  17527. ENDTEXT
  17528. RETURN lcRetVal + CHR(13) + CHR(10)
  17529. ENDPROC
  17530. PROCEDURE xml_workbook_header
  17531. LOCAL lcRetVal
  17532. TEXT TO lcRetVal NOSHOW PRETEXT 2
  17533. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  17534.  xmlns:o="urn:schemas-microsoft-com:office:office"
  17535.  xmlns:x="urn:schemas-microsoft-com:office:excel"
  17536.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  17537.  xmlns:html="http://www.w3.org/TR/REC-html40">
  17538. ENDTEXT
  17539. RETURN lcRetVal + CHR(13) + CHR(10)
  17540. ENDPROC
  17541. PROCEDURE xml_worksheet_header
  17542. LPARAMETERS tcWorksheetName
  17543. LOCAL lcRetVal
  17544. TEXT TO lcRetVal NOSHOW TEXTMERGE PRETEXT 2
  17545. <Worksheet ss:Name="<<tcWorksheetName>>">
  17546. ENDTEXT
  17547. RETURN lcRetVal + CHR(13) + CHR(10)
  17548. ENDPROC
  17549. PROCEDURE xml_row_header
  17550. LOCAL lcRetVal
  17551. TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17552. <Row ss:Index="<<ALLTRIM(TRANSFORM(ExcelRow))>>" ss:AutoFitHeight="1">
  17553. ENDTEXT
  17554. RETURN lcRetVal + CHR(13) + CHR(10)
  17555. ENDPROC
  17556. PROCEDURE xml_row_footer
  17557. RETURN '</Row>' + CHR(13) + CHR(10)
  17558. ENDPROC
  17559. PROCEDURE xml_cell
  17560. LPARAMETERS tcContents, tcUnicode, tnStyleNumber
  17561. tcContents = ALLTRIM(tcContents)
  17562. LOCAL lcOrigContents, lcStyle
  17563. lcOrigContents = tcContents
  17564. lcStyle = UPPER(paStyles[tnStyleNumber-20,5])
  17565. LOCAL lcRetVal
  17566. IF lcStyle = 'DATETIME'
  17567. *    lcSetDate = SET("Date")
  17568. *    SET DATE (This.SetDate)
  17569.     tcContents = CTOD(tcContents)
  17570. *    SET DATE TO BRITISH
  17571.     IF EMPTY(tcContents)
  17572.         lcStyle = "STRING"
  17573.         tcContents = lcOrigContents
  17574.     ELSE
  17575.         *1899-12-31T14:49:56.000
  17576.         tcContents = TRANSFORM(YEAR(tcContents),'@L 9999') ;
  17577.                  + '-' + TRANSFORM(MONTH(tcContents),'@L 99') ;
  17578.                  + '-' + TRANSFORM(DAY(tcContents),'@L 99') ;
  17579.                  + 'T00:00:00.000'
  17580.     ENDIF
  17581. *    SET DATE TO &lcSetDate
  17582. ENDIF
  17583. * 2010/08/08 Fix by Jaketon / CChalom, when SET("POINT") = ","
  17584. IF lcStyle = 'NUMBER'
  17585.       tcContents = CHRTRAN(tcContents, This.SetSeparator, '') && quito simbolos de separaci
  17586.       tcContents = CHRTRAN(tcContents, This.SetPoint    ,'.') && Reemplazo , por puntos 
  17587. * 2012/05/30 Fix by RGBean to allow flexible Currency and ()'s for Negative
  17588. *-- tcContents = CHRTRAN(tcContents,'$+','+')
  17589.       tcContents =  CHRTRAN(tcContents, SET('Currency',1), '')    && Kill any Currency character(s)
  17590.       IF AT('(', tcContents) > 0 AND AT(')', tcContents) > 0      && ()'s used for negative
  17591.             tcContents = CHRTRAN(tcContents,'()','')              && Kill the ()'s
  17592.             tcContents = '-'+ALLTRIM(tcContents)                  && Make it a negative value
  17593.       ENDIF
  17594. ENDIF
  17595. LOCAL llUseUnicode
  17596. llUseUnicode = (lcStyle = 'STRING') and ("?" $ tcContents)
  17597. *!*    IF (This.lUseUnicode = .F.) AND (lcStyle = 'STRING')
  17598. *!*        IF (NOT EMPTY(tcContents)) AND (NOT EMPTY(CHRTRANC(tcContents, "?", "")))
  17599. *!*            This.lUseUnicode = .T.
  17600. *!*        ENDIF
  17601. *!*    ENDIF
  17602. LOCAL llChinese
  17603. llChinese = ("936" $ This.cCodePage)
  17604. * IF lcStyle = 'STRING' AND (This.lUseUnicode OR ("?" $ tcContents)) AND (NOT llChinese)
  17605. IF lcStyle = 'STRING' AND (llUseUnicode) AND (NOT llChinese)
  17606.     LOCAL n, lcUNValue, lnUNValue, lcNewContents
  17607.     lcUnValue     = ""
  17608.     lcNewContents = ""
  17609.     LOCAL lnChars
  17610.     lnChars = (LEN(tcContents) * 2)
  17611.     FOR n = 1 TO lnChars STEP 2
  17612.         lcUNValue = SUBSTR(tcUnicode, n, 2)
  17613.         IF EMPTY(lcUNValue)
  17614.             EXIT
  17615.         ENDIF
  17616.         lnUNValue = CTOBIN(0h+lcUNValue,"2RS")
  17617.         lcNewContents = lcNewContents + '&#' + ALLTRIM(TRANSFORM(lnUNValue)) + ';'
  17618.     ENDFOR
  17619.     tcContents = lcNewContents
  17620. ENDIF 
  17621. *!*    IF UPPER(paStyles[tnStyleNumber-20,5]) = 'STRING' AND (NOT "1251" $ This.cCodePage) AND (This.lUseUnicode = .F.)
  17622. *!*        tcContents = This.Xml_Encode(tcContents,'
  17623. *!*        tcContents = This.Xml_Encode(tcContents,'
  17624. *!*        tcContents = This.Xml_Encode(tcContents,'
  17625. *!*        tcContents = This.Xml_Encode(tcContents,'
  17626. *!*        tcContents = This.Xml_Encode(tcContents,'
  17627. *!*        tcContents = This.Xml_Encode(tcContents,'
  17628. *!*        tcContents = This.Xml_Encode(tcContents,'
  17629. *!*        tcContents = This.Xml_Encode(tcContents,'
  17630. *!*        tcContents = This.Xml_Encode(tcContents,'
  17631. *!*        tcContents = This.Xml_Encode(tcContents,'
  17632. *!*        tcContents = This.Xml_Encode(tcContents,'
  17633. *!*        tcContents = This.Xml_Encode(tcContents,'
  17634. *!*        tcContents = This.Xml_Encode(tcContents,'
  17635. *!*        tcContents = This.Xml_Encode(tcContents,'
  17636. *!*        tcContents = This.Xml_Encode(tcContents,'
  17637. *!*        tcContents = This.Xml_Encode(tcContents,'
  17638. *!*        tcContents = This.Xml_Encode(tcContents,'
  17639. *!*        tcContents = This.Xml_Encode(tcContents,'
  17640. *!*        tcContents = This.Xml_Encode(tcContents,'
  17641. *!*        tcContents = This.Xml_Encode(tcContents,'
  17642. *!*        tcContents = This.Xml_Encode(tcContents,'
  17643. *!*        tcContents = This.Xml_Encode(tcContents,'
  17644. *!*        tcContents = This.Xml_Encode(tcContents,'
  17645. *!*        tcContents = This.Xml_Encode(tcContents,'
  17646. *!*        tcContents = This.Xml_Encode(tcContents,'
  17647. *!*        tcContents = This.Xml_Encode(tcContents,'
  17648. *!*        tcContents = This.Xml_Encode(tcContents,'
  17649. *!*        tcContents = This.Xml_Encode(tcContents,'
  17650. *!*        tcContents = This.Xml_Encode(tcContents,'
  17651. *!*        tcContents = This.Xml_Encode(tcContents,'
  17652. *!*        tcContents = This.Xml_Encode(tcContents,'
  17653. *!*        tcContents = This.Xml_Encode(tcContents,'
  17654. *!*        tcContents = This.Xml_Encode(tcContents,'
  17655. *!*        tcContents = This.Xml_Encode(tcContents,'
  17656. *!*        tcContents = This.Xml_Encode(tcContents,'
  17657. *!*        tcContents = This.Xml_Encode(tcContents,'
  17658. *!*        tcContents = This.Xml_Encode(tcContents,'
  17659. *!*        tcContents = This.Xml_Encode(tcContents,'
  17660. *!*        tcContents = This.Xml_Encode(tcContents,'
  17661. *!*        tcContents = This.Xml_Encode(tcContents,'
  17662. *!*        tcContents = This.Xml_Encode(tcContents,'
  17663. *!*        tcContents = This.Xml_Encode(tcContents,'
  17664. *!*        tcContents = This.Xml_Encode(tcContents,'
  17665. *!*        tcContents = This.Xml_Encode(tcContents,'
  17666. *!*        tcContents = This.Xml_Encode(tcContents,'
  17667. *!*        tcContents = This.Xml_Encode(tcContents,'
  17668. *!*        tcContents = This.Xml_Encode(tcContents,'
  17669. *!*        tcContents = This.Xml_Encode(tcContents,'
  17670. *!*        tcContents = This.Xml_Encode(tcContents,'
  17671. *!*        tcContents = This.Xml_Encode(tcContents,'
  17672. *!*        tcContents = This.Xml_Encode(tcContents,'
  17673. *!*        tcContents = This.Xml_Encode(tcContents,'
  17674. *!*        tcContents = This.Xml_Encode(tcContents,'
  17675. *!*        tcContents = This.Xml_Encode(tcContents,'
  17676. *!*        tcContents = This.Xml_Encode(tcContents,'
  17677. *!*    ENDIF
  17678. LOCAL lcMergeAcross
  17679. lcMergeAcross = IIF(EMPTY(nExcelMergeAcross),'',[ ss:MergeAcross="] + ALLTRIM(TRANSFORM(nExcelMergeAcross),'99999') + ["])
  17680. lcData = IIF(lcStyle = 'STRING' AND EMPTY(tcContents),'', ;
  17681.              '<Data ss:Type="' + paStyles[tnStyleNumber-20,5] + '">' + tcContents + '</Data>')
  17682. * 21/06/08 ExcelInsertFormula    <Cell ss:Index="7" ss:StyleID="s68" ss:Formula="=+R[-4]C-R[-3]C">
  17683. *TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17684. *<Cell  ss:Index="<<ALLTRIM(TRANSFORM(ExcelCol))>>" <<lcMergeAcross>> ss:StyleID="<<'s'+TRANSFORM(tnStyleNumber,'@L 99')>>"><<lcData>></Cell>
  17685. *ENDTEXT
  17686. LOCAL lcInsertFormula,lcNamedCell
  17687. lcInsertFormula = IIF(EMPTY(cExcelInsertFormula),'',[ ss:Formula="] + ALLTRIM(cExcelInsertFormula) + ["])
  17688. * 21/06/08 ExcelNamedCell    <Cell ss:Index="13" ss:StyleID="s67"><Data ss:Type="Number">17832.98</Data><NamedCell ss:Name="Cajas_Per2"/></Cell>
  17689. lcNamedCell = ''
  17690. IF !EMPTY(cExcelNamedCell)
  17691.     lcNamedCell = [<NamedCell ss:Name="] + ALLTRIM(cExcelNamedCell) + ["/>]
  17692. *  <NamedRange ss:Name="Cajas_Per1" ss:RefersTo="=Sheet1!R10C7"/>
  17693.     REPLACE cExcelNamedRange WITH ALLTRIM(cExcelNamedCell) + [;] ;
  17694.                                   + [=Sheet1!R] + ALLTRIM(TRANSFORM(ExcelRow)) ;
  17695.                                   + [C] + ALLTRIM(TRANSFORM(ExcelCol))
  17696. ENDIF
  17697. *TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17698. *<Cell  ss:Index="<<ALLTRIM(TRANSFORM(ExcelCol))>>" <<lcMergeAcross>> ss:StyleID="<<'s'+TRANSFORM(tnStyleNumber,'@L 99')>>" <<lcInsertFormula>> ><<lcData>></Cell>
  17699. *ENDTEXT
  17700. lcRetVal = [<Cell  ss:Index="] + ALLTRIM(TRANSFORM(ExcelCol)) + ["] ;
  17701.            + lcMergeAcross + [ ss:StyleID="s] + TRANSFORM(tnStyleNumber,'@L 99') + ["] ;
  17702.            + lcInsertFormula + [>] + lcData ;
  17703.            + lcNamedCell + [</Cell>]
  17704. RETURN lcRetVal + CHR(13) + CHR(10)
  17705. *!*       <Row ss:AutoFitHeight="0">
  17706. *!*        <Cell ss:StyleID="s27"><Data ss:Type="DateTime">2006-10-05T00:00:00.000</Data></Cell>
  17707. *!*       </Row>
  17708. *!*       <Row ss:AutoFitHeight="0">
  17709. *!*        <Cell ss:StyleID="s22"><Data ss:Type="String">Puro texto Bold</Data></Cell>
  17710. *!*       </Row>
  17711. ENDPROC
  17712. PROCEDURE xml_table_header
  17713. LPARAMETERS tnRows,tnCols
  17714. LOCAL lcRetVal,ja[1],i,lcColumns
  17715. *   <Column ss:StyleID="s21" ss:AutoFitWidth="0" ss:Width="91.5"/>
  17716. *   <Column ss:Index="4" ss:StyleID="s21" ss:AutoFitWidth="0" ss:Width="71.25"/>
  17717. SELECT MAX(ExcelCol),MAX(ExcelRow) ;
  17718.   FROM (This.cOutputAlias) ;
  17719.   INTO ARRAY ja
  17720. lcColumns = ''
  17721. ASORT(paColData,1,ALEN(paColData),0)
  17722. FOR m.i = 1 TO ALEN(paColData,1)
  17723.     IF EMPTY(paColData[m.i,1])
  17724.         LOOP
  17725.     ENDIF
  17726.     * Column1 = Column number
  17727.     * Column2 = AutoFitWidth (.T. / .F.)
  17728.     * Column3 = Column width
  17729.     lcColumns = lcColumns + CHR(13) + CHR(10) + [<Column ss:Index="] + TRANSFORM(paColData[i,1]) + ["]
  17730.     lcColumns = lcColumns + [ ss:AutoFitWidth="] + IIF(paColData[m.i,2],'1','0') + ["]
  17731.     * The stored width is screen width / 1.33333.  Screen pixels are screen width * 7 + 5.
  17732.     lcColumns = lcColumns + [ ss:Width="] + TRANSFORM(((paColData[m.i,3]*7+5)/1.333333)) + ["/>]
  17733. ENDFOR
  17734. *!*    TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17735. *!*    <Table ss:ExpandedColumnCount="<<ja[1]>>" ss:ExpandedRowCount="<<ja[2]>>" x:FullColumns="1"
  17736. *!*     x:FullRows="1" ss:StyleID="s21" ss:DefaultRowHeight="14.25"><<lcColumns>> 
  17737. *!*    ENDTEXT
  17738. TEXT TO lcRetVal TEXTMERGE NOSHOW PRETEXT 2
  17739. <Table ss:ExpandedColumnCount="<<ja[1]>>" ss:ExpandedRowCount="<<ja[2]>>" x:FullColumns="1"
  17740.  x:FullRows="1" ss:StyleID="s21"><<lcColumns>> 
  17741. ENDTEXT
  17742. RETURN lcRetVal + CHR(13) + CHR(10)
  17743. ENDPROC
  17744. PROCEDURE xml_workbook_footer
  17745. RETURN '</Workbook>' + CHR(13) + CHR(10)
  17746. ENDPROC
  17747. PROCEDURE xml_worksheet_footer
  17748. LOCAL lcRetVal
  17749. TEXT TO lcRetVal NOSHOW PRETEXT 2
  17750.  </Worksheet>
  17751. ENDTEXT
  17752. RETURN lcRetVal + CHR(13) + CHR(10)
  17753. ENDPROC
  17754. PROCEDURE xml_stylenumber
  17755. LPARAMETERS tcContents
  17756. LOCAL lcType,lcNumberFormat,lcKey,i
  17757. lcType           = This.Xml_Type(tcContents)
  17758. lcNumberFormat = IIF(lcType = 'Number',This.Xml_NumberFormat(tcContents),'')
  17759. lcNumberFormat = IIF(lcType = 'DateTime','Short Date',lcNumberFormat)
  17760. lcKey           = UPPER(PADR(FontFace,20)+TRAN(FontSize,'99')+TRAN(FontStyle,'99') ;
  17761.                 + PADR(lcType,10) + PADR(lcNumberFormat,20)) + PADR(cExcelAlignment,30) ;
  17762.                 + PADR(cExcelBorder,50) + PADR(cExcelInterior,50)
  17763. i = ASCAN(paStyles,lcKey,1,ALEN(paStyles,1),1,1 + 2 + 4 + 8)
  17764. IF i = 0
  17765.     i = ALEN(paStyles,1)+1
  17766.     DIMENSION paStyles[i,ALEN(paStyles,2)]
  17767.     paStyles[i,2] = FontFace
  17768.     paStyles[i,3] = FontSize
  17769.     paStyles[i,4] = FontStyle
  17770.     paStyles[i,5] = lcType
  17771.     paStyles[i,6] = lcNumberFormat
  17772.     paStyles[i,7] = cExcelAlignment    && Alignment
  17773.     paStyles[i,8] = cExcelBorder    && Border
  17774.     paStyles[i,9] = cExcelInterior    && Interior color and pattern
  17775.     paStyles[i,1] = lcKey
  17776. ENDIF
  17777. RETURN 20 + i
  17778. ENDPROC
  17779. PROCEDURE xml_type
  17780. LPARAMETERS tcContents
  17781. tcContents = ALLTRIM(tcContents)
  17782. LOCAL lcType,lcSetDate
  17783. *lcSetDate = SET("Date")
  17784. *SET DATE TO BRITISH
  17785. DO CASE
  17786.     * CChalom - Check XML_Type method, a new checking was added there 
  17787.     * Checks if the date type is ANSI
  17788.     CASE (OCCURS('.', tcContents) = 2) AND ;
  17789.             This.SetDateAnsi AND ;
  17790.             (OCCURS(':', tcContents) = 2) && Probably a DateTime, NOT a Number !
  17791.         lcType = 'String'
  17792.     CASE (OCCURS('.', tcContents) = 2) AND ;
  17793.             This.SetDateAnsi AND ;
  17794.             (LEN(GETWORDNUM(tcContents, 2, ".")) = 2) AND CTOD(tcContents) # {} && updated 2012/02/07 - aMaximum
  17795.         lcType = 'DateTime'
  17796.     CASE This.IsNumber(tcContents)
  17797.         lcType = 'Number'
  17798.     CASE AT('/',tcContents,2) > 0 AND AT('/',tcContents,3) = 0
  17799.         * Make sure a string with two slashes is not interpreted as a date unless it is a date
  17800.         tcContents = CTOD(tcContents)
  17801.         IF VARTYPE(tcContents) = 'D' AND !EMPTY(tcContents)
  17802.             lcType = 'DateTime'
  17803.         ELSE
  17804.             lcType = 'String'
  17805.         endif
  17806.     OTHERWISE
  17807.         lcType = 'String'
  17808. ENDCASE
  17809. *SET DATE TO &lcSetDate
  17810. RETURN lcType
  17811. ENDPROC
  17812. PROCEDURE xml_styles_header
  17813. RETURN '<Styles>' + CHR(13) + CHR(10)
  17814. ENDPROC
  17815. PROCEDURE xml_styles_footer
  17816. RETURN '</Styles>' + CHR(13) + CHR(10)
  17817. ENDPROC
  17818. PROCEDURE xml_table_footer
  17819. RETURN '</Table>' + CHR(13) + CHR(10)
  17820. ENDPROC
  17821. PROCEDURE xml_encode
  17822. LPARAMETERS tcContents,tcChar
  17823. * tcContents = STRTRAN(tcContents,tcChar,'&#' + ALLTRIM(TRANSFORM(ASC(tcChar))) + ';')
  17824. lcValue = CTOBIN(0h+STRCONV(tcChar,5),"2RS")
  17825. tcContents = STRTRAN(tcContents,tcChar,'&#' + ALLTRIM(TRANSFORM( lcValue)) + ';')
  17826. RETURN tcContents
  17827. ENDPROC
  17828. PROCEDURE calcbandnumbers
  17829. * This routine places in frx.User the number of the report band to which each element belongs
  17830. *  When OBJTYPE = 9 (a band), the following values are used:
  17831. *  0 = Title 
  17832. *  1 = Page header
  17833. *  2 = Column header
  17834. *  3 = Group header
  17835. *  4 = Detail
  17836. *  5 = Group footer
  17837. *  6 = Column footer
  17838. *  7 = Page footer
  17839. *  8 = Summary
  17840. * NOTES:
  17841. * Frx.VPos contains the vertical position of the report elements AS THEY APPEAR IN REPORT DESIGNER
  17842. * In order to determine the band to which report elements belong we need to know the top of each band IN REPORT DESIGNER
  17843. * Frx.Height contains the height of report bands, but we must calculate VPos for each band.
  17844. * "Report Bands" refer to report designer areas that contain fields and labels.  They are numbered as above.
  17845. * "Title Bands" refer to report designer areas that contain titles such as Detail, Page Header
  17846. * Procedure:
  17847. * Store VPos of "title bands" in array.
  17848. * Store in User field the number of the report band to which each report element belongs
  17849.     LOCAL laBands[1],lnVpos,i,lnSelect
  17850.     * These constants come from VFP program convert.prg
  17851.     m.g_pixelsize  = 96       && logical pixels per inch
  17852.     m.g_bandheight = ((19/m.g_pixelsize) * 10000)
  17853.     m.g_bandfudge  =  4350
  17854.     * Metrics for various objects, report bands, etc.
  17855.     #DEFINE c_radhght      1.308
  17856.     #DEFINE c_chkhght      1.308
  17857.     #DEFINE c_listht       1.000
  17858.     #DEFINE c_adjfld       0.125
  17859.     #DEFINE c_adjlist      0.125
  17860.     #DEFINE c_adjtbtn      0.769
  17861.     #DEFINE c_adjrbtn      0.308
  17862.     #DEFINE c_vchkbox      0.154
  17863.     #DEFINE c_vradbtn      0.154
  17864.     #DEFINE c_vlist        0.500
  17865.     #DEFINE c_hpopup       1.000
  17866.     #DEFINE c_adjbox       0.500
  17867.     #DEFINE c_chkpixel        12
  17868.     laBands = 0
  17869.     SELECT RECNO(),ObjCode,000000.000,Height ;
  17870.       FROM (This.cFRXalias) ;
  17871.      WHERE Platform = 'WINDOWS' ;
  17872.             AND ObjType = 9 ;
  17873.       INTO ARRAY laBands
  17874.     lnVPosBottom = - m.g_bandheight && - (m.g_bandfudge/m.g_pixelsize)
  17875.      FOR m.i = 1 TO ALEN(laBands,1)
  17876.         lnVPosBottom = lnVPosBottom + laBands[m.i,4] + m.g_bandheight + (m.g_bandfudge/m.g_pixelsize)
  17877.         laBands[m.i,3] = lnVPosBottom
  17878.     ENDFOR
  17879.     * Make cursor readwrite
  17880.     SELECT * ;
  17881.       FROM (This.cFRXalias) ;
  17882.       INTO CURSOR Frx1 READWRITE
  17883.     USE IN (This.cFRXalias)
  17884.     SELECT * ;
  17885.       FROM Frx1 ;
  17886.       INTO CURSOR (This.cFRXalias) READWRITE
  17887.     USE IN Frx1
  17888.     SCAN FOR Platform = 'WINDOWS' AND (ObjType = 5 OR ObjType = 8)
  17889.          FOR m.i = 1 TO ALEN(laBands,1)
  17890.              IF VPos < laBands[m.i,3]
  17891.                  * Store in User the number of the band to which report element belongs
  17892.                  REPLACE User WITH TRANSFORM(laBands[m.i,2],'999')
  17893.                  EXIT
  17894.              ENDIF
  17895.         ENDFOR
  17896.     ENDSCAN
  17897. ENDPROC
  17898. PROCEDURE xextractexcelcol
  17899. LPARAMETERS tcComment
  17900. RETURN '0000000'
  17901. ENDPROC
  17902. PROCEDURE applyexcelstyle
  17903. LPARAMETERS tcExcelStyle,tnOption
  17904. SELECT (this.cOutputAlias)
  17905. IF !EMPTY(tcExcelStyle)
  17906.     &tcExcelStyle.(tnOption,This)
  17907. ENDIF
  17908. RETURN
  17909. *!*    **** Moved to an outside procedure ****
  17910. *!*    * My Default ExcelStyle
  17911. *!*    *  0 = Title 
  17912. *!*    *  1 = Page header
  17913. *!*    *  2 = Column header
  17914. *!*    *  3 = Group header
  17915. *!*    *  4 = Detail
  17916. *!*    *  5 = Group footer
  17917. *!*    *  6 = Column footer
  17918. *!*    *  7 = Page footer
  17919. *!*    *  8 = Summary
  17920. *!*    tcOutputAlias = This.cOutputAlias
  17921. *!*    DO CASE
  17922. *!*        CASE tnOption = 1    && Before extracting comments
  17923. *!*        CASE tnOption = 2    && Before assigning row
  17924. *!*            DELETE ALL FOR (cUser = '  0' OR cUser = '  1') ;
  17925. *!*                            AND ('FECHA DE IMPRESION:' $ cExpr OR 'FECHA DE IMPRESI
  17926. N:' $ cExpr ;
  17927. *!*                                 OR 'PAGINA:' $ cExpr OR 'P
  17928. GINA:' $ cExpr ;
  17929. *!*                                 OR cExpr = 'DATE()' OR cExpr = 'DATETIME()' OR cExpr = 'TIME()' OR cExpr = '_PAGENO')
  17930. *!*    *        DELETE ALL FOR (cUser = '  0' OR cUser = '  1') ;
  17931. *!*                            AND ('PAGINA:' $ cExpr OR 'P
  17932. GINA:' $ cExpr OR cExpr = '_PAGENO')
  17933. *!*    *        DELETE ALL FOR (cUser = '  0' OR cUser = '  1') ;
  17934. *!*                            AND ('FECHA DE IMPRESION:' $ cExpr OR 'FECHA DE IMPRESI
  17935. N:' $ cExpr ;
  17936. *!*                                 OR cExpr = 'DATE()' OR cExpr = 'TIME()') ;
  17937. *!*                            AND nPageNo > 1
  17938. *!*        CASE tnOption = 3    && Before assigning col
  17939. *!*        CASE tnOption = 4    && After assigning row and column
  17940. *!*            * Cursores con las filas y columnas
  17941. *!*            SELECT DISTINCT ExcelRow,LEFT(User,3) AS User ;
  17942. *!*              FROM (tcOutputAlias) ;
  17943. *!*              INTO ARRAY laRowUser
  17944. *!*            CREATE CURSOR ExcelCols (ExcelCol N(3))
  17945. *!*            FOR i = 1 TO pnMaxCol
  17946. *!*                INSERT INTO ExcelCols (ExcelCol) VALUES(i)
  17947. *!*            ENDFOR
  17948. *!*            * Lista de celdas con ----- or =====
  17949. *!*            SELECT ExcelRow,ExcelCol,Contents,User,nExcelUnderlinedColCount ;
  17950. *!*              FROM (tcOutputAlias) ;
  17951. *!*             WHERE LEFT(cContents,5) = '=====' OR LEFT(cContents,5) = '-----' ;
  17952. *!*              INTO CURSOR DashedCells READWRITE
  17953. *!*            * Borramos celdas con ----- or =====
  17954. *!*            DELETE &tcOutputAlias ;
  17955. *!*              FROM DashedCells ;
  17956. *!*             WHERE &tcOutputAlias..ExcelRow = DashedCells.ExcelRow AND &tcOutputAlias..ExcelCol = DashedCells.ExcelCol
  17957. *!*            * Cells to underline (one line above ----- or =====)
  17958. *!*            SELECT ExcelRow - 1 AS ExcelRow,ExcelCol,Contents,User,nExcelUnderlinedColCount,.F. AS lNueva ;
  17959. *!*              FROM DashedCells ;
  17960. *!*              INTO CURSOR UnderlinedCells READWRITE
  17961. *!*            * Add line extensions
  17962. *!*            SCAN FOR INT(LEN(ALLTRIM(Contents)) / 8) > 1 AND !lNueva
  17963. *!*                lnRecno       = RECNO()
  17964. *!*                lnExcelRow = ExcelRow
  17965. *!*                lcContents = LEFT(Contents,5)
  17966. *!*                FOR i = 1 TO MIN(INT(LEN(ALLTRIM(Contents)) / 8),MAX(1,nExcelUnderlinedColCount))
  17967. *!*                    lnExcelCol = UnderlinedCells.ExcelCol + i
  17968. *!*                    IF lnExcelCol > pnMaxCol
  17969. *!*                        EXIT
  17970. *!*                    ENDIF
  17971. *!*    *!*                    SELECT (tcOutputAlias)
  17972. *!*    *!*                    LOCATE FOR ExcelRow = lnExcelRow AND ExcelCol = lnExcelCol
  17973. *!*    *!*                    IF EOF()
  17974. *!*    *!*                        SELECT UnderlinedCells
  17975. *!*    *!*                        LOCATE FOR ExcelRow = lnExcelRow AND ExcelCol = lnExcelCol
  17976. *!*    *!*                        IF EOF()
  17977. *!*    *!*                            j = ASCAN(laRowUser,lnExcelRow,1,ALEN(laRowUser,1),1,8)
  17978. *!*    *!*                            lcUser = IIF(j > 0,laRowUser[j,2],User)
  17979. *!*    *!*                            INSERT INTO UnderlinedCells (ExcelRow,ExcelCol,Contents,User) VALUES (lnExcelRow,lnExcelCol,lcContents,lcUser)
  17980. *!*    *!*                            GOTO (lnRecno) IN UnderlinedCells
  17981. *!*    *!*                        ENDIF
  17982. *!*    *!*                    ENDIF
  17983. *!*                    LOCATE FOR ExcelRow = lnExcelRow AND ExcelCol = lnExcelCol
  17984. *!*                    IF EOF()
  17985. *!*                        j = ASCAN(laRowUser,lnExcelRow,1,ALEN(laRowUser,1),1,8)
  17986. *!*                        lcUser = IIF(j > 0,laRowUser[j,2],User)
  17987. *!*                        INSERT INTO UnderlinedCells (ExcelRow,ExcelCol,Contents,User,lNueva) VALUES (lnExcelRow,lnExcelCol,lcContents,lcUser,.T.)
  17988. *!*                    ENDIF
  17989. *!*                    GOTO (lnRecno) IN UnderlinedCells
  17990. *!*                ENDFOR
  17991. *!*            ENDSCAN
  17992. *!*            
  17993. *!*            * Add missing cells that need to be underlined
  17994. *!*            SELECT U.* ;
  17995. *!*              FROM UnderlinedCells U ;
  17996. *!*             WHERE NOT EXISTS (SELECT OA.ExcelRow,OA.ExcelCol ;
  17997. *!*                                  FROM (tcOutputAlias) OA ;
  17998. *!*                                 WHERE OA.ExcelRow = U.ExcelRow ;
  17999. *!*                                       AND OA.ExcelCol = U.ExcelCol) ;
  18000. *!*              INTO CURSOR MissingCells
  18001. *!*            SELECT (tcOutputAlias)
  18002. *!*            APPEND FROM DBF('MissingCells') FIELDS ExcelRow,ExcelCol,User
  18003. *!*            SET ORDER TO RowCol
  18004. *!*            * Perform underline
  18005. *!*            SELECT UnderlinedCells
  18006. *!*            SET RELATION TO TRANSFORM(ExcelRow,'@L 999999') + TRANSFORM(ExcelCol,'@L 999999') INTO (tcOutputAlias)
  18007. *!*            REPLACE ALL &tcOutputAlias..cExcelBorder WITH 'Bottom,' ;
  18008. *!*                        + IIF(LEFT(ALLTRIM(Contents),5)='=====','Double,3','')
  18009. *!*            SET RELATION TO
  18010. *!*            * Eliminate dashed Excel rows that became empty (move up following cells)
  18011. *!*            SELECT (tcOutputAlias)
  18012. *!*            SET ORDER TO
  18013. *!*            SELECT DISTINCT ExcelRow + 0000000 AS ExcelRow ;
  18014. *!*              FROM DashedCells ;
  18015. *!*             WHERE ExcelRow NOT IN (SELECT ExcelRow ;
  18016. *!*                                       FROM (tcOutputAlias)) ;
  18017. *!*             GROUP BY 1 ;
  18018. *!*             ORDER BY 1 ;
  18019. *!*              INTO CURSOR RenglonesParaEliminar READWRITE
  18020. *!*            APPEND BLANK
  18021. *!*            REPLACE ExcelRow WITH 9999999
  18022. *!*            GO TOP
  18023. *!*            lnFirstRow = 0
  18024. *!*            SCAN
  18025. *!*                SELECT (tcOutputAlias)
  18026. *!*                REPLACE ALL ExcelRow WITH ExcelRow - RECNO('RenglonesParaEliminar') + 1 ;
  18027. *!*                        FOR BETWEEN(ExcelRow,lnFirstRow,RenglonesParaEliminar.ExcelRow)
  18028. *!*                lnFirstRow = RenglonesParaEliminar.ExcelRow
  18029. *!*            ENDSCAN
  18030. *!*            * If nExcelMergeAcross >=99 merges to rightmost column
  18031. *!*            SELECT (tcOutputAlias)
  18032. *!*            REPLACE ALL nExcelMergeAcross WITH pnMaxCol - ExcelCol ;
  18033. *!*                    FOR nExcelMergeAcross >=99
  18034. *!*            * Font
  18035. *!*            REPLACE ALL FontFace WITH 'Arial', ;
  18036. *!*                        FontSize WITH MAX(FontSize,10)        && Minimum font is 10
  18037. *!*            REPLACE ALL FontSize WITH 16 ;
  18038. *!*                    FOR (cUser = '  0' OR cUser = '  1') ;
  18039. *!*                        AND ObjType = 8 ;
  18040. *!*                        AND 'SIS.CNOMBRE' $ cExpr
  18041. *!*            REPLACE ALL FontStyle WITH 1 ;
  18042. *!*                    FOR cUser <= '  2' ;
  18043. *!*                        AND (ObjType = 5 OR ObjType = 8)
  18044. *!*            REPLACE ALL FontStyle WITH 1 + 2 ;
  18045. *!*                    FOR cUser = '  3' ;
  18046. *!*                        AND (ObjType = 5 OR ObjType = 8)
  18047. *!*            * Group Footer
  18048. *!*            * Creamos celdas vacias que faltan
  18049. *!*            LOCAL laRowsGroupFooter[1]
  18050. *!*            laRowsGroupFooter = 0
  18051. *!*            lcCols = 0
  18052. *!*            SELECT DISTINCT ExcelRow ;
  18053. *!*              FROM (tcOutputAlias) ;
  18054. *!*             WHERE cUser = '  5' ;
  18055. *!*              INTO ARRAY laRowsGroupFooter
  18056. *!*            FOR i = 1 TO ALEN(laRowsGroupFooter,1)
  18057. *!*                IF EMPTY(laRowsGroupFooter[i])
  18058. *!*                    LOOP
  18059. *!*                ENDIF
  18060. *!*                lnRow = laRowsGroupFooter[i]
  18061. *!*                FOR lnCol = 1 TO pnMaxCol
  18062. *!*                    LOCATE FOR ExcelRow = lnRow AND ExcelCol = lnCol
  18063. *!*                    IF EOF()
  18064. *!*                        APPEND BLANK
  18065. *!*                        REPLACE ExcelRow WITH lnRow, ;
  18066. *!*                                ExcelCol WITH lnCol, ;
  18067. *!*                                User     WITH '  5', ;
  18068. *!*                                cUser     WITH '  5'
  18069. *!*                    ENDIF
  18070. *!*                ENDFOR
  18071. *!*            ENDFOR
  18072. *!*             
  18073. *!*            * Decoramos GroupFooter ( User = '  5')
  18074. *!*            * Font y background
  18075. *!*            REPLACE ALL FontStyle WITH 1 ;
  18076. *!*                    FOR cUser = '  5' ;
  18077. *!*                        AND (ObjType = 5 OR ObjType = 8)
  18078. *!*            REPLACE ALL cExcelInterior WITH 'Solid,';
  18079. *!*                                            + RIGHT(TRANSFORM(RGB(192,192,192),'@0'),6) + ',' ;
  18080. *!*                                            + RIGHT(TRANSFORM(RGB(0,0,0),'@0'),6) ;
  18081. *!*                    FOR cUser = '  5'
  18082. *!*            * Bordes arriba y abajo
  18083. *!*            LOCAL laGroupFooters[1,2]
  18084. *!*            laGroupFooters[1,1] = 0
  18085. *!*            laGroupFooters[1,2] = ''
  18086. *!*            SELECT DISTINCT ExcelRow,SPACE(8) AS cExcelBorder ;
  18087. *!*              FROM (tcOutputAlias) ;
  18088. *!*             WHERE cUser = '  5' ;
  18089. *!*              INTO ARRAY laGroupFooters
  18090. *!*            lnLastRow      = 0
  18091. *!*            FOR i = 1 TO ALEN(laGroupFooters,1)
  18092. *!*                IF EMPTY(laGroupFooters[i,1])
  18093. *!*                    LOOP
  18094. *!*                ENDIF
  18095. *!*                DO CASE
  18096. *!*                    CASE lnLastRow = 0
  18097. *!*                        laGroupFooters[i,2] = 'Top,Single,1'
  18098. *!*                    CASE laGroupFooters[i,1] = lnLastRow + 1
  18099. *!*                        laGroupFooters[i,2] = 'Top,Single,1'
  18100. *!*                    OTHERWISE    && laGroupFooters[i,1] > lnLastRow + 1
  18101. *!*                        laGroupFooters[i-1,2] = laGroupFooters[i-1,2] ;
  18102. *!*                                               + IIF(EMPTY(laGroupFooters[i-1,2]),'',';') ;
  18103. *!*                                               + 'Bottom,Double,3'
  18104. *!*                        laGroupFooters[i,2]   = 'Top,Single,1'
  18105. *!*                ENDCASE            
  18106. *!*                lnLastRow = laGroupFooters[i,1]
  18107. *!*            ENDFOR
  18108. *!*            laGroupFooters[ALEN(laGroupFooters,1),2] = laGroupFooters[ALEN(laGroupFooters,1),2] ;
  18109. *!*                                   + IIF(EMPTY(laGroupFooters[ALEN(laGroupFooters,1),2]),'',';') ;
  18110. *!*                                   + 'Bottom,Double,3'
  18111. *!*            
  18112. *!*            lnRecno          = 0
  18113. *!*            SCAN FOR User = '  5'
  18114. *!*                i = ASCAN(laGroupFooters,ExcelRow,1,ALEN(laGroupFooters,1),1,8)
  18115. *!*                IF i = 0
  18116. *!*                    LOOP
  18117. *!*                ENDIF
  18118. *!*                REPLACE cExcelBorder WITH laGroupFooters[i,2]
  18119. *!*                lnRecno = RECNO()
  18120. *!*            ENDSCAN
  18121. *!*    ENDCASE
  18122. ENDPROC
  18123. PROCEDURE islonghorizontalline
  18124. LPARAMETERS tcExpr
  18125. RETURN !EMPTY(tcExpr) AND EMPTY(CHRTRAN(ALLTRIM(tcExpr),[=-"],[])) AND LEN(ALLTRIM(tcExpr)) > 15
  18126. ENDPROC
  18127. PROCEDURE isshorthorizontalline
  18128. LPARAMETERS tcExpr
  18129. RETURN !EMPTY(tcExpr) AND EMPTY(CHRTRAN(ALLTRIM(tcExpr),[=-"],[])) AND LEN(tcExpr) < 15
  18130. ENDPROC
  18131. PROCEDURE calcbasefilename
  18132. LPARAMETERS tcWorkbook
  18133. LOCAL i,lcFileName
  18134. IF EMPTY(tcWorkbook)
  18135.     * Calc default name
  18136.     FOR m.i = 1 TO 9
  18137.         IF !FILE(FORCEEXT('REP_'+TRANSFORM(m.i,'@L 99'),'xls'))
  18138.             lcFileName = FORCEEXT('REP_'+TRANSFORM(m.i,'@L 99'),'xls')
  18139.             EXIT
  18140.         ENDIF
  18141.     ENDFOR
  18142.     IF EMPTY(lcFileName)
  18143.         LOCAL laDir[1,3]
  18144.         ADIR(laDir,'REP_??.'+tcExtension)
  18145.         FOR m.i = 1 TO ALEN(laDir,1)
  18146.             laDir[m.i,3] = DTOS(laDir[m.i,3])
  18147.         ENDFOR
  18148.         ASORT(laDir,3)
  18149.         lcFileName = FORCEEXT(PADR(laDir[1,1],50),'xls')
  18150.     ENDIF
  18151.     lcFileName = FORCEEXT(JUSTFNAME(tcWorkbook),'xls')
  18152. ENDIF
  18153. RETURN lcFileName
  18154. ENDPROC
  18155. PROCEDURE calcnextfilename
  18156. LPARAMETERS tcWorkbook
  18157. LOCAL lcBaseName,lcFileName,i
  18158. lcBaseName = JUSTSTEM(tcWorkbook)
  18159. IF AT(lcBaseName,'_',2) > 0
  18160.     lcBaseName = LEFT(lcBaseName,AT(lcBaseName,'_',2) - 1)
  18161. ENDIF
  18162. lcFileName = ''
  18163. FOR m.i = 1 TO 9
  18164.     IF !FILE(lcBaseName + '_' + TRANSFORM(i,'@L 99') + '.xls')
  18165.         lcFileName = lcBaseName + '_' + TRANSFORM(i,'@L 99') + '.xls'
  18166.         EXIT
  18167.     ENDIF
  18168. ENDFOR
  18169. IF EMPTY(lcFileName)
  18170.     LOCAL laDir[1,3]
  18171.     ADIR(laDir,lcBaseName + '_??' + '.XLS')
  18172.     FOR m.i = 1 TO ALEN(laDir,1)
  18173.         laDir[m.i,3] = DTOS(laDir[m.i,3])
  18174.     ENDFOR
  18175.     ASORT(laDir,3)
  18176.     lcFileName = FORCEEXT(laDir[1,1],'xls')
  18177. ENDIF
  18178. RETURN lcFileName
  18179. ENDPROC
  18180. PROCEDURE xml_names_header
  18181. * 21/06/08 Added
  18182. RETURN '<Names>' + CHR(13) + CHR(10)
  18183. ENDPROC
  18184. PROCEDURE xml_name
  18185. LPARAMETERS tnID
  18186. * 21/06/08 Added
  18187. *  <NamedRange ss:Name="Cajas_Per1" ss:RefersTo="=Sheet1!R10C7"/>
  18188. *  <NamedRange ss:Name="Cajas_Per2" ss:RefersTo="=Sheet1!R10C13"/>
  18189. LOCAL lcRetVal,laItems[1]
  18190. lcRetVal = ''
  18191. *SET STEP ON 
  18192. ALINES(laItems,paNames[tnID],1 + 2,';')
  18193. IF !EMPTY(laItems[1]) AND !EMPTY(laItems[2])
  18194.     lcRetVal = lcRetVal + [  <NamedRange ss:Name="] + ALLTRIM(laItems[1]) ;
  18195.                         + [" ss:RefersTo="] + ALLTRIM(laItems[2]) + ["/>] + CHR(13) + CHR(10)
  18196. ENDIF
  18197. RETURN lcRetVal
  18198. ENDPROC
  18199. PROCEDURE xml_names_footer
  18200. * 21/06/08 Added
  18201. RETURN '</Names>' + CHR(13) + CHR(10)
  18202. ENDPROC
  18203. PROCEDURE outputfromdata
  18204. LPARAMETERS toListener, tcOutputDBF &&, tnWidth, tnHeight
  18205. This.ShowTherm(1)
  18206. IF VARTYPE(toListener) <> "O"
  18207.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  18208.     RETURN
  18209. ENDIF 
  18210. IF EMPTY(toListener.cFRXAlias)
  18211.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  18212.     RETURN
  18213. ENDIF 
  18214. LOCAL lnSelect, lnOrigDataSession
  18215. lnSelect          = SELECT()
  18216. lnOrigDataSession = SET("Datasession")
  18217. * Ensure we are at the correct DataSession
  18218. SET DATASESSION TO (toListener.ListenerDataSession)
  18219. * SET DATASESSION TO (toListener.CurrentDataSession)
  18220. * Generate XLS using the stored information
  18221. This.lDefaultMode = .F.
  18222. * Make a copy of the FRX table and manipulate it
  18223. SELECT * FROM (toListener.cFRXAlias) INTO CURSOR FRXCopy READWRITE 
  18224. SELECT FRXCopy
  18225. This.cFRXalias = "FRXCopy"
  18226. * Initialize class
  18227. * "BeforeReport"
  18228. IF  EMPTY(this.cOutputDBF)
  18229.     this.cOutputDBF = ADDBS(SYS(2023)) + SYS(2015) + '.dbf'
  18230. ENDIF  
  18231. IF EMPTY(this.cOutputAlias)
  18232.     this.cOutputAlias = STRTRAN(JUSTSTEM(this.cOutputDBF), ' ', '_')
  18233. ENDIF
  18234. * Store in Frx.User the number of the band to which each field belongs
  18235. This.CalcBandNumbers()
  18236. * Don't reprint group header on each page (not working yet)
  18237. REPLACE ALL NoRepeat WITH .F. ;
  18238.         FOR objType = 9 AND (ObjCode = 3 OR ObjCode = 5)
  18239. GO TOP
  18240. LOCAL lcRenderAlias
  18241. lcRenderAlias = toListener.cOutputAlias
  18242. LOCAL lnPgFrom, lnPgTo
  18243. lnPgFrom = _goHelper._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  18244. lnPgTo   = IIF(_goHelper._ClausenRangeTo = -1, 999999, _goHelper._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  18245. SELECT FRXRECNO as nFRXRecno, ;
  18246.             RA.LEFT as nLeft, ;
  18247.             TOP as nTop, ;
  18248.             WIDTH as nWidth, ;
  18249.             HEIGHT as nHeight, ;
  18250.             UNCONTENTS as Contents, ;
  18251.             UNCONTENTS as UNContents, ;
  18252.             PAGE as nPageNo ;
  18253.         FROM (lcRenderAlias) RA ;
  18254.         WHERE BETWEEN(Page, lnPgFrom, lnPgTo) ;
  18255.         INTO CURSOR (This.cOutputAlias) ;
  18256.         READWRITE
  18257. INDEX ON nFrxRecno TAG nFrxRecno
  18258. * REPLACE ALL Contents WITH STRCONV(CONTENTS,6 ,1256)
  18259. * Replacing the Render event
  18260. REPLACE ALL Contents WITH ;
  18261.     strt(strt(strt(STRCONV(Contents, 6),'&','&'),'>','>' ),'<','<')
  18262. *!*    SELECT (This.cOutputAlias) 
  18263. *!*    BROWSE
  18264. * Finalize
  18265. This.AfterReport()
  18266. * Clean up
  18267.     USE IN SELECT(This.cOutputAlias)
  18268.     USE IN SELECT(This.cFRXalias)
  18269. CATCH TO loExc
  18270.     SET STEP ON 
  18271. ENDTRY 
  18272. * Restore DataSession and Alias
  18273. SET DATASESSION TO (lnOrigDataSession)
  18274. SELECT (lnSelect)
  18275. This.ShowTherm()
  18276. ENDPROC
  18277. PROCEDURE updateproperties
  18278. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  18279.     RETURN
  18280. ENDIF 
  18281. LOCAL loFP
  18282. loFP = _Screen.oFoxyPreviewer
  18283. IF VARTYPE(This.CommandClauses) = "O"
  18284.     *!*    IF This.CommandClauses.Preview
  18285.     *!*        This.lOpenViewer = .T.
  18286.     *!*    ELSE 
  18287.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  18288.     *!*    ENDIF
  18289.     This.lOpenViewer = This.CommandClauses.Preview
  18290.     IF NOT EMPTY(This.CommandClauses.ToFile)
  18291.         This.TargetFileName = This.CommandClauses.ToFile
  18292.     ELSE 
  18293.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  18294.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  18295.                 EMPTY(This.TargetFileName)
  18296.             LOCAL lcDestFile
  18297.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  18298.             IF NOT "\" $ lcDestFile
  18299.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  18300.             ENDIF
  18301.             This.TargetFileName = lcDestFile
  18302.         ELSE
  18303.             LOCAL lcFile
  18304.             lcFile = This.TargetFileName
  18305.             IF EMPTY(lcFile)
  18306.                 lcFile = PUTFILE("","","xls;xml")
  18307.             ENDIF
  18308.             IF EMPTY(lcFile)
  18309.                 _ReportListener::CancelReport()
  18310.                 * This.CancelReport()
  18311.                 RETURN .F.
  18312.             ENDIF
  18313.             This.TargetFileName = lcFile
  18314.         ENDIF
  18315.     ENDIF 
  18316. ENDIF
  18317. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  18318. IF VARTYPE(This.CommandClauses) = "O"
  18319.     IF This.CommandClauses.Preview
  18320.         This.lOpenViewer = .T.
  18321.     ENDIF 
  18322.     IF NOT EMPTY(This.CommandClauses.ToFile)
  18323.         This.TargetFileName = This.CommandClauses.ToFile
  18324.     ENDIF 
  18325. ENDIF
  18326. ENDPROC
  18327. PROCEDURE topurexlsusingexcel
  18328. LPARAMETERS tcSource, tcDestination
  18329. * File format specific
  18330. * http://support.sas.com/documentation/cdl/en/acpcref/63184/HTML/default/viewer.htm#a003103761.htm
  18331. *!*        Excel 4 files, only one spreadsheet is allowed per file
  18332. *!*        Excel 4, Excel 5, and Excel 95 limits are 256 columns, and 16,384 rows
  18333. *!*        Excel 97, 2000, 2002, 2003 limits are 256 columns, and 65,536 rows
  18334. *!*        Excel 2007 limits are 16,384 columns, and 1,048,576 rows.
  18335. *!*        Excel 95 files are treated as the same format as Excel 5 files.
  18336. *!*        Excel 2000, 2002, and 2003 files with an .xls file extension are treated as the same format as Excel 97 files.
  18337. *!*        Excel 2007 has three different file extensions, .xlsb, .xlsm, and .xlsx.
  18338. *!* See also: http://www.rondebruin.nl/saveas.htm
  18339. #DEFINE xlAddIn         18
  18340. #DEFINE xlCSV            6
  18341. #DEFINE xlCSVMac        22
  18342. #DEFINE xlCSVMSDOS      24
  18343. #DEFINE xlCSVWindows    23
  18344. #DEFINE xlDBF2             7
  18345. #DEFINE xlDBF3             8
  18346. #DEFINE xlDBF4            11
  18347. #DEFINE xlDIF             9
  18348. #DEFINE xlExcel2         16
  18349. #DEFINE xlExcel2FarEast 27
  18350. #DEFINE xlExcel3         29
  18351. #DEFINE xlExcel5         39
  18352. #DEFINE xlExcel7         39
  18353. #DEFINE xlExcel8         56
  18354. #DEFINE xlExcel9795     43
  18355. #DEFINE xlExcel4Workbook    35
  18356. #DEFINE xlIntlAddIn     26
  18357. #DEFINE xlIntlMacro     25
  18358. #DEFINE xlWorkbookNormal -4143
  18359. #DEFINE xlSYLK             2
  18360. #DEFINE xlTemplate        17
  18361. #DEFINE xlCurrentPlatformText -4158
  18362. #DEFINE xlTextMac         19
  18363. #DEFINE xlTextMSDOS     21
  18364. #DEFINE xlTextPrinter   36
  18365. #DEFINE xlTextWindows   20
  18366. #DEFINE xlWJ2WD1         14
  18367. #DEFINE xlWK1             5
  18368. #DEFINE xlWK1ALL         31
  18369. #DEFINE xlWK1FMT         30
  18370. #DEFINE xlWK3             15
  18371. #DEFINE xlWK4             38
  18372. #DEFINE xlWK3FM3         32
  18373. #DEFINE xlWKS             4
  18374. #DEFINE xlWorks2FarEast 28
  18375. #DEFINE xlWQ1             34
  18376. #DEFINE xlWJ3             40
  18377. #DEFINE xlWJ3FJ3         41
  18378. #DEFINE xlUnicodeText   42
  18379. #DEFINE xlHtml             44
  18380. IF EMPTY(tcSource)
  18381.     tcSource = GETFILE("xml", "Spreadsheet file")
  18382. ENDIF
  18383. IF EMPTY(tcSource)
  18384.     RETURN .F.
  18385. ENDIF
  18386. IF EMPTY(tcDestination)
  18387.     tcDestination = FORCEEXT(tcSource, "xls")
  18388. ENDIF
  18389. LOCAL loExcel AS "excel.application"
  18390. LOCAL llReturn AS Logical
  18391.     loExcel = CREATEOBJECT("excel.application")
  18392.     loExcel.AlertBeforeOverwriting = .F.
  18393.     loExcel.DisplayAlerts = .F.
  18394.     * http://msdn.microsoft.com/en-us/library/bb179167(v=office.12).aspx
  18395.     * http://msdn.microsoft.com/en-us/library/bb214129%28v=office.12%29.aspx
  18396.     loExcel.Workbooks.Open(tcSource)
  18397.     loExcel.ActiveWorkbook.SaveAs(tcDestination, This.nExcelSaveFormat) && Excel 97 type
  18398.         && The file format to use when you save the file. 
  18399.         && For a list of valid choices, see the XlFileFormat enumeration. 
  18400.         && For an existing file, the default format is the last file format specified; 
  18401.         && for a new file, the default is the format of the version of Excel being used.
  18402.     loExcel.ActiveWindow.Close(.T.)
  18403.     loExcel.Quit
  18404.     loExcel = NULL
  18405.     llReturn = .T.
  18406. CATCH TO loExc
  18407.     llReturn = .F.
  18408. ENDTRY
  18409. RETURN llReturn
  18410. ENDPROC
  18411. PROCEDURE topurexlsusingoo
  18412. LPARAMETERS tcSource, tcDestination
  18413. IF EMPTY(tcSource)
  18414.     tcSource = GETFILE("xml", "Spreadsheet file")
  18415. ENDIF
  18416. IF EMPTY(tcSource)
  18417.     RETURN
  18418. ENDIF
  18419. IF EMPTY(tcDestination)
  18420.     tcDestination = FORCEEXT(tcSource, "xls")
  18421. ENDIF
  18422. LOCAL llReturn
  18423.     llReturn = PR_OOXML2XLS(tcSource, tcDestination)
  18424. CATCH
  18425.     llReturn = .F.
  18426. ENDTRY
  18427. RETURN llReturn
  18428. ENDPROC
  18429. PROCEDURE showtherm
  18430. LPARAMETERS tnValue, tcText, tcTitle
  18431. IF VARTYPE(_goHelper) = "O"
  18432.     IF NOT _goHelper.lQuietMode
  18433.         IF EMPTY(tnValue)
  18434.             =DoFoxyTherm()
  18435.             RETURN
  18436.         ENDIF
  18437.         IF EMPTY(tcTitle)
  18438.             tcTitle = _goHelper._RunStatusText
  18439.         ENDIF
  18440.         IF EMPTY(tcText)
  18441.             tcText = _goHelper.GetLoc("PLEASEWAIT") + "    " + TRANSFORM(tnValue)+ "%"
  18442.         ENDIF
  18443.         =DoFoxyTherm(tnValue, tcText, tcTitle)
  18444.     ENDIF
  18445. ENDIF
  18446. ENDPROC
  18447. PROCEDURE setfrxdatasession
  18448. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  18449.     RETURN 
  18450. ENDIF
  18451. IF (THIS.FRXDataSession > -1) AND (THIS.FRXDataSession # SET("DATASESSION"))
  18452.    TRY
  18453.       SET DATASESSION TO (THIS.FRXDataSession)
  18454.    CATCH WHEN .T.
  18455.       THIS.ResetToDefault("FRXDataSession")
  18456.       THIS.resetDataSession()
  18457.    ENDTRY
  18458. ENDIF   
  18459. ENDPROC
  18460. PROCEDURE LoadReport
  18461. This.UpdateProperties()
  18462. DODEFAULT()
  18463. ENDPROC
  18464. PROCEDURE AfterReport
  18465. This.ShowTherm(3)
  18466. IF This.lDefaultMode
  18467. * Setup</Row>
  18468.     This.setFRXDataSession()
  18469.     SET SAFETY OFF    && FrxDataSession has safety on
  18470.     SET DELETED ON
  18471. ENDIF
  18472. * Add field to Frx with RECNO()
  18473.     SELECT (This.cFRXalias)
  18474.     ALTER TABLE (This.cFRXalias) ADD COLUMN nRecno N(5)
  18475.     REPLACE ALL nRecno WITH RECNO()
  18476.     INDEX ON nRecno TAG nRECNO
  18477. * Add fields from Frx and other fields to (this.cOutputAlias)
  18478. * 21/06/08 Add <ExcelInsertFormula>, <ExcelNamedCell> and <ExcelNamedRange> options
  18479. *    SELECT 00000 AS ExcelRow,000 AS ExcelCol, ;
  18480.            UPPER(PADR(Expr,100)) AS cExpr,PADR(User,3) AS cUser,PADR(UPPER(Contents),100) AS cContents, ;
  18481.            OA.*, ;
  18482.            00000 AS nExcelColRequest,00000 AS nExcelSpecialColRequest,00000 AS nExcelMergeAcross, ;
  18483.            00000.00 AS nExcelColWidth,SPACE(50) AS cExcelAlignment, ;
  18484.            SPACE(100) AS cExcelBorder,SPACE(100) AS cExcelInterior, ;
  18485.            0 AS nUnderlinedColCount, ;
  18486.            .F. AS lDelete, ;
  18487.            Frx.* ;
  18488.       FROM (this.cOutputAlias) OA ;
  18489.       JOIN Frx ON OA.nFrxRecno = Frx.nRecno ;
  18490.       INTO CURSOR (this.cOutputAlias) READWRITE
  18491. nSecs = SECONDS()
  18492.     LOCAL lcFRXalias
  18493.     lcFRXAlias = This.cFRXalias 
  18494.     SELECT 00000 AS ExcelRow,000 AS ExcelCol, ;
  18495.            UPPER(PADR(Expr,100)) AS cExpr,PADR(User,3) AS cUser,PADR(UPPER(Contents),100) AS cContents, ;
  18496.            OA.*, ;
  18497.            00000 AS nExcelColRequest,00000 AS nExcelSpecialColRequest,00000 AS nExcelMergeAcross, ;
  18498.            00000.00 AS nExcelColWidth,SPACE(50) AS cExcelAlignment, ;
  18499.            SPACE(100) AS cExcelBorder,SPACE(100) AS cExcelInterior, ;
  18500.            SPACE(100) AS cExcelInsertFormula,SPACE(100) AS cExcelNamedRange,SPACE(100) AS cExcelNamedCell, ;
  18501.            0 AS nUnderlinedColCount, ;
  18502.            .F. AS lDelete, ;
  18503.            &lcFRXAlias..* ;
  18504.       FROM (this.cOutputAlias) OA ;
  18505.       JOIN (This.cFRXalias) ON (OA.nFrxRecno = &lcFRXalias..nRecno ;
  18506.             AND NOT INLIST(ObjType, 6, 7, 17)) ; && skip Line, Shape, Picture
  18507.       INTO CURSOR (this.cOutputAlias) READWRITE
  18508.     INDEX ON nFrxRecno TAG nFrxRecno
  18509.     INDEX ON ObjType TAG ObjType ADDITIVE
  18510.     INDEX ON ExcelRow TAG ExcelRow ADDITIVE
  18511.     INDEX ON ExcelCol TAG ExcelCol ADDITIVE
  18512.     INDEX ON nPageNo TAG nPageNo ADDITIVE
  18513.     INDEX ON cExpr TAG cExpr ADDITIVE
  18514.     INDEX ON cUser TAG cUser ADDITIVE
  18515.     INDEX ON TRANSFORM(ExcelRow,'@L 999999') + TRANSFORM(ExcelCol,'@L 999999') TAG RowCol ADDITIVE
  18516.     INDEX ON TRANSFORM(nPageNo,'@L 999999') + TRANSFORM(ExcelRow,'@L 999999') + TRANSFORM(ExcelCol,'@L 999999') ;
  18517.          TAG PagRowCol ADDITIVE
  18518. IF (NOT This.lRepeatHeaders) OR (NOT This.lRepeatFooters)
  18519.     LOCAL lnMinPage, lnMaxPage
  18520.     SELECT MIN(nPageNo), MAX(nPageNo) FROM (this.cOutputAlias) INTO ARRAY laPages
  18521.     lnMinPage = laPages(1)
  18522.     lnMaxPage = laPages(2)
  18523.     * Header = 1
  18524.     * Footer = 7
  18525.     * Eliminate all page headers except from the 1st page
  18526.     IF NOT This.lRepeatHeaders
  18527.         DELETE ALL FOR (cUser = '  1' AND nPageNo > lnMinPage)
  18528.     ENDIF
  18529.     * Eliminate all page headers footers except from the last page
  18530.     IF NOT This.lRepeatFooters
  18531.         DELETE ALL FOR (cUser = '  7' AND nPageNo < lnMaxPage)
  18532.     ENDIF
  18533. ENDIF
  18534. * Ommit Page numbers, because we have a single document
  18535. IF NOT This.lHidePageNo
  18536.     DELETE ALL FOR ("_PAGENO" $ UPPER(EXPR)) 
  18537. ENDIF
  18538. * Eliminate items in bands 0,1,2 if nPage > 1
  18539.     DELETE ALL FOR (cUser < '  3' AND nPageNo > 1) OR ;
  18540.         (EMPTY(cContents) AND INLIST(ObjType, 5, 8)) && Label or Field
  18541. * Determine row height and col width in report (not Excel)
  18542.     PRIVATE pnRowHeight,pnColWidth
  18543.     pnRowHeight  = 120        && Should be calculated
  18544.     SELECT nWidth,COUNT(nWidth) ;
  18545.         FROM (This.cOutputAlias) ;
  18546.         WHERE ObjType = 8 ;
  18547.         GROUP BY 1 ;
  18548.         ORDER BY 2 DESC ;
  18549.         INTO CURSOR Widths
  18550.     pnColWidth = IIF(_TALLY > 0,nWidth,400)
  18551.     SELECT (this.cOutputAlias)
  18552. * Codify report colors as <ExcelInterior>Solid,xxxxxx</ExcelInterior> and store in cExcelInterior
  18553. * 01/01/07 Correction by Andrus Moor, since color columns in frx file can have value -1
  18554. *    REPLACE ALL cExcelInterior WITH 'Solid,';
  18555.                                     + RIGHT(TRANSFORM(RGB(FillRed,FillGreen,FillBlue),'@0'),6) + ',' ;
  18556.                                     + RIGHT(TRANSFORM(RGB(PenRed,PenGreen,PenBlue),'@0'),6) ;
  18557.             FOR FillRed # 255 OR FillGreen # 255 OR FillBlue # 255 ;
  18558.                 OR PenRed # 0 OR PenGreen # 0 OR PenBlue # 0
  18559. *    REPLACE ALL cExcelInterior WITH 'Solid,';
  18560.                                     + RIGHT(TRANSFORM(RGB(FillBlue,FillGreen,FillRed),'@0'),6) + ',' ;
  18561.                                     + RIGHT(TRANSFORM(RGB(PenBlue,PenGreen,PenRed),'@0'),6) ;
  18562.             FOR ( FillRed # 255 OR FillGreen # 255 OR FillBlue # 255 ;
  18563.                  OR PenRed # 0 OR PenGreen # 0 OR PenBlue # 0 ) ;
  18564.                 AND FillRed # -1 AND FillGreen # -1 AND FillBlue #-1 ;
  18565.                 AND PenRed # -1 AND PenGreen # -1 AND PenBlue # -1
  18566. * 2010.01.30 - CChalom: Check if the color of the current field is not default
  18567. * 2010.01.30 - CChalom: Fix the color generation was inverted values
  18568. *!*            * Mode: 0 = Opaque background; 1 = Transparent
  18569. *!*            IF lnMode = 1 && Transparent
  18570. *!*                This._Stat = HPDF_Page_Stroke(.oPage)
  18571. *!*            ELSE && 0 = Opaque
  18572. *!*                This._Stat = HPDF_Page_FillStroke(.oPage)
  18573. *!*            ENDIF 
  18574. SCAN FOR ((FillRed > -1 OR PenRed > -1) AND (Mode = 0))  && Opaque
  18575.     IF (PenRed + PenGreen + PenBlue <> 0) OR ;
  18576.             (FillRed + FillGreen + FillBlue <> 765)
  18577.         REPLACE cExcelInterior WITH ('Solid,' ;
  18578.             + RIGHT(TRANSFORM(RGB(IIF(FillBlue=-1,255,FillBlue), ;
  18579.                 IIF(FillGreen=-1,255,FillGreen), IIF(FillRed=-1,255,FillRed)),'@0'),6) + ',' ;
  18580.             + RIGHT(TRANSFORM(RGB(MAX(PenBlue,0),MAX(PenGreen,0),MAX(PenRed,0)),'@0'),6))
  18581.     ENDIF 
  18582. ENDSCAN 
  18583. * Codify Offset as Horizontal Alignment for fields
  18584. IF This.lAlignLeft 
  18585. ELSE 
  18586.     REPLACE ALL cExcelAlignment WITH IIF(Offset=0,'Horizontal,Left',IIF(Offset=1,'Horizontal,Right','Horizontal,Center')) ;
  18587.             FOR ObjType = 8
  18588. *    REPLACE ALL cExcelAlignment WITH IIF(EMPTY(Picture),'Horizontal,Left',IIF(Picture=["@J"],'Horizontal,Right', ;
  18589.                                          IIF(Picture=["@I"],'Horizontal,Center','Horizontal,Left'))) ;
  18590.             FOR ObjType = 5
  18591.     REPLACE ALL cExcelAlignment WITH 'Horizontal,Left' FOR ObjType = 5 && Label
  18592. ENDIF
  18593. * Run ExcelStyle routine (1 - Before extracting comments)
  18594.     This.ApplyExcelStyle(This.cExcelStyle,1)
  18595. * Developer can indicate properties by placing values in Comment field in this format: <ExcelCol>18</ExcelCol>
  18596. * To get numeric 1 or 0 must write it as 1. or 0., otherwise Fox interprets as .T. / .F.
  18597.     * <ExcelCol>18</ExcelCol>                - Indicates ExcelCol for this and other items with same Left
  18598.     * <ExcelSpecialCol>18</ExcelSpecialCol> - Indicates ExcelCol for one item only
  18599.     * <ExcelNamedRange>Cajas_Per1;=Sheet1!R10C7</ExcelNamedRange> - Indicates NameOfRange,Range, as defined by Excel
  18600.     * <ExcelInsertFormula>=+(RC[-4]+RC[-3]) / Cajas_Per2</ExcelInsertFormula> - Indicates formula to insert
  18601. This.ShowTherm(15)
  18602. nSecs = SECONDS()
  18603.     LOCAL lcComment
  18604.     SCAN FOR !EMPTY(Comment)
  18605.         lcComment = ''
  18606.         TRY
  18607.             lcComment  = '<data> <datos>' + Comment + '</datos> </data>'
  18608.             lcComment  = XMLTOCURSOR(lcComment)
  18609.         CATCH
  18610.         ENDTRY
  18611.         SELECT (this.cOutputAlias)
  18612.         TRY
  18613.             REPLACE nExcelColRequest WITH XMLResult.ExcelCol
  18614.         CATCH
  18615.         ENDTRY
  18616.         TRY
  18617.             REPLACE nExcelSpecialColRequest WITH XMLResult.ExcelSpecialCol
  18618.         CATCH
  18619.         ENDTRY
  18620.         TRY
  18621.             IF (VARTYPE(XMLResult.ExcelDelete) = 'C' AND UPPER(XMLResult.ExcelDelete) = '.T.') ;
  18622.                OR XMLResult.ExcelDelete
  18623.                 DELETE
  18624.             ENDIF
  18625.         CATCH
  18626.         ENDTRY
  18627.         TRY
  18628.             REPLACE nExcelColWidth WITH XMLResult.ExcelColWidth
  18629.         CATCH
  18630.         ENDTRY
  18631.         TRY
  18632.             REPLACE cExcelAlignment WITH XMLResult.ExcelAlignment
  18633.         CATCH
  18634.         ENDTRY
  18635.         TRY
  18636.             REPLACE cExcelAlignment WITH XMLResult.ExcelAlign
  18637.         CATCH
  18638.         ENDTRY
  18639.         TRY
  18640.             REPLACE nExcelMergeAcross WITH XMLResult.ExcelMergeAcross
  18641.         CATCH
  18642.         ENDTRY
  18643.         TRY
  18644.             REPLACE cExcelBorder WITH XMLResult.ExcelBorder
  18645.         CATCH
  18646.         ENDTRY
  18647.         TRY
  18648.             REPLACE cExcelInterior WITH XMLResult.ExcelInterior
  18649.         CATCH
  18650.         ENDTRY
  18651.         TRY
  18652.             REPLACE nExcelUnderlinedColCount WITH XMLResult.ExcelUnderlinedColCount
  18653.         CATCH
  18654.         ENDTRY
  18655. * 21/06/08 Add ExcelInsertFormula, ExcelNamedCell and ExcelNamedRange options
  18656. * cExcelInsertFormula
  18657.         TRY
  18658.             REPLACE cExcelInsertFormula WITH XMLResult.ExcelInsertFormula
  18659.         CATCH
  18660.         ENDTRY
  18661.         TRY
  18662.             REPLACE cExcelNamedRange WITH XMLResult.ExcelNamedRange
  18663.         CATCH
  18664.         ENDTRY
  18665.         TRY
  18666.             REPLACE cExcelNamedCell WITH XMLResult.ExcelNamedCell
  18667.         CATCH
  18668.         ENDTRY
  18669.         TRY
  18670.             USE IN XMLResult
  18671.         CATCH
  18672.         ENDTRY
  18673.     ENDSCAN
  18674. * Run ExcelStyle routine (2 - Before assigning row)
  18675.     This.ApplyExcelStyle(This.cExcelStyle,2)
  18676. * Calc rows ExcelRow
  18677.     * User contains band number
  18678.     SELECT DISTINCT nPageNo,nTop,LEFT(User,3) AS User,0000000 AS ExcelRow ;
  18679.         FROM (this.cOutputAlias) ;
  18680.         INTO CURSOR PageTop READWRITE
  18681.     INDEX ON TRANSFORM(nPageNo,'@L 999999') + TRANSFORM(nTop,'@L 999999') TAG PagTop
  18682.     LOCAL lnLastTop,lnLastRow,lnLastPageNo, llSkipped, lnOldPage, llNewPage
  18683.     lnLastTop     = 0
  18684.     lnLastRow    = 1
  18685.     lnLastPageNo = 1
  18686.     lnOldPage    = 1
  18687.     SCAN
  18688.         * Page header is ignored after page 1
  18689.         llSkipped = .F.
  18690.         llNewPage = .F.
  18691.         * 2010.01.30 - CChalom: Skip one line if new page
  18692.         IF nPageNo > lnOldPage
  18693.             lnOldPage = nPageNo
  18694.             lnLastRow = lnLastRow + 1
  18695.             llNewPage = .T.
  18696.         ENDIF            
  18697.         IF nPageNo > 1 && # lnLastPageNo
  18698.             IF VAL(User) < 3
  18699.                 LOOP
  18700.             ELSE
  18701.                 * If new page adjust last top
  18702.                 lnLastPageNo = nPageNo
  18703.                 IF llNewPage
  18704.                     lnLastTop = nTop - pnRowHeight
  18705.                 ENDIF 
  18706.             ENDIF
  18707.         ENDIF
  18708.         * There may be empty rows above this one
  18709.         DO WHILE nTop > lnLastTop + pnRowHeight
  18710.             lnLastTop = lnLastTop + pnRowHeight
  18711.             lnLastRow = lnLastRow + 1
  18712.             llSkipped = .T.
  18713.         ENDDO
  18714.         * nTop may be so close that is is considered same row
  18715.         IF nTop < lnLastTop + .5 * pnRowHeight
  18716.             * No change in lnLastTop
  18717.         ELSE
  18718.             IF NOT llSkipped && Only if we are already in the page
  18719.                 lnLastRow = lnLastRow + 1
  18720.             ENDIF 
  18721.         ENDIF
  18722.         lnLastTop = nTop
  18723.         REPLACE ExcelRow WITH lnLastRow
  18724.         * WAIT WINDOW NOWAIT 'Calculando renglones...'
  18725.     ENDSCAN
  18726.     SELECT (This.cOutputAlias)
  18727.     SET RELATION TO TRANSFORM(nPageNo,'@L 999999') + TRANSFORM(nTop,'@L 999999') INTO PageTop
  18728.     REPLACE ALL ExcelRow WITH PageTop.ExcelRow
  18729. This.ShowTherm(25)
  18730. * Run ExcelStyle routine (3 - Before assigning col)
  18731.     This.ApplyExcelStyle(This.cExcelStyle,3)
  18732. * Calc cols
  18733.     LOCAL lnLastLeft,lnLastCol,llAssignedCol,lnExcelCol
  18734.     * cParseOrder indicates parsing order for two cells with same nLeft
  18735.     * Parse from report top
  18736. *                    TRANSFORM(100-nExcelColRequest-nExcelSpecialColRequest,'@L 999') AS cParseOrder ;
  18737.     SELECT DISTINCT nLeft,0000000 AS ExcelCol,nExcelColRequest,nExcelSpecialColRequest, ;
  18738.                     '9' AS cParseOrder ;
  18739.             FROM (This.cOutputAlias) ;
  18740.             INTO CURSOR Lefts READWRITE
  18741.     REPLACE ALL cParseOrder WITH '2' ;
  18742.             FOR nExcelColRequest > 0
  18743.     REPLACE ALL cParseOrder WITH '1' ;
  18744.             FOR nExcelSpecialColRequest > 0
  18745.     INDEX ON TRANSFORM(nLeft,'@L 999999') + cParseOrder TAG LefOrd
  18746.     lnLastLeft = 0
  18747.     lnLastCol  = 0
  18748.     LOCAL laCount[1]
  18749.     SCAN
  18750.         IF nLeft = lnLastLeft
  18751. *            DELETE
  18752. *            LOOP
  18753.         ENDIF
  18754.         * WAIT WINDOW NOWAIT 'Calculando columnas...'
  18755.         lnThisLeft      = nLeft
  18756.         llAssignedCol = .F.
  18757.         lnExcelCol      = 0
  18758.         * Lefts.nExcelSpecialColRequest is col request for this item only
  18759.         IF Lefts.nExcelSpecialColRequest > 0
  18760.             * Make sure that requested cell is not occupied
  18761.             lnExcelCol = Lefts.nExcelSpecialColRequest
  18762.             SELECT COUNT(*) ;
  18763.               FROM (this.cOutputAlias) A ;
  18764.               JOIN (this.cOutputAlias) B  ON A.ExcelRow = B.ExcelRow ;
  18765.              WHERE A.ExcelCol = lnExcelCol ;
  18766.                     AND B.ExcelCol = 0 ;
  18767.                     AND B.nLeft = lnThisLeft ;
  18768.                     AND B.nExcelSpecialColRequest = lnExcelCol ;
  18769.               INTO ARRAY laCount
  18770.             IF laCount > 0
  18771.                 * There was a clash.  Don't assign.
  18772.                 * SET STEP ON 
  18773.             ELSE
  18774.                 * Accept request
  18775.                 REPLACE ExcelCol WITH lnExcelCol
  18776.                 REPLACE ALL ExcelCol WITH lnExcelCol ;
  18777.                         FOR nLeft = lnThisLeft ;
  18778.                             AND nExcelSpecialColRequest = lnExcelCol ;
  18779.                          IN (this.cOutputAlias)
  18780.                 LOOP
  18781.             ENDIF
  18782.         ENDIF
  18783.         IF Lefts.nExcelColRequest > 0
  18784.             * Make sure that cell is not occupied
  18785.             lnExcelCol = Lefts.nExcelColRequest
  18786.             SELECT COUNT(*) ;
  18787.               FROM (this.cOutputAlias) A ;
  18788.               JOIN (this.cOutputAlias) B  ON A.ExcelRow = B.ExcelRow ;
  18789.              WHERE A.ExcelCol = lnExcelCol ;
  18790.                     AND B.nLeft = lnThisLeft ;
  18791.               INTO ARRAY laCount
  18792.             IF laCount > 0
  18793.                 * There was a clash.  Don't assign.
  18794.             ELSE
  18795.                 * Accept request
  18796.                 lnLastCol  = MAX(lnExcelCol,lnLastCol)
  18797.                 lnLastLeft = nLeft
  18798.                 REPLACE ExcelCol WITH lnExcelCol
  18799.                 REPLACE ALL ExcelCol WITH lnExcelCol ;
  18800.                         FOR nLeft = lnThisLeft ;
  18801.                             AND EMPTY(ExcelCol) ;
  18802.                          IN (this.cOutputAlias)
  18803.                 LOOP
  18804.             ENDIF
  18805.         ENDIF
  18806.         * Haven't assigned Excel column yet, so do it here
  18807.         * If Left is very close it may be considered same col, except if it causes overlap
  18808.         IF nLeft < lnLastLeft + .75 * pnColWidth AND lnLastCol # 0
  18809.             * Make sure it doesn't cause two fields in same cell
  18810.             SELECT COUNT(*) ;
  18811.               FROM (this.cOutputAlias) A ;
  18812.               JOIN (this.cOutputAlias) B  ON A.ExcelRow = B.ExcelRow ;
  18813.              WHERE A.ExcelCol = lnLastCol ;
  18814.                     AND B.nLeft = lnThisLeft ;
  18815.                     AND EMPTY(B.ExcelCol) ;
  18816.               INTO ARRAY laCount
  18817.             IF laCount > 0
  18818.                 lnLastCol  = lnLastCol + 1
  18819.                 lnLastLeft = nLeft
  18820.             ELSE
  18821.                 * No change either in lnLastCol or lnLastLeft
  18822.             ENDIF
  18823.         ELSE
  18824.             lnLastCol  = lnLastCol + 1
  18825.             lnLastLeft = nLeft
  18826.         ENDIF
  18827.         REPLACE ExcelCol WITH lnLastCol
  18828.         REPLACE ALL ExcelCol WITH lnLastCol ;
  18829.                 FOR nLeft    = lnThisLeft ;
  18830.                     AND EMPTY(ExcelCol) ;
  18831.                  IN (this.cOutputAlias)
  18832.     ENDSCAN
  18833. This.ShowTherm(30)
  18834. nSecs = SECONDS()
  18835. * Calc how many columns exist
  18836.     LOCAL ja[1]
  18837.     SELECT MAX(ExcelCol) ;
  18838.       FROM (this.cOutputAlias) ;
  18839.       INTO ARRAY ja
  18840.     PRIVATE pnMaxCol
  18841.     pnMaxCol = ja
  18842. * Extract ExcelColWidths requested
  18843.     PRIVATE paColData
  18844.     DIMENSION paColData[1,2]
  18845.     lnColData = 0
  18846.     SELECT (this.cOutputAlias)
  18847.     * This could follow the real Width of the fields, but does not provide a good result
  18848.     * REPLACE ALL nexcelcolwidth WITH CEILING(nWidth / 70)
  18849.     SCAN FOR !EMPTY(nExcelColWidth)
  18850.         IF ASCAN(paColData,ExcelCol,1,ALEN(paColData,1),1,8) > 0
  18851.             LOOP
  18852.         ENDIF
  18853.         lnColData = lnColData + 1
  18854.         DIMENSION paColData[lnColData,3]
  18855.         paColData[lnColData,1] = ExcelCol
  18856.         paColData[lnColData,2] = .F.            && AutoFitWidth
  18857.         paColData[lnColData,3] = nExcelColWidth
  18858.     ENDSCAN
  18859. * Run ExcelStyle routine (4 - After assigning row and column)
  18860.     This.ApplyExcelStyle(This.cExcelStyle,4)
  18861.     This.cWorkbookFile = ALLTRIM(This.cWorkbookFile)
  18862.     luWorkbook        = FORCEPATH(This.CalcBaseFileName(This.cWorkbookFile), ;
  18863.                                 IIF(EMPTY(JUSTPATH(This.cWorkbookFile)),FULLPATH(CURDIR()),FULLPATH(JUSTPATH(This.cWorkbookFile))))
  18864.     lcWorkSheetName = IIF(EMPTY(This.cWorksheetName),'Sheet1',This.cWorksheetName)
  18865.     lcOpciones = ''
  18866.     * Erase previous file if not ADDITIVE
  18867.     llEraseOK = .T.
  18868.     IF NOT EMPTY(luWorkbook) AND NOT 'ADDITIVE' $ lcOpciones AND FILE(luWorkbook)
  18869.         * Erase inside TRY/CATCH because it may be in use
  18870.         TRY
  18871.             ERASE (luWorkbook)
  18872.         CATCH
  18873.             * Couldn't erase file, so leave a workbook open without saving
  18874.             * WAIT WINDOW NOWAIT 'No pude borrar copia anterior de ' + luWorkbook
  18875.             llEraseOK = .F.
  18876.         ENDTRY
  18877.     ENDIF
  18878.     IF !llEraseOK
  18879.         luWorkbook = FORCEPATH(This.CalcNextFileName(luWorkbook),FULLPATH(CURDIR()))
  18880.         IF NOT EMPTY(luWorkbook) AND NOT 'ADDITIVE' $ lcOpciones AND FILE(luWorkbook)
  18881.             * Erase inside TRY/CATCH because it may be in use
  18882.             TRY
  18883.                 ERASE (luWorkbook)
  18884.             CATCH
  18885.                 * Couldn't erase file, so leave a workbook open without saving
  18886.                 * WAIT WINDOW NOWAIT 'No pude borrar copia anterior de ' + luWorkbook
  18887.                 llEraseOK = .F.
  18888.             ENDTRY
  18889.         ENDIF
  18890.     ENDIF
  18891. * Place data in Excel by writing file in XML format
  18892.     DIMENSION paStyles[1,10]        && Array to save styles
  18893.     * Column1  = Key
  18894.     * Column2  = FontFace
  18895.     * Column3  = FontSize
  18896.     * Column4  = FontStyle
  18897.     * Column5  = DataType
  18898.     * Column6  = NumberFormat
  18899.     * Column7  = HorizontalAlignment
  18900.     * Column8  = Borders
  18901.     * Column9  = Colors
  18902.     * Key = PADR(FontFace,20)+TRAN(FontSize,'99') + PADR(DataType,10) + PADR(NumberFormat,20)
  18903.     SELECT FontFace,FontSize,FontStyle ;
  18904.         FROM (This.cFRXalias) ;    && (this.cOutputAlias) does not contain ObjType = 1 AND ObjCode = 53
  18905.         WHERE Platform = 'WINDOWS ' ;
  18906.             AND ObjType = 1 AND ObjCode = 53 ;
  18907.         INTO ARRAY ja
  18908.     paStyles[1,2]  = IIF(EMPTY(ja[1]),'Lucida Console',ja[1])
  18909.     paStyles[1,3]  = IIF(EMPTY(ja[2]),10,MIN(ja[2] + 3,10))    && 3 points larger that in report up to 10
  18910.     paStyles[1,4]  = ja[3]
  18911.     paStyles[1,5]  = ''
  18912.     paStyles[1,6]  = ''
  18913.     paStyles[1,7]  = '' && Alignment
  18914.     paStyles[1,8]  = ''    && Border
  18915.     paStyles[1,9]  = ''    && Colors
  18916.     paStyles[1,1]  = UPPER(PADR(paStyles[1,2],20)+TRAN(paStyles[1,3],'99')+TRAN(paStyles[1,4],'99') ;
  18917.         + PADR(paStyles[1,5],10) + PADR(paStyles[1,6],20)) + PADR(paStyles[1,7],30) ;
  18918.         + PADR(paStyles[1,8],50) + PADR(paStyles[1,9],50)
  18919.     * Create styles array and XML for table items
  18920.     LOCAL lcXmlTable,lcCRLF,lnLastRow
  18921.     lcXmlTable = This.xml_Table_Header()
  18922.     lcCRLF       = CHR(13)+CHR(10)
  18923.     lnLastRow  = 0
  18924.     SELECT (This.cOutputAlias)
  18925.     SET ORDER TO RowCol
  18926.     LOCAL liLastRow, liLastCol, liCurrRow, liCurrCol, liRec
  18927.     STORE 0 TO liLastRow, liLastCol, liCurrRow, liCurrCol
  18928.     SCAN
  18929.         liRec     = RECNO()
  18930.         liCurrRow = ExcelRow
  18931.         liCurrCol = ExcelCol
  18932.         IF liCurrRow = liLastRow AND liCurrCol = liLastCol && 2 elements in the same cell
  18933.             IF liRec > 1
  18934.                 SKIP -1
  18935.                 lcPrevContents = Contents
  18936.                 DELETE 
  18937.                 SKIP + 1
  18938.                 REPLACE Contents WITH (ALLTRIM(lcPrevContents) + " / " + Contents)
  18939.             ENDIF
  18940.         ENDIF             
  18941.         liLastRow = ExcelRow
  18942.         liLastCol = ExcelCol
  18943.     ENDSCAN
  18944.     LOCAL llIncomplete
  18945.     llIncomplete = liLastRow > 65530
  18946. *MESSAGEBOX("Step 6 - " + TRANSFORM(SECONDS() - nSecs))
  18947. nSecs = SECONDS()
  18948. This.ShowTherm(40)
  18949. LOCAL lnRecs, ln12, ln25, ln37, ln50, ln62, ln75, ln87, ln100
  18950. lnRecs = RECCOUNT()
  18951. ln25 = INT(lnRecs/4)
  18952. ln12 = INT(ln25/2)
  18953. ln37 = ln25 + ln12
  18954. ln50 = INT(lnrecs/2)
  18955. ln62 = ln50 + ln12
  18956. ln75 = ln25 + ln50
  18957. ln87 = ln75 + ln12
  18958.     SCAN FOR NOT DELETED()
  18959.         * WAIT WINDOW NOWAIT 'Preparando para guardar... (' + TRANSFORM(ExcelRow) + ',' + TRANSFORM(ExcelCol) + ')'
  18960.         * If ExcelRow = 0 element belongs to page header of later page
  18961.         IF ExcelRow = 0 OR ExcelRow > 65530
  18962.             LOOP
  18963.         ENDIF
  18964.         * If new row, close last row (if open) and open new.
  18965.         IF lnLastRow # ExcelRow
  18966.             IF lnLastRow # 0
  18967.                 lcXmlTable = lcXmlTable + This.Xml_Row_Footer()
  18968.             ENDIF
  18969.             lnLastRow = ExcelRow
  18970.             lcXmlTable = lcXmlTable + This.Xml_Row_Header()
  18971.         ENDIF
  18972.         lnStyleNumber = This.Xml_StyleNumber(Contents)
  18973.         lcXmlTable      = lcXmlTable + This.Xml_Cell(Contents, UNCONTENTS, lnStyleNumber) && 2011-12-29 Passing the Unicode as well
  18974.         IF RECNO() = ln12
  18975.             This.ShowTherm(48)
  18976.         ENDIF 
  18977.         IF RECNO() = ln25
  18978.             This.ShowTherm(55)
  18979.         ENDIF 
  18980.         IF RECNO() = ln37
  18981.             This.ShowTherm(62)
  18982.         ENDIF 
  18983.         IF RECNO() = ln50
  18984.             This.ShowTherm(70)
  18985.         ENDIF 
  18986.         IF RECNO() = ln62
  18987.             This.ShowTherm(77)
  18988.         ENDIF 
  18989.         IF RECNO() = ln75
  18990.             This.ShowTherm(85)
  18991.         ENDIF 
  18992.         IF RECNO() = ln87
  18993.             This.ShowTherm(92)
  18994.         ENDIF 
  18995.     ENDSCAN
  18996.     This.ShowTherm(97)
  18997.     lcXmlTable = lcXmlTable + This.Xml_Row_Footer()
  18998.     lcXmlTable = lcXmlTable + This.xml_Table_Footer()
  18999.     LOCAL lcXML
  19000.     lcXML = This.Xml_File_Header()
  19001.     lcXML = lcXML + This.Xml_Workbook_Header()
  19002.     lcXML = lcXML + This.Xml_Styles_Header()
  19003.     FOR m.i = 21 TO 20 + ALEN(paStyles,1)
  19004.         lcXML = lcXML + This.Xml_Style(m.i)
  19005.     ENDFOR
  19006.     lcXML = lcXML + This.Xml_Styles_Footer()
  19007. * 21/06/08 Adding NamedRange(s)
  19008. *<ExcelNamedRange>Cajas_Per2,=Sheet1!R10C13</ExcelNamedRange>
  19009.     DIMENSION paNames[1]        && Array to save NamedRanges
  19010.     paNames = ''
  19011.     SELECT DISTINCT cExcelNamedRange ;
  19012.         FROM (this.cOutputAlias) ;
  19013.         WHERE !EMPTY(cExcelNamedRange) ;
  19014.         INTO ARRAY paNames
  19015.     IF !EMPTY(paNames)
  19016.         lcXML = lcXML + This.Xml_Names_Header()
  19017.         FOR m.i = 1 TO ALEN(paNames,1)
  19018.             lcXML = lcXML + This.Xml_Name(m.i)
  19019.         ENDFOR
  19020.         lcXML = lcXML + This.Xml_Names_Footer()
  19021.     ENDIF
  19022.     lcXML = lcXML + This.Xml_Worksheet_Header(lcWorkSheetName)
  19023. * Since we finished processing, now it's nice to set the StrictDate back to the original
  19024. SET STRICTDATE TO (This.SetStrictDate)
  19025. LOCAL lcTempFile, lnHandle
  19026. lcTempFile = ADDBS(GETENV("TEMP")) + "FP_" + SYS(2015) + ".XML"
  19027. lnHandle = FCREATE(lcTempFile)
  19028. IF lnHandle <= 0
  19029.     =MESSAGEBOX("Error creating file: " + lcTempFile, "Error")
  19030.     RETURN
  19031. ENDIF
  19032. =FPUTS(lnHandle, lcXML)
  19033. *    lcXML = lcXML + lcXmlTable
  19034. =FPUTS(lnHandle, lcXMLTable)
  19035. *    lcXML = lcXML + This.Xml_Worksheet_Footer()
  19036. =FPUTS(lnHandle, This.Xml_Worksheet_Footer())
  19037. *    lcXML = lcXML + This.Xml_Workbook_Footer()
  19038. =FPUTS(lnHandle, This.Xml_Workbook_Footer())
  19039.     This.ShowTherm(99)
  19040.     LOCAL llSaved
  19041.     llSaved = FCLOSE(lnHandle)
  19042.     * Check if we need to convert to UTF-8
  19043.     IF This.lConvertToUTF8
  19044.         TRY 
  19045.             LOCAL lcXMLWks, lcOldSetSafe
  19046.             lcXMLWKS = FILETOSTR(lcTempFile)
  19047.             lcOldSetSafe = SET("Safety")
  19048.             SET SAFETY OFF 
  19049.             =STRTOFILE(STRCONV(lcXMLWKS,9) , lcTempFile, 4)
  19050.             SET SAFETY &lcOldSetSafe.
  19051.         CATCH 
  19052.         ENDTRY
  19053.     ENDIF
  19054.     * Save sheet
  19055.     IF NOT EMPTY(This.TargetFileName)
  19056.         This.cWorkbookFile = This.TargetFileName
  19057.     ENDIF
  19058.     IF (UPPER(JUSTEXT(This.cWorkbookFile)) = "XML") OR ;
  19059.             (NOT This.lConvertToXLS)
  19060.         llSaved = .F.
  19061.         TRY 
  19062.             RENAME (lcTempFile) TO (This.cWorkbookFile)
  19063.             * llSaved = (STRTOFILE(lcXml, This.cWorkbookFile)) > 0
  19064.             INKEY(.1)
  19065.             llSaved = .T.
  19066.         CATCH 
  19067.         ENDTRY
  19068.     ELSE
  19069. *!*            LOCAL lcTempFile
  19070. *!*            lcTempFile = ADDBS(GETENV("TEMP")) + "FP_" + SYS(2015) + ".XML"
  19071. *!*            llSaved = (STRTOFILE(lcXml, lcTempFile)) > 0
  19072.         This.ShowTherm(100, IIF(VARTYPE(_goHelper)="O", _goHelper.GetLoc("xlConv2xls"), ""))
  19073.         INKEY(.1)
  19074.         IF llSaved
  19075.             llSaved = .F.
  19076.             llSaved = This.ToPureXLSUsingExcel(lcTempFile, This.cWorkbookFile) && 1st try, using Excel automation
  19077.             IF NOT llSaved
  19078.                 llSaved = This.ToPureXLSUsingOO(lcTempFile, This.cWorkbookFile) && 2nd try, using OpenOffice automation
  19079.             ENDIF
  19080.             IF NOT llSaved && If we didnt manage to use Excel or OO automation to convert, then 
  19081.                            && we'll keep it as XML
  19082.                 TRY 
  19083.                     RENAME (lcTempFile) TO (This.cWorkbookFile)
  19084.                     llSaved = .T.
  19085.                 CATCH 
  19086.                     llSaved = (STRTOFILE(FILETOSTR(lcTempFile), This.cWorkbookFile)) > 0
  19087.                 ENDTRY
  19088.                 INKEY(.1)
  19089.             ENDIF
  19090.             * Erase the temp file
  19091.             IF FILE(lcTempFile)
  19092.                 TRY 
  19093.                     ERASE (lcTempFile)
  19094.                 CATCH
  19095.                 ENDTRY 
  19096.             ENDIF 
  19097.         ENDIF
  19098.     ENDIF
  19099.     IF llSaved
  19100.         IF This.lObjTypeMode
  19101.             _Screen.oFoxyPreviewer.lSaved = llSaved
  19102.         ENDIF
  19103.         IF This.lOpenViewer AND NOT EMPTY(This.TargetFileName)
  19104.             This.ShellExec(This.TargetFileName)
  19105.         ENDIF
  19106.     ENDIF 
  19107.     IF llIncomplete 
  19108.         IF VARTYPE(_goHelper) <> "O"
  19109.             MESSAGEBOX("Report is too big to be exported to the Excel format." + CHR(13) + ;
  19110.                 "Please revise the created document because it will be incomplete!", 48, "Attention")
  19111.         ELSE 
  19112.             MESSAGEBOX(_goHelper.GetLoc("XLTOOBIG"), 48, _goHelper.GetLoc("ATTENTION"))
  19113.         ENDIF 
  19114.     ENDIF
  19115. IF This.lDefaultMode 
  19116.     THIS.setCurrentDataSession()
  19117.     DODEFAULT()
  19118. ENDIF
  19119. * Delete the temporary copy of the FRX we created
  19120. IF This.lObjTypeMode
  19121.     USE IN SELECT(This.cFRXalias)
  19122.     TRY 
  19123.         DELETE FILE (This.cTempFRX)
  19124.     CATCH
  19125.     ENDTRY
  19126. ENDIF
  19127.     USE IN SELECT("LEFTS")
  19128.     USE IN SELECT("PAGETOP")
  19129. CATCH
  19130. ENDTRY
  19131. ENDPROC
  19132. PROCEDURE Init
  19133. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  19134. declare integer GetDC         in WIN32API integer hWnd
  19135. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  19136. DECLARE INTEGER GetWindowDC      IN WIN32API INTEGER hwnd
  19137. DODEFAULT()
  19138. * 2010/08/08 Fix by Jaketon / CChalom, when set point = ","
  19139. * I needed to store the original settings because the ReportListener class
  19140. * changes the settings during run
  19141. This.AddProperty("SetSeparator", SET("Separator"))
  19142. This.AddProperty("SetPoint", SET("Point"))
  19143. This.AddProperty("SetDate", SET("Date"))
  19144. This.AddProperty("SetDateAnsi", INLIST(SET("Date"),"ANSI","GERMAN"))
  19145. This.AddProperty("lConvertToXLS" , .T.)
  19146. This.AddProperty("lRepeatHeaders", .T.)
  19147. This.AddProperty("lRepeatFooters", .T.)
  19148. This.AddProperty("lHidePageNo"   , .F.)
  19149. This.AddProperty("lUseUnicode"   , .F.) && 2011-12-29
  19150. This.AddProperty("lConvertToUTF8", .F.) && 2011-12-31
  19151. * Developer can indicate properties by placing values in Comment field in this format: <ExcelCol>18</ExcelCol>
  19152. * To get numeric 1 or 0 must write it as 1. or 0., otherwise Fox interprets as .T. / .F.
  19153.     * <ExcelCol>18</ExcelCol>                - Indicates ExcelCol for this and other items with same Left
  19154.     * <ExcelSpecialCol>18</ExcelSpecialCol> - Indicates ExcelCol for one item only
  19155.     * <ExcelNamedRange>Cajas_Per1;=Sheet1!R10C7</ExcelNamedRange> - Indicates NameOfRange,Range, as defined by Excel
  19156.     * <ExcelInsertFormula>=+(RC[-4]+RC[-3]) / Cajas_Per2</ExcelInsertFormula> - Indicates formula to insert
  19157. *!* ExcelBorders format: <ExcelBorders>Top,Single,1;Bottom,Double,3</ExcelBorders>
  19158. *!*       <Borders>
  19159. *!*        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
  19160. *!*        <Border ss:Position="Bottom" ss:LineStyle="Double" ss:Weight="3"/>
  19161. *!*       </Borders>
  19162. * Codify report colors as <ExcelInterior>Solid,xxxxxx</ExcelInterior> and store in cExcelInterior
  19163. *!* Interior properties.
  19164. *!*        Color         = Background Color
  19165. *!*        Pattern         = "Solid" --> no pattern, "Gray125", "ThinVert ss:Pattern="Solid"Stripe"
  19166. *!*        PatternColor
  19167. *!* Samples:
  19168. *!*    <ExcelInterior>Solid,FFFF00</ExcelInterior>
  19169. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="Gray125"/>
  19170. *!*    <ExcelInterior>Gray125,FFFFFF,000000</ExcelInterior>
  19171. *!*        <Interior ss:Color="#FFFFFF" ss:Pattern="Gray125" ss:PatternColor="#000000"/>
  19172. *!*    <ExcelInterior>ThinVertStripe,FFFF00,00FF00</ExcelInterior>
  19173. *!*        <Interior ss:Color="#FFFF00" ss:Pattern="ThinVertStripe" ss:PatternColor="#00FF00"/>
  19174. *<ExcelNamedRange>Cajas_Per2,=Sheet1!R10C13</ExcelNamedRange>
  19175. ENDPROC
  19176. PROCEDURE BeforeReport
  19177. * Code is inspired by Dorin Valisescu's CursorListener
  19178. IF This.lDefaultMode OR This.lObjTypeMode
  19179.     DODEFAULT()
  19180. ENDIF 
  19181. IF this.lOutputToCursor
  19182.     IF  EMPTY(this.cOutputDBF)
  19183.         this.cOutputDBF = ADDBS(SYS(2023)) + SYS(2015) + '.dbf'
  19184.     ENDIF  
  19185.     IF EMPTY(this.cOutputAlias)
  19186.         this.cOutputAlias = STRTRAN(JUSTSTEM(this.cOutputDBF), ' ', '_')
  19187.     ENDIF
  19188.     This.setFRXDataSession()
  19189.     IF This.lObjTypeMode
  19190.         * Make a copy of the FRX table and manipulate it
  19191.         This.cTempFRX = ADDBS(SYS(2023)) + "FRX_" + SYS(2015) + '.dbf'
  19192.         This.cFRXalias = "CopyFRX"
  19193.         SELECT FRX
  19194.         COPY TO (This.cTempFRX)
  19195.         USE (This.cTempFRX) SHARED AGAIN IN 0 ALIAS (This.cFRXalias)
  19196.     ENDIF
  19197.     * Store in Frx.User the number of the band to which each field belongs
  19198.     This.CalcBandNumbers()
  19199.     * Don't reprint group header on each page (not working yet)
  19200.     REPLACE ALL NoRepeat WITH .F. ;
  19201.             FOR objType = 9 AND (ObjCode = 3 OR ObjCode = 5)
  19202.     GO TOP
  19203.     CREATE CURSOR (this.cOutputAlias) (nFrxRecno N(4,0),nLeft I, nTop I, nWidth I, nHeight I, ;
  19204.                                        Contents M NOCPTRANS, UNCONTENTS M NOCPTRANS, nPageNo I)
  19205.     INDEX ON nFrxRecno TAG nFrxRecno
  19206. ENDIF 
  19207. THIS.setCurrentDataSession()
  19208. This.SetDate = SET("Date")
  19209. This.SetStrictDate = SET("Strictdate")
  19210. SET STRICTDATE TO 0
  19211. ENDPROC
  19212. PROCEDURE Render
  19213. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  19214. * From PDFx by Luis Navas 
  19215. * Code to detect if report will run twice because of use of _PAGETOTAL 
  19216. If This.TwoPassProcess And This.CurrentPass=0 Then 
  19217.     NODEFAULT 
  19218.     RETURN 
  19219. EndIf 
  19220. IF this.lOutputToCursor  
  19221.     LOCAL cContents
  19222.     WITH this
  19223.         IF EMPTY(cContentsToBeRendered)
  19224.             cContents = ''
  19225.         ELSE 
  19226. * 01/01/07 Correction by Andus Moor: Created XML file caused encoding error for some data
  19227. *            cContents = STRCONV(cContentsToBeRendered, 6)
  19228. * 02/01/07 Second conversion by Andrus Moor
  19229. *            cContents = STRCONV(strt(strt(strt(cContentsToBeRendered,'&','&'),'>','>' ),'<','<'),9)
  19230. *            cContents = STRCONV(strt(strt(strt(cContentsToBeRendered,'&','&'),'>','>' ),'<','<'),6)
  19231. * 14/06/10 Fix by CChalom
  19232. * Need first to convert the contents before converting to HTML tags
  19233.             LOCAL lcTmpContent
  19234.             lcTmpContent = STRCONV(cContentsToBeRendered, 6)
  19235.             cContents = strt(strt(strt(lcTmpContent,'&','&'),'>','>' ),'<','<')
  19236.         ENDIF
  19237.         This.setFRXDataSession()
  19238.         IF NOT EMPTY(cContents)
  19239.             INSERT INTO (.cOutputAlias) (nFrxRecno, nLeft, nTop, nWidth, nHeight, Contents, UNCONTENTS, nPageNo) ;
  19240.                              VALUES (m.nFrxRecno,m.nLeft,m.nTop,m.nWidth,m.nHeight,m.cContents, m.cContentsToBeRendered, .PageNo)
  19241.         ENDIF 
  19242.         this.setCurrentDataSession() 
  19243.         SELECT (this.drivingAlias)
  19244.     ENDWITH 
  19245. ENDIF 
  19246. DODEFAULT(nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)
  19247. ENDPROC
  19248. PROCEDURE Destroy
  19249. * 02/10/06 Alex. This code was in Dorin's cursorListener.
  19250. * It is not necessary because we keep directory table in FrxDatasession which doesn't exist.
  19251. *this.resetDataSession()
  19252. *IF USED(this.cOutputAlias)
  19253. *    USE IN (this.cOutputAlias)
  19254. *ENDIF
  19255. DODEFAULT()
  19256. ENDPROC
  19257. PROCEDURE DoStatus
  19258. LPARAMETERS cMessage
  19259. RETURN
  19260. * This code comes from, Dorin's to use Carlos Alloati's therm
  19261. LOCAL loParentForm, lcCaption, lcParentFormName
  19262. NODEFAULT
  19263. IF (NOT (THIS.QuietMode or ;
  19264.     (THIS.IsRunning AND THIS.CommandClauses.NoDialog)))
  19265.     IF this.nlastpercent <> CEILING(this.percentDone*100)
  19266.         this.nlastpercent = CEILING(this.percentDone*100)
  19267.     ELSE
  19268.         RETURN 
  19269.     ENDIF
  19270.     IF EMPTY(cMessage) OR ISNULL(cMessage)
  19271.         cMessage = ""
  19272.     ENDIF
  19273.     lcCaption = EVALUATE(THIS.ThermCaption)
  19274.     IF ((NOT ISNULL(THIS.ThermForm)) OR (THIS.CreateTherm()) )
  19275.         WITH THIS.ThermForm
  19276.             IF THIS.IsRunning
  19277.                 .Closable = .F.
  19278.                 .Movable = .F.
  19279.             ENDIF
  19280.             .Therm.Value = CEILING(THIS.PercentDone * 100)
  19281.             .ThermLabel.Caption = lcCaption
  19282.             IF NOT .Visible
  19283.                 loParentForm = THIS.GetParentWindowRef()
  19284.                 DO CASE
  19285.                     CASE VARTYPE(loParentForm) # "O" AND (NOT _SCREEN.Visible)
  19286.                         lcParentFormName = "MACDESKTOP"
  19287.                     CASE VARTYPE(loParentForm) # "O"
  19288.                         lcParentFormName = "SCREEN"
  19289.                     CASE (NOT loParentForm.Visible) AND ;
  19290.                         (loParentForm.DeskTop OR NOT EMPTY(loParentForm.MacDesktop) OR ;
  19291.                         loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  19292.                         * in many cases,
  19293.                         * they've probably made a programming error,
  19294.                         * the parent should be visible according to
  19295.                         * the requirements of REPORT FORM ... IN WINDOW
  19296.                         * if it's a WINDOW clause they
  19297.                         * have no need to show it, might not be an error
  19298.                         * Either way, they should see the therm
  19299.                         * to know that the report is progressing
  19300.                         lcParentFormName = "MACDESKTOP"
  19301.                     CASE (NOT loParentForm.Visible)
  19302.                         * same comment as above
  19303.                         lcParentFormName = "SCREEN"
  19304.                     OTHERWISE
  19305.                         lcParentFormName = loParentForm.Name
  19306.                 ENDCASE
  19307.                 SHOW WINDOW (.Name) IN WINDOW (lcParentFormName)
  19308.                 .AlwaysOnTop = .T.
  19309.                 .AutoCenter = .T.
  19310.                 .Visible = .T.
  19311.             ENDIF
  19312.         ENDWITH
  19313.     ENDIF
  19314. ENDIF
  19315. ENDPROC
  19316. PROCEDURE setfrxdatasessionenvironment
  19317. NODEFAULT 
  19318. THIS.setFRXDataSession()
  19319. SET SEPARATOR TO (This.SetSeparator)
  19320. SET POINT TO (This.SetPoint)
  19321. SET TALK OFF 
  19322. ENDPROC
  19323. reportlistener
  19324. pr_reportlistener.vcx
  19325. 0FRXDataSession = -1
  19326. coutputalias = 
  19327. coutputdbf = 
  19328. loutputtocursor = .T.
  19329. closeondeactivate = .T.
  19330. nlastpercent = 0
  19331. cworkbookfile = 
  19332. cworksheetname = 
  19333. applyexcelstyleprogram = 
  19334. cexcelstyle = 
  19335. waitfornextreport = .F.
  19336. ldefaultmode = .T.
  19337. cfrxalias = FRX
  19338. lobjtypemode = .F.
  19339. targetfilename = 
  19340. lopenviewer = .F.
  19341. ccodepage = 
  19342. ctempfrx = 
  19343. lalignleft = .F.
  19344. nexcelsaveformat = 43
  19345. setstrictdate = 0
  19346. _memberdata = 
  19347.      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
  19348. Name = "excellistener"
  19349. cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5cI5
  19350. cI5 |>
  19351. ]4[}_
  19352. Z!p:l
  19353. Z&|9'g1
  19354. dJ6dJ6dJ6f
  19355. PLATFORM
  19356. UNIQUEID
  19357. TIMESTAMP
  19358. CLASS
  19359. CLASSLOC
  19360. BASECLASS
  19361. OBJNAME
  19362. PARENT
  19363. PROPERTIES
  19364. PROTECTED
  19365. METHODS
  19366. OBJCODE
  19367. RESERVED1
  19368. RESERVED2
  19369. RESERVED3
  19370. RESERVED4
  19371. RESERVED5
  19372. RESERVED6
  19373. RESERVED7
  19374. RESERVED8
  19375.  COMMENT Class               
  19376.  WINDOWS _18Q0OF4291061424627v
  19377.  COMMENT RESERVED            
  19378.  WINDOWS _16V109SEN1061424706
  19379.  COMMENT RESERVED            
  19380. VERSION =   3.00
  19381.     frxcursor
  19382. Pixels
  19383. _frxcursor.h
  19384. foxpro_reporting.h
  19385. Pixels
  19386. _frxcursor.h
  19387. foxpro_reporting.h
  19388. _frxcursor.h
  19389. resettextmerge
  19390. frxdevicehelper
  19391. _frxcursor.h
  19392. This class knows how to read printer environment information. Usage:
  19393.    x = NEWOBJECT( "frxDeviceHelper" ) 
  19394.    IF x.LoadDeviceInfo( cDRIVER, cDEVICE, frx.TAG2 )
  19395.        ? x.DpiX
  19396.        ? x.DpiY
  19397.        :
  19398.       etc
  19399. Class
  19400. gProvides methods to translate and manipulate various values in label  and report tables (LBXs and FRXs)
  19401. custom
  19402. frxdevicehelper
  19403. ~dpix Logical pixels-per-inch in the X dimension
  19404. dpiy Logical pixels-per-inch in the Y dimension
  19405. offsetx Physical printable page left margin
  19406. offsety Physical printable page top margin
  19407. actualx Physical width of page in device units
  19408. actualy Physical length of page in device units
  19409. mmx Horizontal page size in millimeters
  19410. mmy Vertical page size in millimeters
  19411. printablex Horizontal page width in pixels
  19412. printabley Vertical page length in pixels
  19413. _memberdata XML Metadata for customizable properties
  19414. orientation 0=Portrait, 1=Landscape
  19415. errormessage Occurs when the Valid event returns false (.F.), and provides a means to display an error message.
  19416. *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.
  19417. *loadfromfrx Loads printer device parameters from an FRX cursor header record. Restores recno and selected alias. Params: [ cFrxAlias ] (assumes "frx" if none specified.)
  19418. *loadfromstrings Loads printer device parameters from string variables. Params: cExpr, cTag
  19419. *loadfromhdc 
  19420. PRINTER
  19421. Unable to create device context. CreateIC() returned 0.
  19422. LCDRIVER
  19423. LCDEVICE    
  19424. LCDEVMODE
  19425. ERRORMESSAGE
  19426. LRETVAL
  19427. VRESULT
  19428. CREATEIC
  19429. LOADFROMHDC
  19430. DELETEDC
  19431. MESSAGE-
  19432. WINDOWS
  19433. LCFRXALIAS
  19434. ERRORMESSAGE
  19435. CURSEL
  19436. CURREC
  19437. LRETVAL
  19438. PLATFORM
  19439. OBJTYPE
  19440. OBJCODE
  19441. LOADFROMSTRINGS
  19442. TAG26
  19443. DRIVER=
  19444. DEVICE=
  19445. TCEXPR
  19446. TCTAG2
  19447. CLINE
  19448. CDRIVER
  19449. LDRIVER
  19450. CDEVICE
  19451. LDEVICE
  19452. LOADDEVICEINFO
  19453. TIHDC
  19454. GETDEVICECAPS
  19455. OFFSETX
  19456. OFFSETY
  19457. PRINTABLEX
  19458. PRINTABLEY
  19459. ACTUALX
  19460. ACTUALY
  19461. GetLastError
  19462. win32api
  19463. SetLastError
  19464. win32api
  19465. CreateIC
  19466. gdi32
  19467. GetDeviceCaps
  19468. gdi32
  19469. DeleteDC
  19470. gdi32
  19471. GETLASTERROR
  19472. WIN32API
  19473. SETLASTERROR
  19474. CREATEIC
  19475. GDI32
  19476. GETDEVICECAPS
  19477. DELETEDC
  19478. loaddeviceinfo,
  19479. loadfromfrx
  19480. loadfromstrings
  19481. loadfromhdcO
  19482. custom
  19483. Class
  19484. custom
  19485.     frxcursor
  19486. screendpi Contains the working DPI of the ReportDesigner.  Currently hard-coded to 96.
  19487. _memberdata XML Metadata for customizable properties
  19488. quietmode Allows runtime users of frxCursor to specify whether the class displays error messages and other user feedback.
  19489. *inttobinstring Returns a string of bytes, the binary version of a given integer.
  19490. *binstringtoint Returns a numeric equivalent of a given binary number given in byte string form.
  19491. *hasprotectionflag Returns .T. if the given binary data contains a specific bit set. Parameters: cBytes, iBit
  19492. *frutopixels Returns the pixel value of a given measurement in FRUs.
  19493. *pixelstofru Returns the FRU value of a given measurement in pixels.
  19494. *getfrutextwidth Returns the width of a given string in FRUs. Parameters: cText, cTypeface, iSize [, cStyle ]
  19495. *getfrutextheight Reutrns the height of a given string in FRUs. Parameters: cText, cTypeface, iSize [, cStyle ]
  19496. *gorec Restores record pointer with bounds checking. Parameters: i, cAlias
  19497. *getreportattribute Returns the value of a given report/header attribute. The FRX cursor must be open. Parameters: cToken [, iAlternate]
  19498. *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]
  19499. *hasband Returns .T. if the report has the specified band type. Calls .createBandCursor() if necessary. Parameters: iObjCode
  19500. *hasdetailheader Returns .T. if the specified detail band has an associated detail header band. Calls .createBandCursor() if necessary. Parameters: cUniqueId
  19501. *createobjectcursor Creates a cursor (default alias: "objects") of records for each object record in the report alias. Parameters: [ cFrxAlias [, cDestinationAlias [, iFilterMode ]]]
  19502. *createobjcursorrecord Called from .createObjectCursor(). Parameter: cDestinationAlias
  19503. *charsettolocale Converts a given Font Charset to a candidate locale Id for use with the STRCONV() function. Parameters: nCharSet
  19504. *getbandfor Returns a SCATTER NAME band object for the specified object ID. Calls .createObjectCursor() if necessary. Parameters: cObjectID [, lStart]
  19505. *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.
  19506. *getobjectsinband Returns a collection of UNIQUEIDs (or RECNOs) for each object in a given band. Calls .createObjectCursor() if necessary. Parameters: cBandId [, lRecnos]
  19507. *insertdataenvrecord Inserts a data environment object record into an FRX cursor. Assumes that the record pointer is appropriately located. Parameters: ID, NAME, EXPR, CODE
  19508. *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
  19509. *inserttitleband Inserts a title band into the frx cursor. Parameter: lBreakToNewPage
  19510. *insertsummaryband Inserts a summary band into the frx cursor. Parameters: lBreakToNewPage, lPageHeader, lPageFooter
  19511. *insertdetailband Inserts a detail band into the frx cursor. Assumes: the record pointer is located appropriately. Parameters: none
  19512. *insertdetailheaderfooter Inserts detail header and footer bands into the frx cursor. Assumes: record pointer is located on the detail band record. Parameters: none
  19513. *setcolumncount Adds or removes columns (and column header/footer records) from the FRX cursor. Assumes: the frx cursor is selected. Parameters: iColumns
  19514. *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]
  19515. *createvariablecursor Creates a cursor with the alias "vars" containing records of information for each report variable in the report. Parameters: [cFrxAlias]
  19516. *createcalcresetoncursor Creates a cursor with alias "reset_on" that contains records of information for each prompt in the Calculation Reset combobox. Parameters: [cFrxAlias]
  19517. *createdefaultprintenvcursor Creates a one-row cursor with the same structure as the FRX. Default parameters are "frx", "defPrnEnv". Parameters: [ cFrxAlias [, cDestinationAlias]]
  19518. *getselectedobjectcount Returns the number of selected objects in the frx cursor. Parameter: [cFrxAlias]
  19519. *pushprintenvtocursor Saves the current printer environment to a cursor. Parameter: cSavedInAlias
  19520. *popprintenv Restores the printer environment from a previously saved cursor. See .PushPrintEnvToCursor() method. Assumes: previously saved cursor is currently selected.
  19521. *getfrxtimestamp Returns a FOX system file timestamp from a datetime value, any data type. Parameter: [vDateTime]
  19522. *gettimestampstring Returns a readable string version of a Fox system timestamp, using current date settings. Parameter: iStamp
  19523. *inttobin Returns a binary form of an integer. Parameter: iNumber
  19524. *bintoint Returns the integer form of binary data. Parameter: cBinary
  19525. *gettargettypetext Returns a readable string version of a target Type+Code. Parameters: iObjectType, iObjectCode
  19526. *getunitvaluefromfru Returns a given unit value for a given value in FRUs, depending on the units. Parameters: nFruValue, iUnits
  19527. *stripquotes Returns a string with embraced string delimiters removed. Parameters: cString
  19528. *getmetadatadomdoc Returns a reference to an MSXml.DomDocument with the metadata xml loaded. Assumes FRX is located on desired record.
  19529. *islayoutcontrol 
  19530. *unpackmemberdata Parameters: [cFrxAlias], [cMetaAlias]. Defaults to 'frx', 'memberdata'
  19531. *packupmemberdata Parameters: [cFrxAlias], [cMetaAlias]. Defaults to 'frx', 'memberdata'
  19532. *unpackfrxmemberdata 
  19533. *getfrxrecdisplayname Returns a readable string version of the current record in the current alias. (Assumes current alias is an FRX structure.)
  19534. *xmlstrtocursor 
  19535. *cursortoxmlstr 
  19536. *quietmode_assign 
  19537. *generateevaluatecontentsscript Provides generated EvaluateContents code based on specified MemberData record usage.
  19538. *generateadjustobjectsizescript Provides generated AdjustObjectSize code based on specified MemberData record usage.
  19539. *resettextmerge Restores a saved set of delimiters  and other characteristics of the SET TEXTMERGE command.
  19540. ]screendpi = 96
  19541. _memberdata = 
  19542.     4363<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  19543. <VFPData>
  19544. <memberdata name="getmetadatadomdoc" type="Method" display="GetMetadataDomDoc" favorites="false" override="false" script=""/>
  19545. <memberdata name="createvariablecursor" type="Method" display="CreateVariableCursor"/>
  19546. <memberdata name="binstringtoint" type="Method" display="BinStringToInt"/>
  19547. <memberdata name="bintoint" type="Method" display="BinToInt"/>
  19548. <memberdata name="charsettolocale" type="Method" display="CharsetToLocale"/>
  19549. <memberdata name="createbandcursor" type="Method" display="CreateBandCursor"/>
  19550. <memberdata name="createcalcresetoncursor" type="Method" display="CreateCalcResetOnCursor"/>
  19551. <memberdata name="createdefaultprintenvcursor" type="Method" display="CreateDefaultPrintEnvCursor"/>
  19552. <memberdata name="creategroupcursor" type="Method" display="CreateGroupCursor"/>
  19553. <memberdata name="createobjcursorrecord" type="Method" display="CreateObjCursorRecord"/>
  19554. <memberdata name="createobjectcursor" type="Method" display="CreateObjectCursor"/>
  19555. <memberdata name="frutopixels" type="Method" display="FruToPixels"/>
  19556. <memberdata name="getbandfor" type="Method" display="GetBandFor"/>
  19557. <memberdata name="getfrutextheight" type="Method" display="GetFruTextHeight"/>
  19558. <memberdata name="getfrutextwidth" type="Method" display="GetFruTextWidth"/>
  19559. <memberdata name="getfrxtimestamp" type="Method" display="GetFrxTimeStamp"/>
  19560. <memberdata name="getobjectsinband" type="Method" display="GetObjectsInBand"/>
  19561. <memberdata name="getreportattribute" type="Method" display="GetReportAttribute"/>
  19562. <memberdata name="getselectedobjectcount" type="Method" display="GetSelectedObjectCount"/>
  19563. <memberdata name="gettargettypetext" type="Method" display="GetTargetTypeText"/>
  19564. <memberdata name="gettimestampstring" type="Method" display="GetTimeStampString"/>
  19565. <memberdata name="getunitvaluefromfru" type="Method" display="GetUnitValueFromFru"/>
  19566. <memberdata name="gorec" type="Method" display="GoRec"/>
  19567. <memberdata name="hasband" type="Method" display="HasBand"/>
  19568. <memberdata name="hasdetailheader" type="Method" display="HasDetailHeader"/>
  19569. <memberdata name="hasprotectionflag" type="Method" display="HasProtectionFlag"/>
  19570. <memberdata name="insertband" type="Method" display="InsertBand"/>
  19571. <memberdata name="insertdataenvrecord" type="Method" display="InsertDataEnvRecord"/>
  19572. <memberdata name="insertdetailband" type="Method" display="InsertDetailBand"/>
  19573. <memberdata name="insertdetailheaderfooter" type="Method" display="InsertDetailHeaderFooter"/>
  19574. <memberdata name="insertsummaryband" type="Method" display="InsertSummaryBand"/>
  19575. <memberdata name="inserttitleband" type="Method" display="InsertTitleBand"/>
  19576. <memberdata name="inttobin" type="Method" display="IntToBin"/>
  19577. <memberdata name="inttobinstring" type="Method" display="IntToBinString"/>
  19578. <memberdata name="islayoutcontrol" type="Method" display="IsLayoutControl"/>
  19579. <memberdata name="packupmemberdata" type="Method" display="PackupMemberData"/>
  19580. <memberdata name="pixelstofru" type="Method" display="PixelsToFru"/>
  19581. <memberdata name="popprintenv" type="Method" display="PopPrintEnv"/>
  19582. <memberdata name="pushprintenvtocursor" type="Method" display="PushPrintEnvToCursor"/>
  19583. <memberdata name="runtimemode" type="Property" display="RuntimeMode"/>
  19584. <memberdata name="screendpi" type="Property" display="ScreenDPI"/>
  19585. <memberdata name="setcolumncount" type="Method" display="SetColumnCount"/>
  19586. <memberdata name="stripquotes" type="Method" display="StripQuotes"/>
  19587. <memberdata name="synchobjectpositions" type="Method" display="SynchObjectPositions"/>
  19588. <memberdata name="unpackmemberdata" type="Method" display="UnpackMemberData"/>
  19589. <memberdata name="unpackfrxmemberdata" type="Method" display="UnpackFrxMemberData"/>
  19590. <memberdata name="cursortoxmlstr" type="Method" display="CursorToXmlStr"/>
  19591. <memberdata name="xmlstrtocursor" type="Method" display="XmlStrToCursor"/>
  19592. <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"/>
  19593. <memberdata name="resettextmerge" type="Method" display="ResetTextMerge"/>
  19594. </VFPData>
  19595. quietmode = .F.
  19596. Name = "frxcursor"
  19597. custom
  19598. dpix = 0
  19599. dpiy = 0
  19600. offsetx = 0
  19601. offsety = 0
  19602. actualx = 0
  19603. actualy = 0
  19604. mmx = 0
  19605. mmy = 0
  19606. printablex = 0
  19607. printabley = 0
  19608. _memberdata = 
  19609.     1735<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  19610. <VFPData>
  19611. <memberdata name="loaddeviceinfo" type="Method" display="LoadDeviceInfo" favorites="false" override="false" script=""/>
  19612. <memberdata name="loadfromfrx" type="Method" display="LoadFromFrx" favorites="false" override="false" script=""/>
  19613. <memberdata name="loadfromstrings" type="Method" display="LoadFromStrings" favorites="false" override="false" script=""/>
  19614. <memberdata name="loadfromhdc" type="Method" display="LoadFromHDC" favorites="false" override="false" script=""/>
  19615. <memberdata name="dpix" type="Property" display="DpiX" favorites="false" override="false" script=""/>
  19616. <memberdata name="dpiy" type="Property" display="DpiY" favorites="false" override="false" script=""/>
  19617. <memberdata name="offsetx" type="Property" display="OffsetX" favorites="false" override="false" script=""/>
  19618. <memberdata name="offsety" type="Property" display="OffsetY" favorites="false" override="false" script=""/>
  19619. <memberdata name="actualx" type="Property" display="ActualX" favorites="false" override="false" script=""/>
  19620. <memberdata name="actualy" type="Property" display="ActualY" favorites="false" override="false" script=""/>
  19621. <memberdata name="mmx" type="Property" display="mmX" favorites="false" override="false" script=""/>
  19622. <memberdata name="mmy" type="Property" display="mmY" favorites="false" override="false" script=""/>
  19623. <memberdata name="printablex" type="Property" display="PrintableX" favorites="false" override="false" script=""/>
  19624. <memberdata name="printabley" type="Property" display="PrintableY" favorites="false" override="false" script=""/>
  19625. <memberdata name="orientation" type="Property" display="Orientation" favorites="false" override="false" script=""/>
  19626. </VFPData>
  19627. orientation = 0
  19628. errormessage = ("")
  19629. Name = "frxdevicehelper"
  19630. CBYTES
  19631. CBYTE
  19632. IRETURN
  19633. CBINSTRING
  19634. IFLAGBIT
  19635. IPROTFLAGS
  19636. BINSTRINGTOINT?
  19637. IPIXELS
  19638. THIS    
  19639. SCREENDPI%
  19640. THIS    
  19641. SCREENDPI
  19642. CTEXT    
  19643. CTYPEFACE
  19644. ISIZE
  19645. CSTYLE
  19646. IWIDTH
  19647. PIXELSTOFRUk
  19648. CTEXT    
  19649. CTYPEFACE
  19650. ISIZE
  19651. CSTYLE
  19652. IHEIGHT
  19653. PIXELSTOFRUc
  19654. CALIAS
  19655. WINDOWS
  19656. UNITS
  19657. MULTICOLUMN
  19658. COLUMNCOUNT
  19659. PROTECTION
  19660. SNAKED_COLUMNS
  19661. CURSEL
  19662. CURREC
  19663. VRETVAL
  19664. OBJTYPE
  19665. PLATFORM
  19666. RULER
  19667. FRX_RULER_FRUS
  19668. UNITS_FRU_LOC
  19669. UNITS_INCHES_LOC
  19670. UNITS_METRIC_LOC
  19671. UNITS_PIXELS_LOC
  19672. UNITS_CHARACTERS_LOC
  19673. ORDER
  19674. BOTTOM
  19675. GOREC
  19676. datasessionv
  19677. datasessionv
  19678. bands
  19679. bands
  19680. Collection
  19681. Collection
  19682. WINDOWS
  19683. bands
  19684. TCFRXALIAS    
  19685. TISESSION
  19686. CURSEL
  19687. CURREC
  19688. CURSESSION
  19689. BANDS
  19690. UNIQUEID
  19691. OBJTYPE
  19692. OBJCODE
  19693. EXPR    
  19694. BANDLABEL
  19695. START
  19696. HEIGHT
  19697. P_START
  19698. P_STOP
  19699. P_HEIGHT
  19700. R_START
  19701. R_STOP
  19702. RESETTOTAL
  19703. BAND_SEQ
  19704. REL_BAND_ID
  19705. REC_NO
  19706. NSTART
  19707. ISTART
  19708. IDETAILCOUNT
  19709. CSUFFIX
  19710. IBANDCOUNT
  19711. OGROUP
  19712. OHEADER    
  19713. LCTITLEID
  19714. LCSUMMARYID
  19715. PLATFORM
  19716. GETTARGETTYPETEXT
  19717. COUNT
  19718. REMOVE
  19719. FRUTOPIXELS
  19720. IREC    
  19721. CFOOTERID
  19722. CBANDID    
  19723. CHEADERID
  19724. GOREC
  19725. bands
  19726. IOBJCODE
  19727. CREATEBANDCURSOR
  19728. CURSEL
  19729. LRETVAL
  19730. BANDS
  19731. OBJCODE
  19732. bands
  19733. CUNIQUEID
  19734. CREATEBANDCURSOR
  19735. CURSEL
  19736. LRETVAL
  19737. BANDS
  19738. UNIQUEID
  19739. OBJTYPE
  19740. OBJCODE
  19741. objects
  19742. datasessionv
  19743. datasessionv
  19744. bands
  19745. 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) )
  19746. WINDOWS
  19747. WINDOWS
  19748. WINDOWS
  19749. WINDOWS
  19750. TCFRXALIAS
  19751. TCDESTALIAS
  19752. TIFILTER
  19753. TLRUNTIMEMODE    
  19754. TISESSION
  19755. CURSEL
  19756. CURREC
  19757. CURSESSION
  19758. CREATEBANDCURSOR
  19759. OBJTYPE
  19760. PLATFORM
  19761. CREATEOBJCURSORRECORD    
  19762. IGRPSTART    
  19763. IGRPCOUNT
  19764. CURPOS
  19765. GOREC
  19766. Label
  19767. pslabel.bmp
  19768. Field
  19769. pseditbx.bmp
  19770. psline.bmp
  19771. Rectangle
  19772. pshape.bmp
  19773. Picture/OLE Bound
  19774. psolebnd.bmp
  19775. Grouped Objects
  19776. group2.bmp
  19777. Indeterminate behavior
  19778. Resolved as Page Header
  19779. TCDESTALIAS
  19780. TLRUNTIMEMODE
  19781. SRCALIAS
  19782. LISGROUP
  19783. REC_NO
  19784. OBJNAME
  19785. GETFRXRECDISPLAYNAME
  19786. OBJTYPE
  19787. CTYPE
  19788. OBJ_PICT    
  19789. LOCALE_ID
  19790. CHARSETTOLOCALE
  19791. RESOID
  19792. TYPE_SEQ
  19793. UNIQUEID
  19794. OBJCODE
  19795. HEIGHT
  19796. P_START
  19797. FRUTOPIXELS
  19798. P_HEIGHT
  19799. P_STOP
  19800. WIDTH
  19801. SELECTED
  19802. CURPOS
  19803. BANDS
  19804. R_START
  19805. START_BAND_ID    
  19806. BANDLABEL
  19807. BAND_OFFSET
  19808. BAND_SEQ
  19809. R_STOP
  19810. END_BAND_ID
  19811. REL_BAND_ID
  19812. NCHARSET
  19813. datasessionv
  19814. datasessionv
  19815. objects
  19816. COBJECTID
  19817. LSTART
  19818. ISESSION
  19819. CURSESSION
  19820. CREATEOBJECTCURSOR
  19821. CURSEL
  19822. OBAND
  19823. OBJECTS
  19824. UNIQUEID
  19825. BANDS
  19826. START_BAND_ID
  19827. END_BAND_ID
  19828. WINDOWS
  19829. bands4
  19830. objects4    
  19831. CURSEL
  19832. CURREC
  19833. OBJTYPE
  19834. PLATFORM
  19835. UNIQUEID
  19836. OBJECTS
  19837. BANDS
  19838. START_BAND_ID
  19839. PIXELSTOFRU
  19840. P_START
  19841. BAND_OFFSET
  19842. GORECh
  19843. datasessionv
  19844. datasessionv
  19845. Collection
  19846. objects
  19847. CBANDID
  19848. LRECNOS
  19849. ISESSION
  19850. OBANDOBJECTS
  19851. CURSEL
  19852. CURSESSION
  19853. CREATEOBJECTCURSOR
  19854. OBJECTS
  19855. START_BAND_ID
  19856. REC_NO
  19857. UNIQUEIDs
  19858. WINDOWS
  19859. LIOBJTYPE
  19860. LCNAME
  19861. LCEXPR    
  19862. LCMETHODS
  19863. PLATFORM
  19864. OBJTYPE
  19865. ENVIRON
  19866. CURPOSz
  19867. WINDOWS
  19868. LIOBJCODE
  19869. PLATFORM
  19870. UNIQUEID
  19871. OBJTYPE
  19872. OBJCODE
  19873. NOREPEAT    
  19874. PAGEBREAK
  19875. COLBREAK    
  19876. RESETPAGE
  19877. PLAIN
  19878. CURPOSD
  19879. LNEWPAGE
  19880. INSERTBAND
  19881. HEIGHT    
  19882. PAGEBREAKx
  19883. LNEWPAGE
  19884. LPAGEHEADER
  19885. LPAGEFOOTER
  19886. OBJTYPE
  19887. OBJCODE
  19888. INSERTBAND
  19889. HEIGHT    
  19890. PAGEBREAK
  19891. EJECTBEFOR
  19892. EJECTAFTER
  19893. INSERTBAND
  19894. WINDOWS
  19895. WINDOWS
  19896. PLATFORM
  19897. UNIQUEID
  19898. OBJTYPE
  19899. OBJCODE'
  19900. WINDOWS
  19901. WINDOWS
  19902. WINDOWS
  19903. WINDOWS
  19904. WINDOWS
  19905. WINDOWS
  19906. WINDOWS
  19907. WINDOWS
  19908. ICOLS
  19909. LHASCOLBANDS
  19910. CURREC    
  19911. CFRXALIAS
  19912. OBJTYPE
  19913. PLATFORM
  19914. OBJCODE
  19915. GOREC
  19916. CREATEOBJECTCURSOR
  19917. UNIQUEID
  19918. NOREPEAT    
  19919. PAGEBREAK
  19920. COLBREAK    
  19921. RESETPAGE
  19922. PLAIN
  19923. CURPOS
  19924. CREATEBANDCURSOR
  19925. SYNCHOBJECTPOSITIONS$
  19926. datasessionv
  19927. datasessionv
  19928. UNITS
  19929. groups
  19930. groups
  19931. MULTICOLUMN
  19932. WINDOWS
  19933. insert into groups values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..EXPR,  m.iPaginate,  &tcFrxAlias..NOREPEAT,  m.nThreshold,  "" )
  19934. WINDOWS
  19935. replace FOOTER_ID with &tcFrxAlias..UNIQUEID
  19936. TCFRXALIAS    
  19937. TISESSION
  19938. CURSESSION
  19939. CURSEL
  19940. IUNITS
  19941. GETREPORTATTRIBUTE
  19942. GROUPS
  19943. UNIQUEID
  19944. PAGINATE
  19945. REPRINT
  19946. THRESH    
  19947. FOOTER_ID    
  19948. IPAGINATE
  19949. ICURREC
  19950. NTHRESHOLD
  19951. LISMULTICOL
  19952. OBJTYPE
  19953. OBJCODE
  19954. PLATFORM    
  19955. PAGEBREAK    
  19956. RESETPAGE
  19957. COLBREAK
  19958. GETUNITVALUEFROMFRU
  19959. WIDTH
  19960. GOREC2
  19961. datasessionv
  19962. datasessionv
  19963. reset_on
  19964. WINDOWS
  19965. locate for RESETTOTAL = &tcFrxAlias..RESETTOTAL
  19966. insert into vars values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..NAME,  &tcFrxAlias..EXPR,  &tcFrxAlias..TAG,  &tcFrxAlias..UNIQUE,  &tcFrxAlias..TOTALTYPE+1,  recno("reset_on"),  recno(m.tcFrxAlias) )
  19967. TCFRXALIAS    
  19968. TISESSION
  19969. CURSESSION
  19970. CURSEL
  19971. CREATECALCRESETONCURSOR
  19972. UNIQUEID
  19973. VARNAME
  19974. VALUE_TO_STORE
  19975. INITIAL_VALUE
  19976. RELEASE_VAR    
  19977. CALC_TYPE
  19978. RESET_ON
  19979. REC_NO
  19980. ICURREC
  19981. IRESETON
  19982. OBJTYPE
  19983. PLATFORM
  19984. GORECK
  19985. datasessionv
  19986. datasessionv
  19987. reset_on
  19988. reset_on
  19989. reset_on
  19990. Report
  19991. reset_on
  19992. WINDOWS
  19993. reset_on
  19994. Column
  19995. reset_on
  19996. Column
  19997. WINDOWS
  19998. reset_on
  19999. WINDOWS
  20000. insert into reset_on values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..OBJCODE,  "Group: " + trim(&tcFrxAlias..EXPR),  5    + m.iNum )
  20001. WINDOWS
  20002. reset_on
  20003. WINDOWS
  20004. insert into reset_on values (  &tcFrxAlias..UNIQUEID,  &tcFrxAlias..OBJCODE,  "Detail " + transform(m.iNum),  79   + m.iNum  )    
  20005. TCFRXALIAS    
  20006. TISESSION
  20007. CURSESSION
  20008. CURSEL
  20009. CURREC
  20010. IGROUPCOUNT
  20011. IDETAILCOUNT
  20012. RESET_ON
  20013. UNIQUEID
  20014. OBJCODE
  20015. PROMPT_TEXT
  20016. RESETTOTAL
  20017. OBJTYPE
  20018. PLATFORM
  20019. GORECG
  20020. datasessionv
  20021. datasessionv
  20022. defPrnEnv
  20023. WINDOWS
  20024. LCFRXALIAS    
  20025. LCPEALIAS    
  20026. LISESSION
  20027. CURSEL
  20028. CURSESSION
  20029. OBJTYPE
  20030. PLATFORM
  20031. WINDOWS
  20032. LCFRXALIAS
  20033. CURSEL
  20034. CURREC
  20035. SELCOUNT
  20036. CURPOS
  20037. PLATFORM
  20038. OBJTYPEc
  20039. CREGISTERALIAS
  20040. CURSEL
  20041. RESULT
  20042. RESULT
  20043. TVDATETIME
  20044. LTDATETIME
  20045. LVFOXTIMESTAMP
  20046. LVTEMP
  20047. INTTOBIN
  20048. BINTOINT~
  20049. tiStampb
  20050. RETURN TTOC({^&lcYear./&lcMonth./&lcDay. &lcHour.:&lcMinute.:&lcSecond.})    
  20051. TISTAMP
  20052. LNYEAROFFSET
  20053. LCYEAR
  20054. LCMONTH
  20055. LCDAY
  20056. LCHOUR
  20057. LCMINUTE
  20058. LCSECOND
  20059. TNINTEGER    
  20060. LNINTEGER
  20061. LCBINARY    
  20062. LNDIVISOR
  20063. LNCOUNT
  20064. TCBINARY    
  20065. LCINTEGER    
  20066. LNINTEGER
  20067. LNCOUNT
  20068. LNSTRLEN
  20069. Multiple Selection
  20070. Comment
  20071. Report/Global
  20072. Workarea
  20073. Index
  20074. Relation
  20075. Label
  20076. Rectangle
  20077. Field
  20078. Title
  20079. Page Header
  20080. Column Header
  20081. Group Header
  20082. Detail
  20083. Group Footer
  20084. Column Footer
  20085. Page Footer
  20086. Summary
  20087. Detail Header
  20088. Detail Footer
  20089. Unknown band type
  20090. Grouped Objects
  20091. Picture/OLE Bound
  20092. Variable
  20093. Printer Driver Setup
  20094. Font Resource
  20095. Data Environment
  20096. Cursor
  20097. Unknown Target type
  20098. NOBJTYPE
  20099. NOBJCODE
  20100. NFRUVALUE
  20101. IUNITS
  20102. LCVALUE
  20103. <VFPData>
  20104.     <reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/> 
  20105. </VFPData>     
  20106. MSXml.DomDocument
  20107. LCFRXALIAS
  20108. CURSEL
  20109. STYLE
  20110. LOADXML&
  20111. IOBJTYPE
  20112. datasessionv
  20113. datasessionv
  20114. memberdata
  20115. <VFPD
  20116. <?XML
  20117. TCFRXALIAS
  20118. TCMETAALIAS
  20119. TIDATASESSION
  20120. CURSEL
  20121. LCXML    
  20122. LLSUCCESS
  20123. LIDATASESSION
  20124. STYLE
  20125. XMLSTRTOCURSOR2
  20126. memberdata
  20127. datasessionv
  20128. datasessionv
  20129. <VFPD
  20130. <?XML
  20131. For this object, the report layout currently contains unexpected STYLE information:C
  20132. This may be a consequence of a conversion from a FoxPro DOS report.
  20133. If you save your changes, this information will be replaced.
  20134. (It will not affect the existing behavior of this report in FoxPro DOS.)
  20135. Do you wish to continue?
  20136. FoxPro Reporting
  20137. reportdata
  20138. reportdata
  20139. <VFPData><reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/></VFPData>
  20140. <VFPDATA/>
  20141. TCFRXALIAS
  20142. TCMETAALIAS
  20143. TIDATASESSION
  20144. LCXML
  20145. LIBYTES
  20146. LISELECT
  20147. LIDATASESSION    
  20148. LLSUCCESS
  20149. STYLE
  20150. THIS    
  20151. QUIETMODE
  20152. REPORTDATA
  20153. CURSORTOXMLSTR
  20154. DATASESSIONv
  20155. DATASESSIONv
  20156. memberdata
  20157. |NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|
  20158. WINDOWS
  20159. The metadata for a report definition row (ID: 
  20160. ) is invalid.
  20161. Metadata instructions for this item will be ignored.
  20162. FoxPro Reporting
  20163. The metadata for some report definition rows
  20164. could not be loaded.
  20165. Some dynamic report features may be missing,
  20166. or a report run may not conclude successfully.
  20167. FoxPro Reporting
  20168. TCFRXALIAS
  20169. TCMETAALIAS
  20170. TIDATASESSION
  20171. TLOMITINDEX
  20172. CURSEL
  20173. LIROWS
  20174. LCATTRIBUTES
  20175. LIINDEX
  20176. LCTEMPALIAS
  20177. LISELECT
  20178. LLERROR
  20179. LIDATASESSION
  20180. FRXRECNO
  20181. EXECWHEN
  20182. EXECUTE
  20183. CLASS
  20184. CLASSLIB
  20185. DECLASS
  20186. DECLASSLIB
  20187. SCRIPT
  20188. PLATFORM
  20189. STYLE
  20190. THIS    
  20191. QUIETMODE
  20192. MESSAGE
  20193. UNIQUEID
  20194. Report/Global
  20195. Rectangle
  20196. Title
  20197. Page Header
  20198. Column Header
  20199. Group Header
  20200. Detail
  20201. Group Footer
  20202. Column Footer
  20203. Page Footer
  20204. Summary
  20205. Detail Header
  20206. Detail Footer
  20207. Grouped Objects
  20208. Unknown Target type
  20209. [CCO_
  20210. TLINCLUDERECNO
  20211. RETVAL
  20212. OBJTYPE
  20213. STRIPQUOTES
  20214. PICTURE
  20215. OBJCODE
  20216. HPOSs
  20217. <VFPDATA/>
  20218. Do you want to replace the metadata with a valid default XML fragment?
  20219. FoxPro Reporting
  20220. <VFPData><reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/></VFPData>
  20221. |NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|
  20222.  ADD COLUMN 
  20223. alter table (m.tcMetaAlias) &cAddColumns
  20224. TCXML
  20225. TCMETAALIAS
  20226. CURSEL
  20227. LIROWS
  20228. CADDCOLUMNS
  20229. CSTANDARDSET
  20230. SCRIPT
  20231. EXECUTE
  20232. EXECWHEN
  20233. CLASS
  20234. CLASSLIB
  20235. DECLASS
  20236. DECLASSLIB
  20237. TMPALIAS
  20238. THIS    
  20239. QUIETMODE
  20240. MESSAGE
  20241. DELETEDv
  20242. lcXml
  20243. lcXml
  20244. TCMETAALIAS
  20245. LCXML
  20246. LIBYTES5
  20247. TVNEWVAL
  20248. THIS    
  20249. QUIETMODEi
  20250. DATASESSIONv
  20251. DATASESSIONv
  20252. memberdata
  20253. .FRXRecno
  20254. FRXRecno = CC
  20255.  AND 
  20256. Type = '
  20257. ' AND 
  20258. Name = '
  20259. Microsoft.VFP.Reporting.Builder.EvaluateContents
  20260. LOCATE FOR &lcConditions.
  20261. TEXTMERGE
  20262. TEXTMERGEv
  20263. TEXTMERGE
  20264. TEXTMERGE
  20265. LPARAMETERS m.toListener, m.tP1, m.tP2 
  20266.  * <<"generated user-dynamic code" >>
  20267.  * <<"for EvaluateContents method">>
  20268.  * FRXRECNO: <<RECNO("frx")>>, EXPR: <<FRX.Expr>>
  20269.  * <<"the following code translates from the standard">>
  20270.  * <<"fxMemberDataScript.ApplyFx parameters, which are used">>
  20271.  * <<"so you can cut and paste the CASEs below into">>
  20272.  * <<"Memberdata standard script later if you want to">>
  20273. LOCAL m.nFRXRecno, m.oProps 
  20274. m.nFRXRecno = m.tP1
  20275. m.oProps = m.tP2
  20276. m.oProps.Reload = .T.   
  20277.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  20278.    * <<"Conditions are evaluated in the Current (Report) datasession.">>
  20279.    DO CASE
  20280. SCAN ALL FOR &lcConditions. 
  20281.    CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<"user condition: ">> <<Execute>>
  20282.       * <<"Expression required for this item. ">>
  20283.       * <<"Combinations of any 2 out of the 3 delimiter types (" +["]+ ",',[]) permitted within expressions.">>
  20284.       IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  20285.          m.oProps.Text = TRANSFORM(<<Script>>)
  20286.       ELSE
  20287.          * <<"Expression evaluated first in Current (Report) datasession, then in FRX datasession.">>          
  20288.          SET DATASESSION TO (m.toListener.FRXDataSession)           
  20289.          IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  20290.             m.oProps.Text = TRANSFORM(<<Script>>)
  20291.          ENDIF
  20292.          SET DATASESSION TO (m.toListener.CurrentDataSession)                     
  20293.       ENDIF
  20294.       * <<"Additional items use literal values.">>   
  20295.       m.oProps.PenRed = <<INT(MOD(m.liColor,256))>>
  20296.       m.oProps.PenGreen = <<MOD(INT(m.liColor/256),256)>>
  20297.       m.oProps.PenBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  20298.       m.oProps.FillRed = <<INT(MOD(m.liColor,256))>>
  20299.       m.oProps.FillGreen = <<MOD(INT(m.liColor/256),256)>>
  20300.       m.oProps.FillBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  20301.       m.oProps.PenAlpha = <<PenA>>
  20302.       m.oProps.FillAlpha = <<FillA>>
  20303.       m.oProps.FontName = "<<FName>>"
  20304.       m.oProps.FontStyle = <<ABS(INT(VAL(FStyle)))>>
  20305.       m.oProps.FontSize = <<ABS(INT(VAL(FSize)))>>
  20306.    OTHERWISE  && <<"default result from FRX definition">>
  20307.       m.oProps.Reload = .F.   
  20308.    ENDCASE
  20309. CATCH WHEN .T.
  20310.    m.oProps.Reload = .F.   
  20311. FINALLY
  20312.    SET DATASESSION TO (m.toListener.FRXDataSession)
  20313. ENDTRY
  20314. TCFRXALIAS
  20315. TCMEMBERDATAALIAS
  20316. TIDATASESSION
  20317. LIDATASESSION
  20318. LCRESULT
  20319. LISELECT
  20320. LCCONDITIONS
  20321. LICOLOR
  20322. LCTEXTMERGEDELIMS
  20323. LCTEXTMERGE
  20324. LLTEXTMERGE
  20325. LCTEXTMERGESHOW
  20326. LCEXPDELIM1
  20327. LCEXPDELIM2
  20328. SCRIPT
  20329. LCDELIM1
  20330. LCDELIM2
  20331. PENRGB
  20332. FILLRGB
  20333. FILLA
  20334. FNAME
  20335. FSTYLE
  20336. FSIZE
  20337. RESETTEXTMERGEr
  20338. DATASESSIONv
  20339. DATASESSIONv
  20340. memberdata
  20341. .FRXRecno
  20342. FRXRecno = CC
  20343.  AND 
  20344. Type = '
  20345. ' AND 
  20346. Name = '
  20347. Microsoft.VFP.Reporting.Builder.AdjustObjectSize
  20348. LOCATE FOR &lcConditions.
  20349. TEXTMERGE
  20350. TEXTMERGEv
  20351. TEXTMERGE
  20352. TEXTMERGE
  20353. LPARAMETERS m.toListener, m.tP1, m.tP2 
  20354.  * <<"generated user-dynamic code" >>
  20355.  * <<"for AdjustObjectSize method">>
  20356.  * FRXRECNO: <<RECNO("frx")>>, TYPE: <<FRX.ObjType>>
  20357.  * <<"the following code translates from the standard">>
  20358.  * <<"fxMemberDataScript.ApplyFx parameters, which are used">>
  20359.  * <<"so you can cut and paste the CASEs below into">>
  20360.  * <<"Memberdata standard script later if you want to">>
  20361. LOCAL m.nFRXRecno, m.oProps 
  20362. m.nFRXRecno = m.tP1
  20363. m.oProps = m.tP2
  20364. m.oProps.Reload = .T.   
  20365.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  20366.    * <<"Conditions are evaluated in the Current (Report) datasession.">>
  20367.    LOCAL liTemp
  20368.    * <<"These items use literal values">>
  20369.    * <<"or expressions that evaluate to numeric values.">>
  20370.    * <<"Expressions are evaluated in the Current (Report) datasession.">>
  20371.    DO CASE
  20372. SCAN ALL FOR &lcConditions. 
  20373.    CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<"user condition: ">> <<Execute>>
  20374.       IF <<Width>> > -1 AND ;
  20375.          <<Width>> < 64000 
  20376.          m.oProps.Width = INT(<<Width>>)   
  20377.       ENDIF
  20378.       IF <<Height>> > -1 AND ;
  20379.          <<Height>> < 64000 AND ;
  20380.          ((INT(<<Height>>) < m.oProps.MaxHeightAvailable) ;
  20381.           OR (NOT m.oProps.Reattempt))
  20382.          m.oProps.Height = INT(<<Height>>)
  20383.       ENDIF
  20384.    OTHERWISE  && <<"default result from FRX definition">>
  20385.       m.oProps.Reload = .F.   
  20386.    ENDCASE
  20387. CATCH WHEN .T.
  20388.    m.oProps.Reload = .F.   
  20389. FINALLY
  20390.    SET DATASESSION TO (m.toListener.FRXDataSession)
  20391. ENDTRY
  20392. TCFRXALIAS
  20393. TCMEMBERDATAALIAS
  20394. TIDATASESSION
  20395. LIDATASESSION
  20396. LCRESULT
  20397. LISELECT
  20398. LCCONDITIONS
  20399. LCTEXTMERGEDELIMS
  20400. LCTEXTMERGE
  20401. LLTEXTMERGE
  20402. LCTEXTMERGESHOW
  20403. RESETTEXTMERGE7
  20404. TEXTMERGE
  20405. set textmerge on &tcTextMergeShow.
  20406. set textmerge to &tcTextMerge. additive 
  20407. TCDELIMITERS
  20408. TCTEXTMERGE
  20409. TLTEXTMERGE
  20410. TCTEXTMERGESHOW    
  20411. DELIMSIZE    
  20412. LEFTDELIM
  20413. RIGHTDELIM
  20414. LCTEXTMERGEDELIMS
  20415. GetDeviceCaps
  20416. WIN32API
  20417. GetDC
  20418. WIN32API
  20419. ReleaseDC
  20420. WIN32API
  20421. GETDEVICECAPS
  20422. WIN32API
  20423. GETDC    
  20424. RELEASEDC
  20425. SCREENDPI
  20426. THIS    
  20427. QUIETMODE    
  20428. STARTMODE
  20429. inttobinstring,
  20430. binstringtoint
  20431. hasprotectionflagn
  20432. frutopixels
  20433. pixelstofruL
  20434. getfrutextwidth
  20435. getfrutextheightV
  20436. gorec
  20437. getreportattributew
  20438. createbandcursor
  20439. hasband
  20440. hasdetailheaderf
  20441. createobjectcursork
  20442. createobjcursorrecord$
  20443. charsettolocale
  20444. getbandfor
  20445. synchobjectpositions
  20446. getobjectsinband
  20447. insertdataenvrecord
  20448. insertbando,
  20449. inserttitlebandW-
  20450. insertsummaryband
  20451. insertdetailband
  20452. insertdetailheaderfooter
  20453. setcolumncount
  20454. creategroupcursor
  20455. createvariablecursor
  20456. createcalcresetoncursor
  20457. createdefaultprintenvcursor
  20458. getselectedobjectcount
  20459. pushprintenvtocursoryE
  20460. popprintenv
  20461. getfrxtimestamp+F
  20462. gettimestampstring.H
  20463. inttobin
  20464. bintoint-K
  20465. gettargettypetext
  20466. getunitvaluefromfru!Q
  20467. stripquotes
  20468. getmetadatadomdoc
  20469. islayoutcontrol
  20470. unpackmemberdata
  20471. packupmemberdataCW
  20472. unpackfrxmemberdata
  20473. getfrxrecdisplaynamePd
  20474. xmlstrtocursor
  20475. cursortoxmlstr
  20476. quietmode_assign#o
  20477. generateevaluatecontentsscriptwo
  20478. generateadjustobjectsizescript
  20479. resettextmerge3
  20480. PROCEDURE loaddeviceinfo
  20481. lparameters lcDriver, lcDevice, lcDEVMODE
  20482. THIS.errorMessage = ""
  20483. local lRetVal
  20484. lRetVal = .T.
  20485. if empty( m.lcDevice )
  20486.     *---------------------------------------
  20487.     * Use default printer settings:
  20488.     *---------------------------------------
  20489.     lcDriver  = ""
  20490.     lcDevice  = set("PRINTER",3)
  20491.     lcDEVMODE = ""
  20492. endif
  20493.     local iHDC, vResult
  20494.     iHDC = CreateIC( m.lcDriver, m.lcDevice, chr(0), m.lcDEVMODE )
  20495.     if m.iHDC = 0
  20496.         error CREATE_IC_FAILURE_LOC
  20497.     else
  20498.         THIS.LoadFromHDC( m.iHDC )
  20499.         vResult = DeleteDC( m.iHDC )
  20500.     endif
  20501. catch to oErr
  20502.     THIS.errorMessage = oErr.message
  20503.     lRetVal = .F.
  20504. endtry
  20505. return m.lRetVal
  20506. ENDPROC
  20507. PROCEDURE loadfromfrx
  20508. lparameter lcFrxAlias
  20509. THIS.errorMessage = ""
  20510. local curSel, curRec, lRetVal
  20511. store .F. to lRetVal
  20512. if empty(m.lcFrxAlias)
  20513.     lcFrxAlias = "frx"
  20514. endif
  20515. if not used( m.lcFrxAlias )
  20516.     return m.lRetVal
  20517. endif
  20518. *--------------------------------
  20519. * Save current data/cursor state:
  20520. *--------------------------------
  20521. curSel = select(0)
  20522. select (m.lcFrxAlias)
  20523. curRec = recno()
  20524. locate for PLATFORM="WINDOWS" and OBJTYPE = 1 and OBJCODE = 53
  20525. if found()
  20526.     *---------------------------------------------------
  20527.     * Get the device info settings:
  20528.     *---------------------------------------------------
  20529.     lRetVal = THIS.LoadFromStrings( EXPR, TAG2 )
  20530. endif
  20531. *---------------------------------------------------
  20532. * Restore data/cursor state:
  20533. *---------------------------------------------------
  20534. if m.curRec <= reccount()
  20535.     go m.curRec
  20536. endif
  20537. select (m.curSel)
  20538. return m.lRetVal
  20539. ENDPROC
  20540. PROCEDURE loadfromstrings
  20541. lparameters tcEXPR, tcTAG2
  20542. local i, cLine, cDriver, lDriver, cDevice, lDevice
  20543. *---------------------------------------------------
  20544. * Read DRIVER and DEVICE values from EXPR    
  20545. *---------------------------------------------------
  20546. for m.i = 1 to memlines(m.tcEXPR)
  20547.     cLine = mline(m.tcEXPR,m.i)
  20548.     do case
  20549.     case m.cLine = "DRIVER=" and not m.lDriver
  20550.         cDriver = substr(m.cLine,8)
  20551.         lDriver = .T.
  20552.     case m.cLine = "DEVICE=" and not m.lDevice
  20553.         cDevice = substr(m.cLine,8)
  20554.         lDevice = .T.
  20555.     endcase        
  20556.     if m.lDevice and m.lDriver
  20557.         exit
  20558.     endif
  20559. endfor
  20560. *---------------------------------------------------
  20561. * Get the device info settings:
  20562. *---------------------------------------------------
  20563. return THIS.LoadDeviceInfo( m.cDriver, m.cDevice, m.tcTAG2 )
  20564. ENDPROC
  20565. PROCEDURE loadfromhdc
  20566. lparameters tiHDC
  20567. #define HORZSIZE          4  && Horizontal size in millimeters 
  20568. #define VERTSIZE          6  && Vertical size in millimeters 
  20569. #define HORZRES           8  && Printable page width  / Horizontal width in pixels 
  20570. #define VERTRES          10  && Printable page length / Vertical height in pixels 
  20571. #define LOGPIXELSX       88  && DPI / Logical pixels/inch in X dimension
  20572. #define LOGPIXELSY       90  && DPI / Logical pixels/inch in Y dimension
  20573. #define PHYSICALWIDTH   110  && Actual page width  / Physical Width in device units
  20574. #define PHYSICALHEIGHT  111  && Actual page length / Physical Height in device units
  20575. #define PHYSICALOFFSETX 112  && Printable page left margin / Physical Printable Area x margin 
  20576. #define PHYSICALOFFSETY 113  && Printable page top margin  / Physical Printable Area y margin
  20577. with THIS
  20578.     .dpiX        = GetDeviceCaps( m.tiHDC, LOGPIXELSX )
  20579.     .dpiY        = GetDeviceCaps( m.tiHDC, LOGPIXELSY )
  20580.     .OffsetX     = GetDeviceCaps( m.tiHDC, PHYSICALOFFSETX )
  20581.     .OffsetY     = GetDeviceCaps( m.tiHDC, PHYSICALOFFSETY )
  20582.     .PrintableX  = GetDeviceCaps( m.tiHDC, HORZRES )
  20583.     .PrintableY  = GetDeviceCaps( m.tiHDC, VERTRES )
  20584.     .mmX         = GetDeviceCaps( m.tiHDC, HORZSIZE )
  20585.     .mmY         = GetDeviceCaps( m.tiHDC, VERTSIZE )
  20586.     .ActualX     = GetDeviceCaps( m.tiHDC, PHYSICALWIDTH )
  20587.     .ActualY     = GetDeviceCaps( m.tiHDC, PHYSICALHEIGHT )
  20588. endwith
  20589. return
  20590. ENDPROC
  20591. PROCEDURE Init
  20592. declare integer GetLastError ;
  20593.     in win32api
  20594. declare integer SetLastError ;
  20595.     in win32api ;
  20596.     integer i
  20597. declare integer CreateIC ;
  20598.     in gdi32 ;
  20599.     string lpszDriver, ;
  20600.     string lpszDevice, ;
  20601.     string lpszOutput, ;
  20602.     string lpdvmInit
  20603. declare integer GetDeviceCaps ;
  20604.     in gdi32 ;
  20605.     integer hdc, ;
  20606.     integer nIndex     
  20607. declare integer DeleteDC ;
  20608.     in gdi32 ;
  20609.     integer hdc
  20610. return .T.
  20611. ENDPROC
  20612. W_PROCEDURE inttobinstring
  20613. *=======================================================
  20614. * InttoBinString( int )
  20615. * Returns a string of bytes, the binary version of a 
  20616. * given integer.
  20617. * BinChar & Integer conversion, based on code by RS
  20618. *=======================================================
  20619. lparameter i
  20620. local cBytes, b
  20621. cBytes = ""
  20622. do while m.i <> 0 
  20623.     b = m.i % 256
  20624.     i = floor( m.i/256 )
  20625.     cBytes = m.cBytes + chr(m.b)            
  20626. enddo    
  20627. return m.cBytes
  20628. ENDPROC
  20629. PROCEDURE binstringtoint
  20630. *=======================================================
  20631. * BinstringToInt( char )
  20632. * Returns a numeric equivalent of a binary data in string
  20633. * form.
  20634. * BinChar & Integer conversion, based on code by RS
  20635. *=======================================================
  20636. lparameter cByte
  20637. local iReturn, i, b
  20638. iReturn = 0
  20639. for m.i = len( m.cByte ) to 1 step -1
  20640.     b = asc( substr( m.cByte, m.i, 1 ))
  20641.     iReturn = (m.iReturn*256) + m.b
  20642. endfor
  20643. return m.iReturn
  20644. ENDPROC
  20645. PROCEDURE hasprotectionflag
  20646. *=======================================================
  20647. * HasProtectionFlag( cBytes, iBit )
  20648. * Returns .T. if the given binary data contains a specific 
  20649. * bit set to true.
  20650. * Uses: BinstringToInt()
  20651. *=======================================================
  20652. lparameters cBinstring, iFlagBit 
  20653. local iProtFlags
  20654. iProtFlags = THIS.BinstringToInt( m.cBinstring )
  20655. return bittest( m.iProtFlags, m.iFlagBit )
  20656. ENDPROC
  20657. PROCEDURE frutopixels
  20658. *=======================================================
  20659. * FruToPixels( num )
  20660. * returns the value in pixels of a given FRU measurement.
  20661. *=======================================================
  20662. lparameter nFRU
  20663. local iPixels
  20664. *------------------------------------
  20665. * Fixed for SP1: 
  20666. * use the .screenDPI property instead of 
  20667. * the hard-coded 96 dpi value. The ReportBuilder
  20668. * client will reset .screenDPI to 96 so that it
  20669. * is correct for design-time report designer use.
  20670. *------------------------------------
  20671. *iPixels = round((m.nFRU * 96)/10000,3)
  20672. iPixels = round((m.nFRU * this.screenDPI)/10000,3)
  20673. return int( m.iPixels )
  20674. ENDPROC
  20675. PROCEDURE pixelstofru
  20676. *=======================================================
  20677. * PixelsToFru( int )
  20678. * return a value in FRUs of a given pixel dimension
  20679. *=======================================================
  20680. lparameter nPix 
  20681. *------------------------------------
  20682. * Fixed for SP1: 
  20683. * use the .screenDPI property instead of 
  20684. * the hard-coded 96 dpi value. The ReportBuilder
  20685. * client will reset .screenDPI to 96 so that it
  20686. * is correct for design-time report designer use.
  20687. *------------------------------------
  20688. *return round(( nPix * 10000 )/96 , 3 )
  20689. return round(( nPix * 10000 )/this.screenDPI , 3 )
  20690. ENDPROC
  20691. PROCEDURE getfrutextwidth
  20692. *=======================================================
  20693. * GetFruTextWidth( cText, cTypeface, iSize [, cStyle ] )
  20694. * Returns the width of a given string in FRUs
  20695. *=======================================================
  20696. lparameters cText, cTypeFace, iSize, cStyle
  20697. if parameters() < 4
  20698.     cStyle = "N"
  20699. endif
  20700. *-------------------------------------------------------
  20701. * obtain text width in pixels. Remember that txtwidth() returns
  20702. * number of equivalent average characters, so must multiply by
  20703. * the overall average character width:
  20704. *-------------------------------------------------------
  20705. local iWidth
  20706. iWidth = txtwidth( cText,  cTypeFace, iSize, cStyle ) 
  20707. iWidth = m.iWidth * fontmetric(6, cTypeFace, iSize, cStyle ) 
  20708. *-------------------------------------------------------
  20709. * convert pixels to FRU using screen dpi:
  20710. *-------------------------------------------------------
  20711. *------------------------------------
  20712. * Fixed for SP1: 
  20713. * use the .screenDPI property instead of 
  20714. * the hard-coded 96 dpi value. The ReportBuilder
  20715. * client will reset .screenDPI to 96 so that it
  20716. * is correct for design-time report designer use.
  20717. *------------------------------------
  20718. return this.pixelsToFru( m.iWidth )    
  20719. ENDPROC
  20720. PROCEDURE getfrutextheight
  20721. *=======================================================
  20722. * GetFruTextHeight( cText, cTypeface, iSize [, cStyle ] )
  20723. * Returns the height of a given string in FRUs
  20724. *=======================================================
  20725. lparameters cText, cTypeFace, iSize, cStyle
  20726. if parameters() < 4
  20727.     cStyle = "N"
  20728. endif
  20729. *-------------------------------------------------------
  20730. * obtain text height in pixels:
  20731. *-------------------------------------------------------
  20732. local iHeight
  20733. iHeight = fontmetric(1, cTypeFace, iSize, cStyle )
  20734. *-------------------------------------------------------
  20735. * convert pixels to FRU:
  20736. *-------------------------------------------------------
  20737. *------------------------------------
  20738. * Fixed for SP1: 
  20739. * use the .screenDPI property instead of 
  20740. * the hard-coded 96 dpi value. The ReportBuilder
  20741. * client will reset .screenDPI to 96 so that it
  20742. * is correct for design-time report designer use.
  20743. *------------------------------------
  20744. return this.pixelsToFru( m.iHeight )    
  20745. ENDPROC
  20746. PROCEDURE gorec
  20747. *=======================================================
  20748. * GoRec( i, cAlias )
  20749. * restores record pointer with bounds checking
  20750. *=======================================================
  20751. lparameter iRec, cAlias
  20752. if parameters() < 2
  20753.     cAlias = alias()
  20754. endif
  20755. if between( iRec, 1, reccount(m.cAlias) )
  20756.     go m.iRec in (m.cAlias)
  20757. endif
  20758. return
  20759. ENDPROC
  20760. PROCEDURE getreportattribute
  20761. *=======================================================
  20762. * GetReportAttribute( cToken [, iAlt] )
  20763. * Returns the value of a given report (or header) attribute.
  20764. * The FRX cursor must be open.
  20765. *=======================================================
  20766. lparameters cKey, iAlt 
  20767. if parameters()<2
  20768.     iAlt = 0
  20769. endif
  20770. if not used('frx')
  20771.     return .F.
  20772. endif
  20773. local curSel, curRec, vRetVal
  20774. curSel = select(0)
  20775. select frx
  20776. curRec = recno()
  20777. locate for    OBJTYPE = FRX_OBJTYP_REPORTHEADER and ;
  20778.             PLATFORM = FRX_PLATFORM_WINDOWS
  20779. do case
  20780. case upper(m.cKey) = "UNITS"
  20781.     if m.iAlt = 0
  20782.         vRetVal = RULER
  20783.     else
  20784.         do case
  20785.         case RULER = FRX_RULER_FRUS
  20786.             vRetVal = UNITS_FRU_LOC
  20787.         case RULER = FRX_RULER_INCHES
  20788.             vRetVal = UNITS_INCHES_LOC
  20789.         case RULER = FRX_RULER_METRIC
  20790.             vRetVal = UNITS_METRIC_LOC
  20791.         case RULER = FRX_RULER_PIXELS
  20792.             vRetVal = UNITS_PIXELS_LOC
  20793.         case RULER = FRX_RULER_CHARACTERS
  20794.             vRetVal = UNITS_CHARACTERS_LOC
  20795.         otherwise
  20796.             vRetVal = "?"
  20797.         endcase
  20798.     endif
  20799. case upper(m.cKey) = "MULTICOLUMN"
  20800.     *-------------------------------------------------------
  20801.     * If a report has multiple columns,
  20802.     * then the column width is not the default:
  20803.     *-------------------------------------------------------
  20804.     *vRetVal = (WIDTH <> -1)                        
  20805.     *-------------------------------------------------------
  20806.     * could also check for existence of ColumnHeader:
  20807.     *-------------------------------------------------------
  20808.     *vRetVal = THIS.hasBand(OBJCODE_COLHEADER)
  20809.     *-------------------------------------------------------
  20810.     * or just how many columns?
  20811.     *-------------------------------------------------------
  20812.     vRetVal = (VPOS > 1)
  20813. case upper(m.cKey) = "COLUMNCOUNT"
  20814.     vRetVal = VPOS
  20815. case upper(m.cKey) = "PROTECTION"
  20816.     vRetVal = ORDER
  20817. case upper(m.cKey) = "SNAKED_COLUMNS"
  20818.     vRetVal = BOTTOM
  20819. *case upper(m.cKey) = "DEFAULT FONT"
  20820. endcase
  20821. THIS.goRec( m.curRec, 'frx')
  20822. select (m.curSel)
  20823. return m.vRetVal
  20824. ENDPROC
  20825. PROCEDURE createbandcursor
  20826. *=======================================================
  20827. * CreateBandCursor()
  20828. * Creats a cursor with the alias "bands" containing records
  20829. * of information for each band in the report.
  20830. * Returns .T. if successfully created.
  20831. *=======================================================
  20832. lparameter tcFrxAlias, tiSession
  20833. local curSel, curRec, curSession
  20834. if empty(m.tiSession) or (m.tiSession < 1)
  20835.    m.tiSession = set("datasession")
  20836. endif
  20837. m.curSession = set("datasession")
  20838. set datasession to (m.tiSession)   
  20839. if empty( m.tcFrxAlias )
  20840.     tcFrxAlias = 'frx'
  20841. endif
  20842. if not used(m.tcFrxAlias)
  20843.     set datasession to (m.curSession)
  20844.     return .F.
  20845. endif
  20846. curSel = select(0)
  20847. curRec = recno(m.tcFrxAlias)
  20848. *-------------------------------------------------------
  20849. * create the bands cursor:
  20850. *-------------------------------------------------------
  20851. if used("bands")
  20852.     use in bands
  20853. endif
  20854. select 0
  20855. create cursor bands ( ;
  20856.     UNIQUEID c(10), ;
  20857.     OBJTYPE N(2,0), ;
  20858.     OBJCODE n(3,0), ;
  20859.     EXPR M, ;
  20860.     BANDLABEL c(35), ;
  20861.     START n(9,3), ;
  20862.     STOP n(9,3), ;
  20863.     HEIGHT n(9,3), ;
  20864.     P_START i, ;
  20865.     P_STOP i, ;
  20866.     P_HEIGHT i, ;
  20867.     R_START i, ;
  20868.     R_STOP i, ;
  20869.     RESETTOTAL i, ;
  20870.     BAND_SEQ i, ;
  20871.     REL_BAND_ID c(10), ;
  20872.     REC_NO i )
  20873. *-------------------------------------------------------
  20874. * Initialise stuff:
  20875. *-------------------------------------------------------
  20876. local nStart, iStart, iDetailCount
  20877. local cSuffix, iBandCount, oRec
  20878. local oGroup, oHeader
  20879. local lcTitleId, lcSummaryId
  20880. nStart  = 0.000 
  20881. iStart  = 0
  20882. oGroup  = newobject("Collection")
  20883. oHeader = newobject("Collection")
  20884. iBandCount   = 0
  20885. iDetailCount = 0
  20886. store "" to lcTitleId, lcSummaryId
  20887. *-------------------------------------------------------
  20888. * Scan through the band records, building up the information
  20889. * and then insert a new record into the bands cursor:
  20890. *-------------------------------------------------------
  20891. select (m.tcFrxAlias)
  20892. scan for    OBJTYPE = FRX_OBJTYP_BAND ;
  20893.             and not deleted()  and ;
  20894.             PLATFORM = FRX_PLATFORM_WINDOWS
  20895.     *----------------------------------------------
  20896.     * Initialise the record buffer
  20897.     *----------------------------------------------
  20898.     select bands
  20899.     scatter memo blank name oRec
  20900.     select (m.tcFrxAlias)
  20901.     iBandCount     = m.iBandCount + 1
  20902.     oRec.BAND_SEQ  = m.iBandCount
  20903.     *----------------------------------------------
  20904.     * Transfer over some field values:
  20905.     *----------------------------------------------
  20906.     oRec.UNIQUEID   = UNIQUEID
  20907.     oRec.REC_NO     = recno()
  20908.     oRec.OBJTYPE    = OBJTYPE
  20909.     oRec.OBJCODE    = OBJCODE
  20910.     oRec.EXPR       = EXPR
  20911.     oRec.BANDLABEL  = THIS.getTargetTypeText( OBJTYPE, OBJCODE )
  20912.     *----------------------------------------------
  20913.     * Save for later:
  20914.     *----------------------------------------------
  20915.     if OBJCODE = FRX_OBJCOD_TITLE
  20916.         lcTitleID = UNIQUEID
  20917.     endif
  20918.     if OBJCODE = FRX_OBJCOD_SUMMARY
  20919.         lcSummaryID = UNIQUEID
  20920.     endif
  20921.     *----------------------------------------------
  20922.     * Determine related header/footer IDs:
  20923.     *----------------------------------------------
  20924.     do case
  20925.     case inlist( OBJCODE, FRX_OBJCOD_PAGEHEADER, FRX_OBJCOD_COLHEADER, FRX_OBJCOD_GROUPHEADER, FRX_OBJCOD_DETAILHEADER )
  20926.         *-------------------------------------
  20927.         * Push the header ID on the stack:
  20928.         *-------------------------------------
  20929.         oHeader.Add( UNIQUEID )        
  20930.     case inlist( OBJCODE, FRX_OBJCOD_PAGEFOOTER, FRX_OBJCOD_COLFOOTER, FRX_OBJCOD_GROUPFOOTER, FRX_OBJCOD_DETAILFOOTER )    
  20931.         *-------------------------------------
  20932.         * Pop the related header ID off the stack and 
  20933.         * store it:
  20934.         *-------------------------------------
  20935.         oRec.REL_BAND_ID = oHeader.Item( oHeader.Count )
  20936.         oHeader.Remove( oHeader.Count )
  20937.     endcase
  20938.     *----------------------------------------------
  20939.     * Some bands need extra info in their labels:
  20940.     *----------------------------------------------
  20941.     do case 
  20942.     case OBJCODE = FRX_OBJCOD_GROUPHEADER
  20943.         cSuffix = ":" + trim(EXPR)         
  20944.         oGroup.Add( m.cSuffix )
  20945.         oRec.RESETTOTAL = FRX_RESETTOTAL_GROUP_OFFSET + oGroup.Count
  20946.     case OBJCODE = FRX_OBJCOD_DETAIL
  20947.         iDetailCount = m.iDetailCount + 1
  20948.         oRec.RESETTOTAL = FRX_RESETTOTAL_DETAIL_OFFSET + m.iDetailCount
  20949.         cSuffix = " " + transform( m.iDetailCount ) ;
  20950.                 + iif(not empty( trim(EXPR)), ":" + trim(EXPR), "")
  20951.     case OBJCODE = FRX_OBJCOD_GROUPFOOTER
  20952.         cSuffix = oGroup.Item( oGroup.Count )
  20953.         oGroup.Remove( oGroup.Count )
  20954.     otherwise
  20955.         cSuffix = ""
  20956.     endcase
  20957.     oRec.BANDLABEL = oRec.BANDLABEL + m.cSuffix
  20958.     *----------------------------------------------
  20959.     * Band dimensions:
  20960.     *----------------------------------------------
  20961.     oRec.HEIGHT    = HEIGHT
  20962.     oRec.P_HEIGHT  = THIS.FruToPixels( HEIGHT )
  20963.     oRec.START       = m.nStart    
  20964.     oRec.STOP       = m.nStart + oRec.HEIGHT   + BAND_SEPARATOR_HEIGHT_FRUS
  20965.     nStart         = oRec.STOP
  20966.     oRec.P_START   = m.iStart
  20967.     oRec.P_STOP    = m.iStart + oRec.P_HEIGHT + BAND_SEPARATOR_HEIGHT_PIXELS - 1
  20968.     iStart         = oRec.P_STOP + 1
  20969.     *----------------------------------------------
  20970.     * Run-time Band dimensions:
  20971.     *----------------------------------------------
  20972.     oRec.R_START   = oRec.P_START - 18
  20973.     oRec.R_STOP    = oRec.P_STOP - 2  && per RICHSTA
  20974. *    oRec.R_STOP    = oRec.P_STOP - 3  && empirically
  20975.     *----------------------------------------------
  20976.     * Add the record to the cursor:
  20977.     *----------------------------------------------
  20978.     insert into bands from name oRec
  20979. endscan
  20980. *----------------------------------------------
  20981. * Retro-fit the Headers' relative Footer band id:
  20982. *----------------------------------------------
  20983. select bands
  20984. local iRec, cFooterId, cBandId 
  20985.     if not empty( REL_BAND_ID )
  20986.         iRec = recno()
  20987.         m.cFooterId = UNIQUEID
  20988.         m.cHeaderId = REL_BAND_ID
  20989.         locate for UNIQUEID = m.cHeaderId
  20990.         if found()
  20991.             replace REL_BAND_ID with m.cFooterId
  20992.         endif
  20993.         go m.iRec
  20994.     endif
  20995. endscan
  20996. if not empty( m.lcTitleId ) and not empty( m.lcSummaryId )
  20997.     *----------------------------------------------
  20998.     * Match up relative band ids:
  20999.     *----------------------------------------------
  21000.     locate for UNIQUEID = m.lcTitleID
  21001.     replace REL_BAND_ID with m.lcSummaryId
  21002.     locate for UNIQUEID = m.lcSummaryID
  21003.     replace REL_BAND_ID with m.lcTitleId
  21004. endif
  21005. go top in bands
  21006. release oGroup, oHeader
  21007. THIS.goRec(m.curRec, m.tcFrxAlias)
  21008. select (m.curSel)        
  21009. set datasession to (m.curSession)
  21010. return .T.
  21011. ENDPROC
  21012. PROCEDURE hasband
  21013. *=======================================================
  21014. * HasBand( objCode )
  21015. * Returns .T. if the report has the specified type of 
  21016. * band record.
  21017. * Calls .createBandCursor() if necessary.
  21018. *=======================================================
  21019. lparameter iObjCode 
  21020. if not used('bands')
  21021.     THIS.createBandCursor()
  21022. endif
  21023. local curSel, lRetVal
  21024. curSel = select(0)
  21025. lRetVal = .F.
  21026. select bands
  21027. locate for OBJCODE = m.iObjCode
  21028. if found()
  21029.     lRetVal = .T.
  21030. endif
  21031. select (m.curSel)
  21032. return m.lRetVal    
  21033. ENDPROC
  21034. PROCEDURE hasdetailheader
  21035. *=======================================================
  21036. * HasDetailHeader( UNIQUED )
  21037. * Returns .T. if the specifed Detail band has an associated 
  21038. * "detail header" band.
  21039. * Calls .createBandCursor() if necessary.
  21040. *=======================================================
  21041. lparameter cUniqueId 
  21042. if not used('bands')
  21043.     THIS.createBandCursor()
  21044. endif
  21045. local curSel, lRetval
  21046. curSel = select(0)
  21047. lRetVal = .F.
  21048. select bands
  21049. locate for UNIQUEID = m.cUniqueId
  21050. skip -1
  21051. lRetVal = (OBJTYPE = FRX_OBJTYP_BAND and OBJCODE = FRX_OBJCOD_DETAILHEADER)
  21052. select (m.curSel)
  21053. return m.lRetVal
  21054. ENDPROC
  21055. PROCEDURE createobjectcursor
  21056. *=======================================================
  21057. * CreateObjectCursor()
  21058. * Creates a cursor (alias: objects) of records for each 
  21059. * object in the report.
  21060. * Returns .T. if successful.
  21061. * Calls .createBandCursor() if necessary.
  21062. *=======================================================
  21063. lparameter tcFrxAlias, tcDestAlias, tiFilter, tlRuntimeMode, tiSession
  21064. *-------------------------------------------------------
  21065. * Ensure parameters are initialised appropriately:
  21066. *-------------------------------------------------------
  21067. if vartype( m.tiFilter ) = "L"
  21068.     tiFilter = OBJCSR_ALL_OBJECTS_IGNORE_GROUPS
  21069. endif    
  21070. if empty( m.tcDestAlias )
  21071.     tcDestAlias = 'objects'
  21072. endif
  21073. if empty( m.tcFrxAlias )
  21074.     tcFrxAlias = 'frx'
  21075. endif
  21076. local curSel, curRec, curSession
  21077. if empty(m.tiSession) or (m.tiSession < 1)
  21078.    m.tiSession = set("datasession")
  21079. endif 
  21080. m.curSession = set("datasession")
  21081. set datasession to (m.tiSession)
  21082. m.curSel = select(0)
  21083. if not used(m.tcFrxAlias)
  21084.     set datasession to (m.curSession)
  21085.     return .F.
  21086.     curRec = recno(m.tcFrxAlias)
  21087. endif
  21088. if not used('bands')
  21089.     if not THIS.createBandCursor(m.tcFrxAlias)
  21090.         select (m.curSel)
  21091.         set datasession to (m.curSession)        
  21092.         return .F.
  21093.     endif
  21094. endif
  21095. *-------------------------------------------------------
  21096. * create the objects cursor:
  21097. *-------------------------------------------------------
  21098. if used( m.tcDestAlias )
  21099.     use in (m.tcDestAlias)
  21100. endif
  21101. select 0
  21102. create cursor &tcDestAlias ( ;
  21103.     UNIQUEID c(10), ;
  21104.     OBJTYPE N(2,0), ;
  21105.     OBJCODE n(3,0), ;
  21106.     EXPR M, ;
  21107.     VPOS n(9,3), ;
  21108.     HPOS n(9,3), ;
  21109.     HEIGHT n(9,3),;
  21110.     WIDTH n(9,3),;
  21111.     OBJNAME c(50),;
  21112.     LOCALE_ID i, ;
  21113.     P_START i, ;
  21114.     P_STOP i, ;
  21115.     P_HEIGHT i, ;    
  21116.     BAND_OFFSET i, ;
  21117.     START_BAND_ID c(10),;
  21118.     END_BAND_ID c(10), ;
  21119.     BANDLABEL c(75), ;
  21120.     SELECTED l, ;
  21121.     OBJ_PICT c(12), ;
  21122.     BAND_SEQ i, ;
  21123.     REC_NO i, ;
  21124.     TYPE_SEQ i, ;
  21125.     CTYPE c(10) )
  21126. *-------------------------------------------------------
  21127. * Select object records from the FRX:
  21128. *-------------------------------------------------------
  21129. do case
  21130. case m.tiFilter = OBJCSR_ALL_OBJECTS_IGNORE_GROUPS
  21131.     *-------------------------------------------------
  21132.     * all object records (ignoring grouped items):
  21133.     *-------------------------------------------------
  21134.     select (m.tcFrxAlias)
  21135.     scan for     inlist( OBJTYPE, FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, ;
  21136.                     FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21137.                   not deleted()  and ;
  21138.                 PLATFORM = FRX_PLATFORM_WINDOWS
  21139.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21140.     endscan
  21141. case m.tiFilter = OBJCSR_SHOW_ALL_OBJECTS
  21142.     *-------------------------------------------------
  21143.     * All objects+grouped objects in report:
  21144.     * Show groups as separate objects
  21145.     * do not expand grouped objects
  21146.     *-------------------------------------------------
  21147.     select (m.tcFrxAlias)
  21148.     scan for    inlist( OBJTYPE, FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, ;
  21149.                         FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21150.                 not deleted()  and ;
  21151.                 PLATFORM = FRX_PLATFORM_WINDOWS
  21152.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21153.     endscan
  21154.     *-------------------------------------------------
  21155.     * Now remove the grouped ones 
  21156.     *-------------------------------------------------
  21157.     local iGrpStart, iGrpCount
  21158.     scan for OBJTYPE = FRX_OBJTYP_GROUP
  21159.         iGrpStart = VPOS
  21160.         iGrpCount = HPOS
  21161.         select (m.tcDestAlias)
  21162.         go m.iGrpStart
  21163.         delete next m.iGrpCount        
  21164.         select (m.tcFrxAlias)        
  21165.     endscan    
  21166.     *-------------------------------------------------
  21167.     * Now add the groups themselves
  21168.     *-------------------------------------------------
  21169.     scan for OBJTYPE = FRX_OBJTYP_GROUP
  21170.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21171.     endscan    
  21172. case m.tiFilter = OBJCSR_FILTER_ON_SELECTED
  21173.     *-------------------------------------------------
  21174.     * All currently selected object records:
  21175.     * do not show grouped objects
  21176.     * Show groups as separate objects
  21177.     *-------------------------------------------------
  21178.     select (m.tcFrxAlias)
  21179.     scan for    inlist( OBJTYPE, FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, ;
  21180.                     FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21181.                 not deleted() and ;
  21182.                 CURPOS  and ;
  21183.                 PLATFORM = FRX_PLATFORM_WINDOWS                
  21184.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21185.     endscan
  21186.     *-------------------------------------------------
  21187.     * Now add any selected grouped items themselves:
  21188.     *-------------------------------------------------
  21189.     scan for     OBJTYPE = FRX_OBJTYP_GROUP and ;
  21190.                 CURPOS and ;
  21191.                 PLATFORM = FRX_PLATFORM_WINDOWS
  21192.         THIS.createObjCursorRecord( tcDestAlias, m.tlRuntimeMode )
  21193.     endscan    
  21194. endcase
  21195. go top in (m.tcDestAlias)
  21196. THIS.goRec(m.curRec, m.tcFrxAlias)
  21197. select (m.curSel)
  21198. set datasession to (m.curSession)
  21199. return .T.
  21200. ENDPROC
  21201. PROCEDURE createobjcursorrecord
  21202. *=======================================================
  21203. * createObjCursorRecord()
  21204. * Assumes: current alias is the source
  21205. *=======================================================
  21206. lparameters tcDestAlias, tlRuntimeMode
  21207. local srcAlias, lIsGroup, oRec
  21208. srcAlias = alias()
  21209. lIsGroup = .F.
  21210. select (m.tcDestAlias)
  21211. scatter memo blank name oRec
  21212. select (m.srcAlias)
  21213. oRec.REC_NO  = recno()
  21214. oRec.OBJNAME = THIS.GetFrxRecDisplayName()
  21215. do case 
  21216. case OBJTYPE = FRX_OBJTYP_LABEL
  21217.     oRec.CTYPE     = TARGET_TEXT_LABEL_LOC
  21218.     oRec.OBJ_PICT  = "pslabel.bmp"
  21219.     oRec.LOCALE_ID = THIS.CharsetToLocale( RESOID )    
  21220.     oRec.TYPE_SEQ  = 1
  21221. case OBJTYPE = FRX_OBJTYP_FIELD
  21222.     oRec.CTYPE     = TARGET_FIELD_LOC
  21223.     oRec.OBJ_PICT  = "pseditbx.bmp"
  21224.     oRec.LOCALE_ID = THIS.CharsetToLocale( RESOID )    
  21225.     oRec.TYPE_SEQ  = 2
  21226. case OBJTYPE = FRX_OBJTYP_LINE
  21227.     oRec.CTYPE     = TARGET_LINE_LOC
  21228.     oRec.OBJ_PICT  = "psline.bmp"
  21229.     oRec.TYPE_SEQ  = 3
  21230. case OBJTYPE = FRX_OBJTYP_RECTANGLE
  21231.     oRec.CTYPE    = TARGET_BOX_LOC
  21232.     oRec.OBJ_PICT = "pshape.bmp"
  21233.     oRec.TYPE_SEQ  = 4
  21234. case OBJTYPE = FRX_OBJTYP_PICTURE
  21235.     oRec.CTYPE    = TARGET_PICTURE_LOC
  21236.     oRec.OBJ_PICT = "psolebnd.bmp"
  21237.     oRec.TYPE_SEQ  = 5
  21238. case OBJTYPE = FRX_OBJTYP_GROUP
  21239.     oRec.CTYPE    = TARGET_GROUPED_LOC
  21240.     oRec.OBJ_PICT = "group2.bmp"
  21241.     lIsGroup = .T.
  21242.     oRec.TYPE_SEQ  = 6
  21243. endcase
  21244. oRec.UNIQUEID = UNIQUEID
  21245. oRec.OBJTYPE  = OBJTYPE
  21246. oRec.OBJCODE  = OBJCODE
  21247. oRec.EXPR     = EXPR
  21248. oRec.VPOS     = VPOS
  21249. oRec.HPOS     = HPOS
  21250. oRec.HEIGHT   = HEIGHT
  21251. oRec.P_START  = THIS.FruToPixels( VPOS )
  21252. oRec.P_HEIGHT = THIS.FruToPixels( HEIGHT )
  21253. oRec.P_STOP   = (oRec.P_START + oRec.P_HEIGHT - 1)
  21254. oRec.WIDTH    = WIDTH
  21255. oRec.SELECTED = CURPOS
  21256. if not m.lIsGroup
  21257.     if m.tlRuntimeMode
  21258.         *--------------------------------------------------------
  21259.         * Determine the object's location, start and end bands,
  21260.         * as determined by the report run-time engine, using the 
  21261.         * two adjusted lookup cursors we created earlier:
  21262.         *--------------------------------------------------------
  21263.         *-------------------------------------------
  21264.         * Scan bottom up for start points: 
  21265.         *-------------------------------------------
  21266.         select bands
  21267.         go bottom
  21268.         do while .T.
  21269.             if R_START <= oRec.P_START
  21270.                 oRec.START_BAND_ID = UNIQUEID
  21271.                 oRec.BANDLABEL     = trim(BANDLABEL)
  21272.                 oRec.BAND_OFFSET   = oRec.P_START - P_START
  21273.                 oRec.BAND_SEQ      = BAND_SEQ
  21274.                 exit
  21275.             endif            
  21276.             if recno()=1
  21277.                 exit
  21278.             endif
  21279.             skip -1 in bands
  21280.         enddo
  21281.         *-------------------------------------------
  21282.         * scan top down for end points: 
  21283.         *-------------------------------------------
  21284.         select bands
  21285.         go top
  21286.         *-------------------------------------------
  21287.         * This difference between object types 
  21288.         * was determined through empirical testing.
  21289.         * It may have some flaws.
  21290.         *-------------------------------------------
  21291.         do case
  21292.         case inlist(oRec.OBJTYPE, FRX_OBJTYP_LABEL ) 
  21293.             locate for R_STOP > oRec.P_STOP
  21294.         otherwise
  21295.             locate for R_STOP >= oRec.P_STOP
  21296.         endcase
  21297.         if found()
  21298.             *-------------------------------------------
  21299.             * an object cannot end in a band above 
  21300.             * that in which it starts:
  21301.             *-------------------------------------------
  21302.             if BAND_SEQ >= oRec.BAND_SEQ
  21303.                 oRec.END_BAND_ID   = UNIQUEID
  21304.             else
  21305.                 oRec.END_BAND_ID   = oRec.START_BAND_ID
  21306.             endif
  21307.         else
  21308.             *---------------------------------------------------
  21309.             * The object runs off the bottom of the band array.
  21310.             * Force the object to end in the Page Footer:
  21311.             *---------------------------------------------------
  21312.             locate for OBJCODE = FRX_OBJCOD_PAGEFOOTER
  21313.             if found()
  21314.                 oRec.END_BAND_ID   = UNIQUEID
  21315.             endif
  21316.         endif
  21317.         *---------------------------------------------------
  21318.         * Show both start and end bands against the object:
  21319.         *---------------------------------------------------
  21320.         if oRec.END_BAND_ID <> oRec.START_BAND_ID
  21321.             oRec.BANDLABEL = oRec.BANDLABEL + "..." + trim(BANDLABEL)
  21322.         endif
  21323.         *---------------------------------------------------
  21324.         * If an object starts and ends in two different bands...
  21325.         *---------------------------------------------------
  21326.         if oRec.START_BAND_ID <> oRec.END_BAND_ID
  21327.             select bands
  21328.             locate for UNIQUEID = oRec.START_BAND_ID
  21329.             if empty( REL_BAND_ID ) or REL_BAND_ID # oRec.END_BAND_ID
  21330.                 *---------------------------------------------------
  21331.                 * ...that are not a matched Header-Footer pair,
  21332.                 * then the object is forced into the PageHeader band.
  21333.                 *---------------------------------------------------
  21334.                 locate for OBJTYPE = FRX_OBJTYP_BAND ;
  21335.                        and OBJCODE = FRX_OBJCOD_PAGEHEADER
  21336.                 oRec.START_BAND_ID = UNIQUEID
  21337.                 do case
  21338.                 case inlist(oRec.OBJTYPE, FRX_OBJTYP_RECTANGLE )
  21339.                     oRec.BANDLABEL     = TARGET_UNPREDICTABLE_LOC + " (" + trim(oRec.BANDLABEL) + ")"
  21340.                 otherwise
  21341.                     oRec.BANDLABEL     = TARGET_FORCED_PAGEHEADER_LOC + " (" + trim(oRec.BANDLABEL) + ")"
  21342.                 endcase
  21343.                 oRec.BAND_SEQ      = 99
  21344.                 oRec.END_BAND_ID   = ""
  21345.                 oRec.BAND_OFFSET   = oRec.P_START - P_START && real start, not the run-time one
  21346.             endif
  21347.         endif        
  21348.     else
  21349.         *--------------------------------------------------------
  21350.         * Determine the object's location, start and end bands,
  21351.         * as determined by the Report Designer:
  21352.         *--------------------------------------------------------
  21353.         select bands
  21354.         locate for P_START <= oRec.P_START ;
  21355.                and P_STOP  >= oRec.P_START
  21356.         if found()
  21357.             oRec.START_BAND_ID = UNIQUEID
  21358.             oRec.BAND_OFFSET   = oRec.P_START - P_START
  21359.             oRec.BANDLABEL     = trim(BANDLABEL)
  21360.             oRec.BAND_SEQ      = BAND_SEQ
  21361.         endif    
  21362.         select bands
  21363.         locate for P_START <= oRec.P_STOP ;
  21364.                and P_STOP  >= oRec.P_STOP
  21365.         if found()
  21366.             oRec.END_BAND_ID = UNIQUEID
  21367.             if oRec.END_BAND_ID <> oRec.START_BAND_ID
  21368.                 oRec.BANDLABEL = oRec.BANDLABEL + " - " + trim(BANDLABEL)
  21369.             endif
  21370.         endif    
  21371.     endif
  21372. endif
  21373. insert into (m.tcDestAlias) from name oRec
  21374. select (m.srcAlias)
  21375. return
  21376. ENDPROC
  21377. PROCEDURE charsettolocale
  21378. *=======================================================
  21379. * CharsetToLocale( nCharset )
  21380. * We need to map a given Font Charset to a candidate locale
  21381. * for use with the STRCONV() function.
  21382. *----------------------------------------------------------
  21383. * References: Q224804, Q232625
  21384. * also http://www.science.co.il/Language-Locale-Codes.asp
  21385. * Charset------------------- CodePage---- Locale (hex / dec)
  21386. *   0   Western              1252                   1033
  21387. * 178   Arabic               1256, 864     0x0401 / 1025 (saudi)
  21388. * 186   Baltic               1257,         0x0425 / 1061
  21389. * 134   Chinese Simplified    936          0x0804 / 2052
  21390. * 136   Chinese Traditional   950          0x0404 / 1028
  21391. * 238   Central European     1250,         0x0405 / 1029  (Czech)
  21392. * 204   Cyrillic             1251, 855     0x0419 / 1049  (Russian)
  21393. * 161   Greek                1253, 869     0x0408 / 1032
  21394. * 177   Hebrew               1255          0x040d / 1037
  21395. * 128   Japanese              932          0x0411 / 1041
  21396. * 129   Korean               1361, 949     0x0412 / 1042
  21397. * 162   Turkish              1254, 857     0x041f / 1055
  21398. * 163   Vietnamese           1258          0x042a / 1066
  21399. *=======================================================
  21400. lparameter nCharset
  21401. do case
  21402. case inlist( m.nCharset, -1, 1 )
  21403.     * Charset not assigned or system default 
  21404.     * Map to default locale:
  21405.     return 0
  21406. case inlist( m.nCharset, 0 )
  21407.     * 0 = Western
  21408.     return 1033
  21409. case inlist( m.nCharset, 2, 77, 255 )
  21410.     * These are generic. Map to default locale?
  21411.     return 0
  21412. case m.nCharset = 178
  21413.     * 178   Arabic               1256, 864     0x0401 / 1025 (saudi)
  21414.     return 1025
  21415. case m.nCharset = 186
  21416.     * 186   Baltic               1257,         0x0425 / 1061
  21417.     return 1061
  21418. case m.nCharset = 134
  21419.     * 134   Chinese Simplified    936          0x0804 / 2052
  21420.     return 2052
  21421. case m.nCharset = 136
  21422.     * 136   Chinese Traditional   950          0x0404 / 1028
  21423.     return 1028
  21424. case m.nCharset = 238
  21425.     * 238   Central European     1250,         0x0405 / 1029  (Czech)
  21426.     return 1029
  21427. case m.nCharset = 204
  21428.     * 204   Cyrillic             1251, 855     0x0419 / 1049  (Russian)
  21429.     return 1049
  21430. case m.nCharset = 161
  21431.     * 161   Greek                1253, 869     0x0408 / 1032
  21432.     return 1032
  21433. case m.nCharset = 177
  21434.     * 177   Hebrew               1255          0x040d / 1037
  21435.     return 1037
  21436. case m.nCharset = 128
  21437.     * 128   Japanese              932          0x0411 / 1041
  21438.     return 1041
  21439. case m.nCharset = 129
  21440.     * 129   Korean               1361, 949     0x0412 / 1042
  21441.     return 1042
  21442. case m.nCharset = 162
  21443.     * 162   Turkish              1254, 857     0x041f / 1055
  21444.     return 1055
  21445. case m.nCharset = 163
  21446.     * 163   Vietnamese           1258          0x042a / 1066
  21447.     return 1066
  21448. otherwise
  21449.     return 0
  21450. endcase
  21451. return 0
  21452. ENDPROC
  21453. PROCEDURE getbandfor
  21454. *=======================================================
  21455. * GetBandFor( UNIQUEID [, lStart ] )
  21456. * Returns a SCATTER NAME band object for the specified
  21457. * object.
  21458. * Calls .createObjectCursor() if necessary.
  21459. *=======================================================
  21460. lparameters cObjectId, lStart, iSession
  21461. local curSession
  21462. if empty(m.iSession) or (m.iSession < 1)
  21463.    iSession = set("datasession")
  21464. endif   
  21465. curSession = set("datasession")
  21466. set datasession to (m.iSession)
  21467. if not used('frx')
  21468.     set datasession to (m.curSession)
  21469.     return null
  21470. endif
  21471. if parameters() < 2
  21472.     lStart = .T.
  21473. endif
  21474. if not used('objects')
  21475.     THIS.createObjectCursor()
  21476. endif
  21477. local curSel, iRec, oBand
  21478. curSel = select(0)
  21479. oBand  = null
  21480. select objects
  21481. locate for UNIQUEID = m.cObjectId
  21482. if found()
  21483.     select bands
  21484.     if m.lStart
  21485.         locate for UNIQUEID = objects.START_BAND_ID
  21486.     else
  21487.         locate for UNIQUEID = objects.END_BAND_ID
  21488.     endif
  21489. endif            
  21490. if not found()
  21491.     go bottom
  21492. endif
  21493. *scatter fields UNIQUEID, OBJCODE, BANDLABEL, RESETTOTAL, REC_NO ;
  21494. *    name oBand
  21495. scatter name oBand
  21496. select (m.curSel)
  21497. set datasession to (m.curSession)
  21498. return oBand
  21499. ENDPROC
  21500. PROCEDURE synchobjectpositions
  21501. *=======================================================
  21502. * SynchObjectPositions()
  21503. * Updates the VPOS values in the FRX for each object,
  21504. * based on which band the object starts in, and the current
  21505. * height of each band as expressed in the bands cursor.
  21506. * Assumes: 
  21507. *   - bands and objects cursors have been prepared,
  21508. *   - current alias is an FRX cursor
  21509. *=======================================================
  21510. local curSel, curRec, cUID
  21511. curSel = select(0)
  21512. curRec = recno()
  21513. *-------------------------------------------------------
  21514. * Scan through the FRX cursor, 
  21515. * updating the VPOS to maintain the 
  21516. * same relative offset from the band it belongs to.
  21517. *-------------------------------------------------------
  21518. scan for     inlist( OBJTYPE, ;
  21519.                 FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD, FRX_OBJTYP_LINE, ;
  21520.                 FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_PICTURE ) and ;
  21521.             not deleted() and ;
  21522.             PLATFORM = FRX_PLATFORM_WINDOWS
  21523.     cUID = UNIQUEID
  21524.     *-------------------------------------------------------
  21525.     * for each object, restore the relative positions:
  21526.     *-------------------------------------------------------
  21527.     select objects
  21528.     locate for UNIQUEID = cUID
  21529.     select bands
  21530.     locate for UNIQUEID = objects.START_BAND_ID
  21531.     select (curSel)
  21532.     if found("bands") and found("objects")
  21533.         *-------------------------------------------------------
  21534.         * The bands and objects cursors use pixel-based math, so
  21535.         * convert back to FRUs:
  21536.         *-------------------------------------------------------
  21537.         replace VPOS with ;
  21538.             THIS.pixelsToFru( bands.P_START + objects.BAND_OFFSET    )
  21539.     endif
  21540. endscan
  21541. THIS.GoRec( m.curRec, alias() )
  21542. return
  21543. ENDPROC
  21544. PROCEDURE getobjectsinband
  21545. *=======================================================
  21546. * GetObjectsInBand( UNIQUEID [, lRecnos ] )
  21547. * returns a Collection of UNIQUEID values for each object
  21548. * in a given Band.
  21549. * Calls .createObjectCursor() if necessary.
  21550. *=======================================================
  21551. lparameter cBandId, lRecnos,iSession
  21552. local oBandObjects, curSel, curSession
  21553. if empty(m.iSession) or (m.iSession < 1)
  21554.    iSession = set("datasession")
  21555. endif   
  21556. curSession = set("datasession")
  21557. set datasession to (m.iSession)
  21558. curSel = select(0)
  21559. oBandObjects = newobject("Collection")
  21560. if not used("objects")
  21561.     THIS.createObjectCursor()
  21562. endif
  21563. select objects
  21564.     if objects.START_BAND_ID = m.cBandId
  21565.         *-------------------------------------------------------
  21566.         * the object is defined as starting in this band
  21567.         *-------------------------------------------------------
  21568.         if m.lRecnos
  21569.             oBandObjects.Add( objects.REC_NO )
  21570.         else
  21571.             oBandObjects.Add( objects.UNIQUEID )
  21572.         endif
  21573.     endif            
  21574. endscan
  21575. select (m.curSel)
  21576. set datasession to (m.curSession)
  21577. return oBandObjects
  21578. ENDPROC
  21579. PROCEDURE insertdataenvrecord
  21580. *=======================================================
  21581. * InsertDataEnvRecord( ID, NAME, EXPR, CODE )
  21582. * Inserts a data-environment object record into an FRX. 
  21583. * Assumes that the record pointer is located appropriately.
  21584. *=======================================================
  21585. lparameters liObjType, lcName, lcExpr, lcMethods
  21586. insert blank
  21587. replace ;
  21588.     PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  21589.     OBJTYPE      with m.liObjType, ;
  21590.     NAME        with m.lcName, ;
  21591.     EXPR        with m.lcExpr, ;
  21592.     TAG         with m.lcMethods, ;
  21593.     ENVIRON        with .F., ;
  21594.     CURPOS        with .F.
  21595. return
  21596. ENDPROC
  21597. PROCEDURE insertband
  21598. *=======================================================
  21599. * InsertBand()
  21600. * Inserts a band into an FRX. 
  21601. * Assumes that the record pointer is located appropriately.
  21602. *=======================================================
  21603. lparameters liObjCode 
  21604. insert blank
  21605. replace ;
  21606.     PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  21607.     UNIQUEID     with sys(2015), ;
  21608.     OBJTYPE      with FRX_OBJTYP_BAND, ;
  21609.     OBJCODE      with m.liObjCode, ;
  21610.     NOREPEAT    with .F., ;
  21611.     PAGEBREAK    with .F., ;
  21612.     COLBREAK    with .F., ;
  21613.     RESETPAGE    with .F., ;
  21614.     PLAIN        with .F., ;
  21615.     CURPOS        with .F.
  21616. return
  21617. ENDPROC
  21618. PROCEDURE inserttitleband
  21619. *=======================================================
  21620. * InsertTitleBand( lNewPage )
  21621. * Inserts a Title band record into the FRX
  21622. *=======================================================
  21623. lparameter lNewPage
  21624. go top
  21625. *-------------------------------------------------------
  21626. * will be inserted as the second record (as is appropriate)
  21627. *-------------------------------------------------------
  21628. THIS.insertBand( FRX_OBJCOD_TITLE )
  21629. replace ;
  21630.     HEIGHT    with 5000.000, ;
  21631.     PAGEBREAK with m.lNewPage
  21632. return
  21633. ENDPROC
  21634. PROCEDURE insertsummaryband
  21635. *=======================================================
  21636. * InsertSummaryBand( lNewPage, lPageHeader, lPageFooter )
  21637. * Inserts a Summary band into an FRX
  21638. *=======================================================
  21639. lparameter lNewPage, lPageHeader, lPageFooter
  21640. locate for OBJTYPE = FRX_OBJTYP_BAND and ;
  21641.             OBJCODE = FRX_OBJCOD_PAGEFOOTER
  21642. THIS.insertBand( FRX_OBJCOD_SUMMARY )
  21643. replace ;
  21644.     HEIGHT        with 5000.000, ;
  21645.     PAGEBREAK   with m.lNewPage, ;
  21646.     EJECTBEFOR  with m.lPageHeader, ;
  21647.     EJECTAFTER  with m.lPageFooter
  21648. return
  21649. ENDPROC
  21650. PROCEDURE insertdetailband
  21651. *=======================================================
  21652. * InsertDetailBand()
  21653. * Inserts a detail band into an FRX. 
  21654. * Assumes that the record pointer is located appropriately.
  21655. *=======================================================
  21656. THIS.insertBand( FRX_OBJCOD_DETAIL )
  21657. return
  21658. ENDPROC
  21659. PROCEDURE insertdetailheaderfooter
  21660. *=======================================================
  21661. * InsertDetailHeaderFooter()
  21662. * Inserts Detail Header and Footer bands into the FRX.
  21663. * Assumes: we are positioned on the detail band:
  21664. *=======================================================
  21665. insert blank
  21666. replace ;
  21667.     PLATFORM with FRX_PLATFORM_WINDOWS, ;
  21668.     UNIQUEID with sys(2015), ;
  21669.     OBJTYPE  with FRX_OBJTYP_BAND, ;
  21670.     OBJCODE  with FRX_OBJCOD_DETAILFOOTER
  21671. skip -1
  21672. insert before blank
  21673. replace ;
  21674.     PLATFORM with FRX_PLATFORM_WINDOWS, ;
  21675.     UNIQUEID with sys(2015), ;
  21676.     OBJTYPE  with FRX_OBJTYP_BAND, ;
  21677.     OBJCODE  with FRX_OBJCOD_DETAILHEADER
  21678. skip                    
  21679. return
  21680. ENDPROC
  21681. PROCEDURE setcolumncount
  21682. *=======================================================
  21683. * SetColumnCount( iCols )
  21684. * Adds or subtracts columns (and column header/footer
  21685. * records from the FRX.
  21686. * Assumes: the current workarea contains the FRX cursor.
  21687. * Calls: .createObjectCursor() if necessary.
  21688. *=======================================================
  21689. lparameter iCols
  21690. local lHasColBands, curRec, cFrxAlias
  21691. cFrxAlias = alias()
  21692. curRec = recno( m.cFrxAlias )
  21693. locate for     OBJTYPE = FRX_OBJTYP_REPORTHEADER and ;
  21694.             PLATFORM = FRX_PLATFORM_WINDOWS
  21695. replace VPOS with m.iCols
  21696. locate for    OBJTYPE = FRX_OBJTYP_BAND and ;
  21697.             OBJCODE = FRX_OBJCOD_COLHEADER and ;
  21698.             PLATFORM = FRX_PLATFORM_WINDOWS
  21699. lHasColBands = found()
  21700. THIS.goRec(m.curRec, m.cFrxAlias)
  21701. if (m.lHasColBands and m.iCols = 1) or ;
  21702.    (not m.lHasColBands and m.iCols > 1)
  21703.     THIS.createObjectCursor()
  21704.     do case 
  21705.     case (m.lHasColBands and m.iCols = 1)
  21706.         *-------------------------------------------------------
  21707.         * Remove the column header/footer bands:
  21708.         *-------------------------------------------------------
  21709.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  21710.                and OBJCODE = FRX_OBJCOD_COLHEADER ;
  21711.                and PLATFORM = FRX_PLATFORM_WINDOWS
  21712.         if found()
  21713.             delete
  21714.         endif
  21715.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  21716.                and OBJCODE = FRX_OBJCOD_COLFOOTER ;
  21717.                and PLATFORM = FRX_PLATFORM_WINDOWS
  21718.         if found()
  21719.             delete
  21720.         endif
  21721.     case (not m.lHasColBands and m.iCols > 1)
  21722.         *-------------------------------------------------------
  21723.         * Insert the column header/footer bands:
  21724.         *-------------------------------------------------------
  21725.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  21726.                and OBJCODE = FRX_OBJCOD_PAGEHEADER ;
  21727.                 and PLATFORM = FRX_PLATFORM_WINDOWS
  21728.         insert blank
  21729.         replace ;
  21730.             PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  21731.             UNIQUEID     with sys(2015), ;
  21732.             OBJTYPE      with FRX_OBJTYP_BAND, ;
  21733.             OBJCODE      with FRX_OBJCOD_COLHEADER, ;
  21734.             NOREPEAT    with .F., ;
  21735.             PAGEBREAK    with .F., ;
  21736.             COLBREAK    with .F., ;
  21737.             RESETPAGE    with .F., ;
  21738.             PLAIN        with .F., ;
  21739.             CURPOS        with .F.
  21740.         locate for OBJTYPE = FRX_OBJTYP_BAND ;
  21741.                and OBJCODE = FRX_OBJCOD_PAGEFOOTER ;
  21742.                and PLATFORM = FRX_PLATFORM_WINDOWS
  21743.         insert before blank
  21744.         replace ;
  21745.             PLATFORM     with FRX_PLATFORM_WINDOWS, ;
  21746.             UNIQUEID     with sys(2015), ;
  21747.             OBJTYPE      with FRX_OBJTYP_BAND, ;
  21748.             OBJCODE      with FRX_OBJCOD_COLFOOTER, ;
  21749.             NOREPEAT    with .F., ;
  21750.             PAGEBREAK    with .F., ;
  21751.             COLBREAK    with .F., ;
  21752.             RESETPAGE    with .F., ;
  21753.             PLAIN        with .F., ;
  21754.             CURPOS        with .F.
  21755.     endcase
  21756.     *-------------------------------------------------------
  21757.     * Refresh the band cursor:
  21758.     *-------------------------------------------------------
  21759.     THIS.createBandCursor()
  21760.     *-------------------------------------------------------
  21761.     * Using the offsets in object cursor and the 
  21762.     * new band heights in band cursor, re-sync the 
  21763.     * objects' positions:
  21764.     *-------------------------------------------------------
  21765.     THIS.synchObjectPositions()
  21766.     THIS.goRec(m.curRec, m.cFrxAlias)
  21767. endif
  21768. return
  21769. ENDPROC
  21770. PROCEDURE creategroupcursor
  21771. *=======================================================
  21772. * CreateGroupCursor()
  21773. * Creats a cursor with the alias "groups" containing records
  21774. * of information for each data group in the report.
  21775. * Used mainly by PanelGrouping class.
  21776. * Returns .T. if successfully created.
  21777. *=======================================================
  21778. lparameter tcFrxAlias, tiSession
  21779. local curSession
  21780. if empty(m.tiSession) or (m.tiSession < 1)
  21781.    m.tiSession = set("datasession")
  21782. endif 
  21783. m.curSession = set("datasession")
  21784. set datasession to (m.tiSession)
  21785. if empty( m.tcFrxAlias )
  21786.     tcFrxAlias = 'frx'
  21787. endif
  21788. if not used(m.tcFrxAlias)
  21789.     set datasession to (m.curSession)
  21790.     return .F.
  21791. endif
  21792. curSel = select(0)
  21793. *-------------------------------------------------------
  21794. * get the current report measurement units and tell our 
  21795. * converter to use them:
  21796. *-------------------------------------------------------
  21797. local iUnits
  21798. iUnits     = THIS.getReportAttribute("UNITS")
  21799. *-------------------------------------------------------
  21800. * create the groups cursor:
  21801. *-------------------------------------------------------
  21802. if used("groups")
  21803.     use in groups
  21804. endif
  21805. select 0
  21806. create cursor groups ( ;
  21807.     UNIQUEID c(10), ;
  21808.     EXPR M, ;
  21809.     PAGINATE i, ;
  21810.     REPRINT l, ;
  21811.     THRESH n(9,3), ;
  21812.     FOOTER_ID c(10) )
  21813. *-------------------------------------------------------
  21814. * Initialise stuff:
  21815. *-------------------------------------------------------
  21816. local iPaginate, iCurRec, nThreshold, lisMultiCol
  21817. iPaginate   = 0
  21818. iCurRec     = recno(m.tcFrxAlias)
  21819. lIsMultiCol = THIS.getReportAttribute("MULTICOLUMN")
  21820. *-------------------------------------------------------
  21821. * Scan through the group header records, building up the information
  21822. * and then insert a new record into the groups cursor:
  21823. *-------------------------------------------------------
  21824. select (m.tcFrxAlias)
  21825. scan for OBJTYPE = FRX_OBJTYP_BAND and ;
  21826.          OBJCODE = FRX_OBJCOD_GROUPHEADER and ;
  21827.          not deleted() and ;
  21828.          PLATFORM = FRX_PLATFORM_WINDOWS
  21829.     *-------------------------------------
  21830.     * Pagination: try:
  21831.     * 1  ( ) Normal               (none set)
  21832.     * 2  ( ) Start on new column  (COLBREAK)
  21833.     * 3  ( ) Start on new page    (PAGEBREAK)
  21834.     * 4  ( ) Start on new page 1  (PAGEBREAK+RESETPAGE)
  21835.     *-------------------------------------
  21836.     do case
  21837.     case PAGEBREAK and RESETPAGE
  21838.         iPaginate = 4
  21839.     case PAGEBREAK 
  21840.         iPaginate = 3
  21841.     case COLBREAK
  21842.         if m.lIsMultiCol
  21843.             iPaginate = 2
  21844.         else
  21845.             *--------------------------------
  21846.             * Even though this option used to be set to "new column",
  21847.             * the report only has one column, so reset to default:
  21848.             *--------------------------------
  21849.             iPaginate = 1
  21850.         endif
  21851.     otherwise
  21852.         iPaginate = 1
  21853.     endcase
  21854.     *-------------------------------------
  21855.     * Calculate threshold in local units:
  21856.     *-------------------------------------
  21857.     nThreshold = THIS.getUnitValueFromFRU( WIDTH, m.iUnits )
  21858.     insert into groups values ( ;
  21859.         &tcFrxAlias..UNIQUEID, ;
  21860.         &tcFrxAlias..EXPR, ;
  21861.         m.iPaginate, ;
  21862.         &tcFrxAlias..NOREPEAT, ;
  21863.         m.nThreshold, ;
  21864.         "" )
  21865. endscan
  21866. *-------------------------------------------------------
  21867. * Now grab the group footer IDs as well. Note of course
  21868. * that they are in reverse order to the headers (nesting):
  21869. *-------------------------------------------------------
  21870. go bottom in groups
  21871. scan for OBJTYPE = FRX_OBJTYP_BAND and ;
  21872.          OBJCODE = FRX_OBJCOD_GROUPFOOTER and ;
  21873.          not deleted() and ;
  21874.          PLATFORM = FRX_PLATFORM_WINDOWS
  21875.     select groups
  21876.     replace FOOTER_ID with &tcFrxAlias..UNIQUEID
  21877.     skip -1        
  21878.     select (m.tcFrxAlias)
  21879. endscan
  21880. *-------------------------------------------------------
  21881. * Restore the record pointer in FRX (important)
  21882. *-------------------------------------------------------
  21883. THIS.goRec(m.icurRec, m.tcFrxAlias)
  21884. select (m.curSel)        
  21885. set datasession to (m.curSession)
  21886. return .T.
  21887. ENDPROC
  21888. PROCEDURE createvariablecursor
  21889. *=======================================================
  21890. * CreateVariableCursor()
  21891. * Creats a cursor with the alias "vars" containing records
  21892. * of information for each report variable in the report.
  21893. * Used mostly by panelVariables class
  21894. * Returns .T. if successfully created.
  21895. *=======================================================
  21896. lparameter tcFrxAlias, tiSession
  21897. local curSession
  21898. if empty(m.tiSession) or (m.tiSession < 1)
  21899.    m.tiSession = set("datasession")
  21900. endif 
  21901. m.curSession = set("datasession")
  21902. set datasession to (m.tiSession)
  21903. if empty( m.tcFrxAlias )
  21904.     tcFrxAlias = 'frx'
  21905. endif
  21906. if not used(m.tcFrxAlias)
  21907.     set datasession to (m.curSession)
  21908.     return .F.
  21909. endif
  21910. curSel = select(0)
  21911. *-------------------------------------------------------
  21912. * This is needed later on:
  21913. *-------------------------------------------------------
  21914. if not used("reset_on")
  21915.     THIS.createCalcResetOnCursor()
  21916. endif
  21917. *-------------------------------------------------------
  21918. * create the vars cursor:
  21919. *-------------------------------------------------------
  21920. if used("vars")
  21921.     use in vars
  21922. endif
  21923. select 0
  21924. create cursor vars ( ;
  21925.     UNIQUEID       C(10), ;
  21926.     VARNAME        M, ;
  21927.     VALUE_TO_STORE M, ;
  21928.     INITIAL_VALUE  M, ;
  21929.     RELEASE_VAR    L, ;
  21930.     CALC_TYPE      N(2,0), ;
  21931.     RESET_ON       N(2,0), ;
  21932.     REC_NO           I )
  21933. *-------------------------------------------------------
  21934. * Initialise stuff:
  21935. *-------------------------------------------------------
  21936. local iCurRec, iResetOn
  21937. iCurRec   = recno(m.tcFrxAlias)
  21938. *-------------------------------------------------------
  21939. * Scan through the variable records, building up the information
  21940. * and then insert a new record into the vars cursor:
  21941. *-------------------------------------------------------
  21942. select (m.tcFrxAlias)
  21943. scan for OBJTYPE = FRX_OBJTYP_VARIABLE and ;
  21944.          not deleted() and ;
  21945.          PLATFORM = FRX_PLATFORM_WINDOWS
  21946.     select reset_on
  21947.     locate for RESETTOTAL = &tcFrxAlias..RESETTOTAL
  21948.     insert into vars values ( ;
  21949.         &tcFrxAlias..UNIQUEID, ;
  21950.         &tcFrxAlias..NAME, ;
  21951.         &tcFrxAlias..EXPR, ;
  21952.         &tcFrxAlias..TAG, ;
  21953.         &tcFrxAlias..UNIQUE, ;
  21954.         &tcFrxAlias..TOTALTYPE+1, ;
  21955.         recno("reset_on"), ;
  21956.         recno(m.tcFrxAlias) )
  21957. endscan
  21958. *-------------------------------------------------------
  21959. * Restore the record pointer in FRX (important)
  21960. *-------------------------------------------------------
  21961. THIS.goRec(m.icurRec, m.tcFrxAlias)
  21962. select (m.curSel)        
  21963. set datasession to (m.curSession)
  21964. return .T.
  21965. ENDPROC
  21966. PROCEDURE createcalcresetoncursor
  21967. *=======================================================
  21968. * CreateCalcResetOnCursor()
  21969. * Creates a cursor with the alias "reset_on" containing records
  21970. * of information for each prompt in the Calculation Reset combobox.
  21971. * Returns .T. if successfully created.
  21972. *=======================================================
  21973. lparameter tcFrxAlias, tiSession
  21974. local curSession
  21975. if empty(m.tiSession) or (m.tiSession < 1)
  21976.    m.tiSession = set("datasession")
  21977. endif 
  21978. m.curSession = set("datasession")
  21979. set datasession to (m.tiSession)
  21980. if empty( m.tcFrxAlias )
  21981.     tcFrxAlias = 'frx'
  21982. endif
  21983. if not used(m.tcFrxAlias)
  21984.     set datasession to (m.curSession)
  21985.     return .F.
  21986. endif
  21987. local curSel, curRec, iGroupCount, iDetailCount, iNum
  21988. curSel = select(0)
  21989. *-------------------------------------------------------
  21990. * create the reset_on cursor:
  21991. *-------------------------------------------------------
  21992. if used("reset_on")
  21993.     use in reset_on
  21994. endif
  21995. create cursor reset_on (;
  21996.     UNIQUEID c(10), ;
  21997.     OBJCODE n(2,0) , ;
  21998.     PROMPT_TEXT c(30), ;
  21999.     RESETTOTAL i )
  22000. *-----------------------------------------------------------    
  22001. * Add in the report/Page resets:
  22002. *-----------------------------------------------------------    
  22003. insert into reset_on values ( "", 0, ENDOFREPORT_LOC, FRX_RESETTOTAL_ENDOFREPORT )
  22004. insert into reset_on values ( "", 0, ENDOFPAGE_LOC,   FRX_RESETTOTAL_ENDOFPAGE )
  22005. select (m.tcFrxAlias)
  22006. curRec = recno()
  22007. *-----------------------------------------------------------    
  22008. * Add in the column reset if there are multi-cols:
  22009. *-----------------------------------------------------------    
  22010. locate for OBJTYPE = FRX_OBJTYP_REPORTHEADER ;
  22011.        and PLATFORM = FRX_PLATFORM_WINDOWS
  22012. if VPOS > 1
  22013.     insert into reset_on values ( "", 0, ENDOFCOLUMN_LOC, FRX_RESETTOTAL_ENDOFCOLUMN )
  22014.     insert into reset_on values ( "", 0, "\"+ENDOFCOLUMN_LOC, FRX_RESETTOTAL_ENDOFCOLUMN )
  22015. endif
  22016. *-----------------------------------------------------------    
  22017. * Only add in the group reset if there are groups:
  22018. *-----------------------------------------------------------    
  22019. count for OBJTYPE = FRX_OBJTYP_BAND ;
  22020.       and OBJCODE = FRX_OBJCOD_GROUPHEADER ;
  22021.       and PLATFORM = FRX_PLATFORM_WINDOWS ;
  22022.       to iGroupCount
  22023. if m.iGroupCount > 0
  22024.     iNum = 1
  22025.     insert into reset_on values ( "", 0, "\-", 1001 )
  22026.     scan for OBJTYPE = FRX_OBJTYP_BAND ;
  22027.          and OBJCODE = FRX_OBJCOD_GROUPHEADER ;
  22028.          and PLATFORM = FRX_PLATFORM_WINDOWS
  22029.         insert into reset_on values ( ;
  22030.             &tcFrxAlias..UNIQUEID, ;
  22031.             &tcFrxAlias..OBJCODE, ;
  22032.             GROUP_BY_LOC + trim(&tcFrxAlias..EXPR), ;
  22033.             FRX_RESETTOTAL_GROUP_OFFSET + m.iNum )
  22034.         iNum = m.iNum + 1
  22035.     endscan
  22036. endif    
  22037. *-----------------------------------------------------------    
  22038. * Only add in the detail reset if this is a multi-detail report:
  22039. *-----------------------------------------------------------    
  22040. count for OBJTYPE = FRX_OBJTYP_BAND ;
  22041.       and OBJCODE = FRX_OBJCOD_DETAIL ;
  22042.       and PLATFORM = FRX_PLATFORM_WINDOWS ;
  22043.       to iDetailCount
  22044. if m.iDetailCount > 1
  22045.     iNum = 1
  22046.     insert into reset_on values ( "", 0, "\-", 1002 )
  22047.     scan for OBJTYPE = FRX_OBJTYP_BAND ;
  22048.          and OBJCODE = FRX_OBJCOD_DETAIL ;
  22049.          and PLATFORM = FRX_PLATFORM_WINDOWS
  22050.          
  22051.         insert into reset_on values ( ;
  22052.             &tcFrxAlias..UNIQUEID, ;
  22053.             &tcFrxAlias..OBJCODE, ;
  22054.             DETAIL_LOC + transform(m.iNum), ;
  22055.             FRX_RESETTOTAL_DETAIL_OFFSET + m.iNum  )    
  22056.         iNum = m.iNum + 1
  22057.     endscan
  22058. endif    
  22059. THIS.goRec(m.curRec, m.tcFrxAlias)
  22060. select (m.curSel)
  22061. set datasession to (m.curSession)
  22062. return .t.
  22063. ENDPROC
  22064. PROCEDURE createdefaultprintenvcursor
  22065. *=======================================================
  22066. * CreateDefaultPrintEnvCursor( <frxAlias>, <dataenvAlias> )
  22067. * Creates a one-row cursor with the same structure as the
  22068. * FRX. Default parameters are "frx", "defPrnEnv".
  22069. *=======================================================
  22070. lparameters lcFrxAlias, lcPEAlias, liSession
  22071. local curSel,curSession
  22072. if empty(m.liSession) or (m.liSession < 1)
  22073.    m.liSession = set("datasession")
  22074. endif 
  22075. m.curSession = set("datasession")
  22076. set datasession to (m.liSession)
  22077. curSel = select(0)
  22078. if empty( m.lcFrxAlias )
  22079.     lcFrxAlias = 'frx'
  22080. endif
  22081. if empty( m.lcPEAlias )
  22082.     lcPEAlias = 'defPrnEnv'
  22083. endif
  22084. select * ;
  22085.     from (m.lcFrxAlias) ;
  22086.     where OBJTYPE = FRX_OBJTYP_REPORTHEADER ;
  22087.       and PLATFORM = FRX_PLATFORM_WINDOWS ;
  22088.     into cursor (m.lcPEAlias) ;
  22089.     readwrite
  22090. =sys(1037,2)
  22091. select (m.curSel)
  22092. set datasession to (m.curSession)
  22093. return
  22094. ENDPROC
  22095. PROCEDURE getselectedobjectcount
  22096. *=======================================================
  22097. * getSelectedObjectCount( <frx> )
  22098. *=======================================================
  22099. lparameter lcFrxAlias
  22100. if empty( m.lcFrxAlias )
  22101.     lcFrxAlias = "frx"
  22102. endif
  22103. local cursel, curRec, selCount
  22104. curSel = select(0)
  22105. select (m.lcFrxAlias)
  22106. curRec = recno()
  22107. count for    CURPOS and ;
  22108.             PLATFORM = FRX_PLATFORM_WINDOWS and ;
  22109.             OBJTYPE <> 1 ;
  22110.     to m.selCount
  22111. go m.curRec
  22112. select (m.curSel)
  22113. return m.selCount
  22114. ENDPROC
  22115. PROCEDURE pushprintenvtocursor
  22116. *=======================================================
  22117. * pushPrintEnvToCursor( <alias> )
  22118. *=======================================================
  22119. lparameter cRegisterAlias
  22120. local curSel
  22121. curSel = select(0)
  22122. select * ;
  22123.     from frx ;
  22124.     where .F. ;
  22125.     into cursor (m.cRegisterAlias) ;
  22126.     readwrite
  22127. append Blank
  22128. result = sys(1037,2)
  22129. select (m.curSel)
  22130. return
  22131. ENDPROC
  22132. PROCEDURE popprintenv
  22133. *=======================================================
  22134. * popPrintEnv()
  22135. * assumes the FRX file to pop from is selected.
  22136. *=======================================================
  22137. result = sys(1037,3)
  22138. return
  22139. ENDPROC
  22140. PROCEDURE getfrxtimestamp
  22141. #define DEBUGGING .F.
  22142. *=======================================================
  22143. * GetFrxTimeStamp( vDateTime )
  22144. * Returns a FOX system file timestamp 
  22145. * from a date time value, any data type
  22146. * Calls: intToBin(), binToInt() from browser.scx code
  22147. *=======================================================
  22148. lparameter tvDateTime
  22149. *-------------------------------------------------------
  22150. * Default to current datetime
  22151. *-------------------------------------------------------
  22152. LOCAL ltDateTime, lvFoxTimeStamp, lvTemp
  22153. ltDateTime = CTOT(TRANSFORM(tvDateTime))
  22154. IF EMPTY(ltDateTime)
  22155.    ltDateTime = DATETIME()
  22156. ENDIF
  22157. #IF DEBUGGING
  22158.    ACTI SCREEN
  22159.    CLEAR
  22160.    ? ltDateTime
  22161. #ENDIF
  22162. *-------------------------------------------------------
  22163. * bits 4-0, seconds in two-second increments
  22164. *-------------------------------------------------------
  22165. lvTemp = SEC(ltDateTime) / 2
  22166. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),5),5,"0")
  22167. #IF DEBUGGING
  22168. ?  lvTemp
  22169. ?  lvFoxTimeStamp
  22170. #ENDIF
  22171. *-------------------------------------------------------
  22172. * bits 10-5, minutes
  22173. *-------------------------------------------------------
  22174. lvTemp = MINUTE(ltDateTime)
  22175. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),6),6,"0") + lvFoxTimeStamp
  22176. #IF DEBUGGING
  22177. ?  lvTemp
  22178. ?  lvFoxTimeStamp
  22179. #ENDIF
  22180. *-------------------------------------------------------
  22181. * bits 15-11, hours
  22182. *-------------------------------------------------------
  22183. lvTemp = HOUR(ltDateTime)
  22184. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),5),5,"0") + lvFoxTimeStamp
  22185. #IF DEBUGGING
  22186. ?  lvTemp
  22187. ?  lvFoxTimeStamp
  22188. #ENDIF
  22189. *-------------------------------------------------------
  22190. * bits 20-16, days
  22191. *-------------------------------------------------------
  22192. lvTemp = DAY(ltDateTime)
  22193. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),5),5,"0") + lvFoxTimeStamp
  22194. #IF DEBUGGING
  22195. ?  lvTemp
  22196. ?  lvFoxTimeStamp
  22197. #ENDIF
  22198. *-------------------------------------------------------
  22199. * bits 24-21, months
  22200. *-------------------------------------------------------
  22201. lvTemp = MONTH(ltDateTime)
  22202. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),4),4,"0") + lvFoxTimeStamp
  22203. #IF DEBUGGING
  22204. ?  lvTemp
  22205. ?  lvFoxTimeStamp
  22206. #ENDIF
  22207. *-------------------------------------------------------
  22208. * bits 31-25, years with a 1980 offset
  22209. *-------------------------------------------------------
  22210. lvTemp = YEAR(ltDateTime)-1980
  22211. lvFoxTimeStamp = PADL(RIGHT(THIS.IntToBin(lvTemp),7),7,"0") + lvFoxTimeStamp
  22212. #IF DEBUGGING
  22213. ?  lvTemp
  22214. ?  LEN(lvFoxTimeStamp)
  22215. ?  lvFoxTimeStamp
  22216. #ENDIF
  22217. lvFoxTimeStamp = THIS.BinToInt(lvFoxTimeStamp)
  22218. RETURN lvFoxTimeStamp
  22219. ENDPROC
  22220. PROCEDURE gettimestampstring
  22221. *=======================================================
  22222. * GetTimeStampString( iStamp )
  22223. * Returns a readable string version of a Fox system 
  22224. * timestamp, using current date settings
  22225. *=======================================================
  22226. lparameter tiStamp 
  22227. IF EMPTY(tiStamp) OR TYPE("tiStamp") # "N"  
  22228.    RETURN ""
  22229. ENDIF
  22230. LOCAL lnYearoffset,lcYear,lcMonth,;
  22231.       lcDay,lcHour,lcMinute,lcSecond
  22232. *-------------------------------------------------------
  22233. * lnYearoffset = INT(tiStamp/2^25)   && bits 31-25
  22234. *-------------------------------------------------------
  22235. lnYearoffset = BITRSHIFT(tiStamp,25)
  22236. lcYear = STR(1980 + lnYearoffset)
  22237. *-------------------------------------------------------
  22238. * lcMonth = STR(INT(tiStamp/2^21) % 2^4)  && bits 24-21
  22239. *-------------------------------------------------------
  22240. lcMonth = STR(BITRSHIFT(tiStamp,21) % 2^4)
  22241. *-------------------------------------------------------
  22242. * lcDay = STR(INT(tiStamp/2^16) % 2^5)    && bits 20-16
  22243. *-------------------------------------------------------
  22244. lcDay = STR(BITRSHIFT(tiStamp,16) % 2^5)
  22245. *-------------------------------------------------------
  22246. * lcHour = STR(INT(tiStamp/2^11) % 2^5)   && bits 15-11
  22247. *-------------------------------------------------------
  22248. lcHour = STR(BITRSHIFT(tiStamp,11) % 2^5)
  22249. *-------------------------------------------------------
  22250. * lcMinute = STR(INT(tiStamp/2^5) % 2^6)  && bits 10-5
  22251. *-------------------------------------------------------
  22252. lcMinute = STR(BITRSHIFT(tiStamp,5) % 2^6)
  22253. *-------------------------------------------------------
  22254. * lcSecond = STR(INT(tiStamp%2^5) * 2)    && bits 4-0 (two-second increments)   
  22255. *-------------------------------------------------------
  22256. lcSecond = STR(BITLSHIFT(tiStamp%2^5,1))
  22257. RETURN TTOC({^&lcYear./&lcMonth./&lcDay. &lcHour.:&lcMinute.:&lcSecond.})    
  22258. ENDPROC
  22259. PROCEDURE inttobin
  22260. *=======================================================
  22261. * IntToBin( int )
  22262. * Returns a binary form of an integer
  22263. *=======================================================
  22264. LPARAMETERS tnInteger
  22265. LOCAL lnInteger,lcBinary,lnDivisor,lnCount
  22266. IF EMPTY(tnInteger)
  22267.     RETURN "0"
  22268. ENDIF
  22269. lnInteger=INT(tnInteger)
  22270. lcBinary=""
  22271. FOR lnCount = 31 TO 0 STEP -1
  22272.     lnDivisor=2^lnCount
  22273.     IF lnDivisor>lnInteger
  22274.         lcBinary=lcBinary+"0"
  22275.         LOOP
  22276.     ENDIF
  22277.     lcBinary=lcBinary+IIF((lnInteger/lnDivisor)>0,"1","0")
  22278.     lnInteger=INT(lnInteger-lnDivisor)
  22279. ENDFOR
  22280. RETURN lcBinary
  22281. ENDPROC
  22282. PROCEDURE bintoint
  22283. *=======================================================
  22284. * BinToInt( cBytes )
  22285. * Returns an integer form of binary data
  22286. *=======================================================
  22287. LPARAMETERS tcBinary
  22288. LOCAL lcInteger,lnInteger,lnCount,lnStrLen
  22289. IF EMPTY(tcBinary)
  22290.     RETURN 0
  22291. ENDIF
  22292. lnStrLen=LEN(tcBinary)
  22293. lnInteger=0
  22294. FOR lnCount = 0 TO (lnStrLen-1)
  22295.     IF SUBSTR(tcBinary,lnStrLen-lnCount,1)=="1"
  22296.         lnInteger=lnInteger+2^lnCount
  22297.     ENDIF
  22298. ENDFOR
  22299. RETURN INT(lnInteger)
  22300. ENDPROC
  22301. PROCEDURE gettargettypetext
  22302. *=======================================================
  22303. * GetTargetTypeText( OBJTYPE, OBJCODE ) 
  22304. * Returns a readable string version of a target Type/Code
  22305. *=======================================================
  22306. lparameters nObjType, nObjCode 
  22307. if parameters() = 0
  22308.     nObjType = -1
  22309.     nObjCode = -1 
  22310. endif
  22311. do case
  22312. case m.nObjType = FRX_OBJTYPE_MULTISELECT
  22313.     return TARGET_MULTISELECT_LOC
  22314. case m.nObjType = FRX_OBJTYP_COMMENT
  22315.     return TARGET_REPORT_COMMENT_LOC
  22316. case m.nObjType = FRX_OBJTYP_REPORTHEADER
  22317.     return TARGET_REPORT_GLOBAL_LOC
  22318. case m.nObjType = 2
  22319.     return TARGET_WORKAREA_LOC
  22320. case m.nObjType = 3
  22321.     return TARGET_INDEX_LOC
  22322. case m.nObjType = 4
  22323.     return TARGET_RELATION_LOC
  22324. case m.nObjType = FRX_OBJTYP_LABEL
  22325.     return TARGET_TEXT_LABEL_LOC
  22326. case m.nObjType = FRX_OBJTYP_LINE
  22327.     return TARGET_LINE_LOC
  22328. case m.nObjType = FRX_OBJTYP_RECTANGLE
  22329.     return TARGET_BOX_LOC
  22330. case m.nObjType = FRX_OBJTYP_FIELD
  22331.     return TARGET_FIELD_LOC
  22332. case m.nObjType = FRX_OBJTYP_BAND
  22333.     do case
  22334.     case m.nObjCode = FRX_OBJCOD_TITLE
  22335.         return TARGET_TITLE_LOC
  22336.     case m.nObjCode = FRX_OBJCOD_PAGEHEADER
  22337.         return TARGET_PAGE_HEADER_LOC
  22338.     case m.nObjCode = FRX_OBJCOD_COLHEADER
  22339.         return TARGET_COL_HEADER_LOC
  22340.     case m.nObjCode = FRX_OBJCOD_GROUPHEADER
  22341.         return TARGET_GROUP_HEADER_LOC
  22342.     case m.nObjCode = FRX_OBJCOD_DETAIL
  22343.         return TARGET_DETAIL_LOC
  22344.     case m.nObjCode = FRX_OBJCOD_GROUPFOOTER
  22345.         return TARGET_GROUP_FOOTER_LOC
  22346.     case m.nObjCode = FRX_OBJCOD_COLFOOTER
  22347.         return TARGET_COL_FOOTER_LOC
  22348.     case m.nObjCode = FRX_OBJCOD_PAGEFOOTER
  22349.         return TARGET_PAGE_FOOTER_LOC
  22350.     case m.nObjCode = FRX_OBJCOD_SUMMARY
  22351.         return TARGET_SUMMARY_LOC
  22352.     case m.nObjCode = FRX_OBJCOD_DETAILHEADER
  22353.         return TARGET_DETAIL_HEADER_LOC
  22354.     case m.nObjCode = FRX_OBJCOD_DETAILFOOTER
  22355.         return TARGET_DETAIL_FOOTER_LOC
  22356.      otherwise
  22357.         return TARGET_UNKNOWN_BAND_LOC
  22358.     endcase
  22359. case m.nObjType = FRX_OBJTYP_GROUP
  22360.     return TARGET_GROUPED_LOC
  22361. case m.nObjType = FRX_OBJTYP_PICTURE
  22362.     return TARGET_PICTURE_LOC
  22363. case m.nObjType = FRX_OBJTYP_VARIABLE
  22364.     return TARGET_VARIABLE_LOC
  22365. case m.nObjType = FRX_OBJTYP_PDRIVER
  22366.     return TARGET_PDRIVER_LOC
  22367. case m.nObjType = FRX_OBJTYP_FONTRES
  22368.     return TARGET_FONTRESO_LOC
  22369. case m.nObjType = FRX_OBJTYP_DATAENV
  22370.     return TARGET_DATAENV_LOC
  22371. case m.nObjType = FRX_OBJTYP_DATAOBJ
  22372.     return TARGET_CURSOR_LOC
  22373. otherwise
  22374.     return TARGET_UNKNOWN_LOC
  22375. endcase
  22376. ENDPROC
  22377. PROCEDURE getunitvaluefromfru
  22378. *-------------------------------------------------
  22379. * Return a given unit value for a given value in FRUs,
  22380. * depending on the Units:
  22381. *-------------------------------------------------
  22382. lparameter nFruValue, iUnits
  22383. do case
  22384. case inlist( m.iUnits, FRX_RULER_INCHES, FRX_RULER_OFF)
  22385.     return (m.nFruValue / 10000)
  22386. case m.iUnits = FRX_RULER_METRIC
  22387.     return (m.nFruValue / (0.3937 * 10000))
  22388. case m.iUnits = FRX_RULER_CHARACTERS
  22389.     *---------------------------------------------------------
  22390.     * 1 char = 833.33 FRU
  22391.     * 1 char = 1/12 inch
  22392.     *---------------------------------------------------------
  22393.     return (m.nFruValue / 833.33)
  22394. *case THIS.units = FRX_RULER_PIXELS 
  22395. otherwise
  22396.     *---------------------------------------------------------
  22397.     * Designer fixed at 96 dpi
  22398.     *---------------------------------------------------------
  22399.     return (m.nFruValue * 96 / 10000 )
  22400. endcase
  22401. ENDPROC
  22402. PROCEDURE stripquotes
  22403. lparameter lcValue
  22404. do case
  22405. case left( m.lcValue, 1 ) == ["] and right( m.lcValue, 1 ) == ["]
  22406.     return substr( m.lcValue, 2, len( m.lcValue ) - 2 )
  22407. case left( m.lcValue, 1 ) == ['] and right( m.lcValue, 1 ) == [']
  22408.     return substr( m.lcValue, 2, len( m.lcValue ) - 2 )
  22409. otherwise
  22410.     return m.lcValue
  22411. endcase
  22412. ENDPROC
  22413. PROCEDURE getmetadatadomdoc
  22414. *=======================================================
  22415. * GetMetadataDomDoc( <frx> )
  22416. * Returns a reference to an MSXml.DomDocument with the 
  22417. * XML stored in the STYLE column of the current record in 
  22418. * the frx cursor. Default alias is "frx". 
  22419. * Check for null in case of errors.
  22420. * If the STYLE field is empty, a default XML document is
  22421. * returned.
  22422. *=======================================================
  22423. lparameter lcFrxAlias
  22424. local curSel, cXml, oDom
  22425. if empty( m.lcFrxAlias )
  22426.     lcFrxAlias = 'frx'
  22427. endif
  22428. if not used(m.lcFrxAlias) 
  22429.     return .null.
  22430. endif
  22431. curSel = select(0)
  22432. select (m.lcFrxAlias)
  22433. *------------------------------------------------------
  22434. * Extract the metadata XML from STYLE field of frx cursor 
  22435. * record, and put default xml in if its empty:
  22436. *------------------------------------------------------
  22437. cXml = STYLE
  22438. if empty( m.cXml )
  22439.     text noshow to m.cXml 
  22440. <VFPData>
  22441.     <reportdata name="" type="R" script="" execute="" execwhen="" class="" classlib="" declass="" declasslib=""/> 
  22442. </VFPData>     
  22443.     endtext
  22444.     replace STYLE with m.cXml
  22445. endif
  22446. select (m.curSel)
  22447. *------------------------------------------------------
  22448. * Create a DomDocument and load up the xml.
  22449. *------------------------------------------------------
  22450. oDom = createobject("MSXml.DomDocument")
  22451. oDom.loadXML( m.cXml )
  22452. return oDom
  22453. ENDPROC
  22454. PROCEDURE islayoutcontrol
  22455. lparameter iObjType
  22456. return inlist( m.iObjType, FRX_OBJTYP_LABEL, FRX_OBJTYP_LINE, FRX_OBJTYP_RECTANGLE, FRX_OBJTYP_FIELD, FRX_OBJTYP_PICTURE )
  22457. ENDPROC
  22458. PROCEDURE unpackmemberdata
  22459. *=======================================================
  22460. * UnpackMemberData( cFrxAlias, cMetaAlias )
  22461. * Creates a cursor containing rows from Memberdata (STYLE)
  22462. * Assumes: FRX cursor is located on correct record
  22463. * in the FRXDataSession
  22464. * Returns: .T. if it has successfully create (cAliasName)
  22465. *=======================================================
  22466. lparameter tcFrxAlias, tcMetaAlias, tiDataSession
  22467. local curSel, lcXml, llSuccess, liDataSession
  22468. llSuccess = .T.
  22469. if empty(m.tiDataSession) or (m.tiDataSession < 1)
  22470.    m.tiDataSession = set("datasession")
  22471. endif
  22472. m.liDataSession = set("datasession")
  22473. set datasession to (m.tiDataSession)   
  22474. curSel = select(0)
  22475. if empty( m.tcFrxAlias )
  22476.     tcFrxAlias = "frx"
  22477. endif
  22478. if empty( m.tcMetaAlias )
  22479.     tcMetaAlias = "memberdata"
  22480. endif
  22481. if not used(m.tcFrxAlias)
  22482.     set datasession to (m.liDataSession)       
  22483.     return .F.
  22484. endif
  22485. if used(m.tcMetaAlias)
  22486.     use in (m.tcMetaAlias)
  22487. endif
  22488. select (m.tcFrxAlias)
  22489. if empty(STYLE)
  22490.     *-------------------------------------
  22491.     * Use the default:
  22492.     *-------------------------------------
  22493.     lcXML = ""
  22494.     lcXml = trim(STYLE)
  22495.     if not inlist( left( upper( m.lcXml ),5), "<VFPD","<?XML")
  22496.         * OK. STYLE doesn't have XML in it.
  22497.         * We're not actually writing data back into the STYLE column yet,
  22498.         * and they might hit Cancel after they've opened the dialog.
  22499.         * So, create an empty memberdata cursor. The warning message 
  22500.         * should perhaps be done in the save, where they can cancel 
  22501.         * and check it out themselves.
  22502.         lcXml = ""
  22503.     endif
  22504. endif    
  22505. if m.llSuccess 
  22506.     llSuccess = THIS.XmlStrToCursor( m.lcXml, m.tcMetaAlias )
  22507. endif
  22508. select (m.curSel)
  22509. set datasession to (m.liDataSession)       
  22510. return m.llSuccess
  22511. ENDPROC
  22512. PROCEDURE packupmemberdata
  22513. *=======================================================
  22514. * PackupMemberData
  22515. * Converts the rows into XML and stores in STYLE column
  22516. * Assumes: FRX cursor is located on correct record
  22517. * in the FRXDataSession
  22518. * Returns: Success or Failure
  22519. *=======================================================
  22520. lparameter tcFrxAlias, tcMetaAlias, tiDataSession
  22521. local lcXml, liBytes, liSelect, liDataSession, llSuccess
  22522. if empty( m.tcFrxAlias )
  22523.     tcFrxAlias = "frx"
  22524. endif
  22525. if empty( m.tcMetaAlias )
  22526.     tcMetaAlias = "memberdata"
  22527. endif
  22528. if empty(m.tiDataSession) or (m.tiDataSession < 1)
  22529.    m.tiDataSession = set("datasession")
  22530. endif
  22531. m.liDataSession = set("datasession")
  22532. set DataSession to (m.tiDataSession)
  22533. liSelect  = select(0)
  22534. llSuccess = .T.
  22535. if not used(m.tcFrxAlias)
  22536.     m.llSuccess = .F.
  22537. endif
  22538. if not used(m.tcMetaAlias)
  22539.     m.llSuccess= .F.
  22540. endif
  22541. select (m.tcFrxAlias)
  22542. if not empty( STYLE )
  22543.     if not inlist( left( upper(alltrim(STYLE)),5), "<VFPD","<?XML")
  22544.         * OK. STYLE currently doesn't contain XML.
  22545.         * We must warn the user and let them cancel the operation
  22546.         * if they think the contents are important:
  22547.         if not THIS.QuietMode
  22548.             if messagebox(METADATA_NOT_XML_ERROR_LOC, 48+4, DEFAULT_MBOX_TITLE_LOC)=6
  22549.                 llSuccess = .T.
  22550.             else
  22551.                 llSuccess = .F.                            
  22552.             endif                
  22553.         else
  22554.             llSuccess = .T.                            
  22555.         endif    
  22556.     endif
  22557. endif
  22558. if m.llSuccess
  22559.     *--------------------------------------
  22560.     * Fix for SP2: force a "reportdata" node name
  22561.     *--------------------------------------
  22562.     select * from (m.tcMetaAlias) into cursor reportdata where not deleted()
  22563.     lcXml = THIS.CursorToXmlStr( "reportdata" )
  22564.     use in reportdata
  22565.     *--------------------------------------
  22566.     * Only save the XML into FRX.STYLE 
  22567.     * if it has changed from default:
  22568.     *--------------------------------------
  22569.     do case
  22570.     case empty(m.lcXml)
  22571.         replace STYLE with "" in (m.tcFrxAlias)
  22572.     case m.lcXml == DEFAULT_MEMBERDATA_XML
  22573.         replace STYLE with "" in (m.tcFrxAlias)
  22574.     case trim(upper(m.lcXml)) = "<VFPDATA/>"            
  22575.         replace STYLE with "" in (m.tcFrxAlias)
  22576.     otherwise    
  22577.         replace STYLE with m.lcXml in (m.tcFrxAlias)
  22578.     endcase
  22579. endif
  22580. select (m.liSelect)
  22581. set datasession to (m.liDataSession)       
  22582. return m.llSuccess
  22583. ENDPROC
  22584. PROCEDURE unpackfrxmemberdata
  22585. *=============================================================================
  22586. * UnpackFrxMemberData( frxAlias, memberdataAlias, FrxDataSession, NoIndex)
  22587. * Expands the XML contents of the STYLE column
  22588. * into a cursor (alias of your choice)
  22589. * for ALL ROWS IN THE SOURCE CURSOR
  22590. * Default parameter values are 'frx', 'memberdata'
  22591. *=============================================================================
  22592. lparameter tcFrxAlias, tcMetaAlias, tiDataSession, tlOmitIndex
  22593. local curSel, liRows, lcAttributes, liIndex, lcTempAlias, liSelect, llError, liDataSession
  22594. if empty(m.tiDataSession) or (m.tiDataSession < 1)
  22595.    m.tiDataSession = set("DATASESSION")
  22596. endif
  22597. m.liDataSession = set("DATASESSION")
  22598. set datasession to (m.tiDataSession)
  22599. if empty( m.tcFrxAlias )
  22600.     tcFrxAlias = "frx"
  22601. endif
  22602. if empty( m.tcMetaAlias )
  22603.     tcMetaAlias = "memberdata"
  22604. endif
  22605. if not used(m.tcFrxAlias)
  22606.     set datasession to (m.liDataSession)
  22607.     return .f.
  22608. endif
  22609. if used(m.tcMetaAlias)
  22610.     use in (m.tcMetaAlias)
  22611. endif
  22612. liSelect = select(0)
  22613. *------------------------------------------------------
  22614. * we're going to take every attribute, whether we understand 
  22615. * the column or not, but we'll start off with the core set
  22616. *------------------------------------------------------
  22617. lcAttributes = "|NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|"
  22618. create cursor (m.tcMetaAlias) ( ;
  22619.     FRXRECNO i, ;
  22620.     NAME m, ;
  22621.     TYPE c(1), ;
  22622.     EXECWHEN m, ;
  22623.     EXECUTE m, ;
  22624.     CLASS m, ;
  22625.     CLASSLIB m, ;
  22626.     DECLASS m, ;
  22627.     DECLASSLIB m, ;
  22628.     SCRIPT m )
  22629. select (m.tcFrxAlias)
  22630. lcTempAlias = "T" + sys(2015)
  22631. go top
  22632. scan while not m.llError for PLATFORM = FRX_PLATFORM_WINDOWS and not (empty(STYLE) or deleted())
  22633.     if len(alltrim(STYLE))<5
  22634.         *---------------------------------------------
  22635.         * ENH for SP2:
  22636.         * This is probably not invalid XML. 
  22637.         * This is probably migrated FP2.x style data
  22638.         * Therefore ignore:
  22639.         *---------------------------------------------
  22640.         loop
  22641.     endif
  22642.         XmlToCursor(STYLE, m.lcTempAlias)
  22643.     catch to oErr
  22644.         *---------------------------------------------
  22645.         * Invalid XML, will be ignored for this record
  22646.         *---------------------------------------------
  22647.        if not this.QuietMode        
  22648.             messagebox(oErr.Message + chr(13) + METADATA_LOAD_ERROR_LOC , ;
  22649.                         MB_ICONEXCLAMATION, ;
  22650.                         DEFAULT_MBOX_TITLE_LOC)
  22651.        endif    
  22652.     finally
  22653.         if used(m.lcTempAlias)
  22654.             if reccount(m.lcTempAlias) > 0
  22655.                 select (m.lcTempAlias)
  22656.                 for m.liIndex = 1 to fcount()
  22657.                     if atc("|"+field(m.liIndex)+"|",m.lcAttributes) = 0
  22658.                         try
  22659.                                alter table (m.tcMetaAlias) add column (field(liIndex)) M
  22660.                             m.lcAttributes = m.lcAttributes + field(m.liIndex) + "|"
  22661.                         catch to oErr
  22662.                            m.llError = .T.
  22663.                            exit
  22664.                         endtry 
  22665.                     endif
  22666.                 endfor
  22667.                 select (m.tcFrxAlias)
  22668.                 if m.llError 
  22669.                    if not this.QuietMode
  22670.                         messagebox(oErr.Message + chr(13) + METADATA_CUMULATIVE_ERROR_LOC , ;
  22671.                                     MB_ICONEXCLAMATION, ;
  22672.                                     DEFAULT_MBOX_TITLE_LOC)
  22673.                    endif
  22674.                 else
  22675.                     *---------------------------------------------
  22676.                     * Re-import the XML into the new structure:
  22677.                     *---------------------------------------------                
  22678.                     XmlToCursor( STYLE, m.tcMetaAlias, 8192 ) 
  22679.                     select (m.tcMetaAlias)
  22680.                     replace FRXRECNO with recno(m.tcFrxAlias) for empty(FRXRECNO)
  22681.                 endif
  22682.             endif
  22683.             use in (m.lcTempAlias)
  22684.         endif
  22685.     endtry
  22686.     select (m.tcFrxAlias)
  22687. endscan
  22688. if not m.tlOmitIndex
  22689.     select (m.tcMetaAlias)
  22690.     index on FRXRECNO tag FRXRECNO
  22691. endif
  22692. select (m.liSelect)
  22693. set datasession to (m.liDataSession)
  22694. return .T.
  22695. ENDPROC
  22696. PROCEDURE getfrxrecdisplayname
  22697. *======================================================
  22698. * GetFrxRecDisplayName()
  22699. * Assumes: current alias is the source FRX 
  22700. *======================================================
  22701. lparameter tlIncludeRecno
  22702. local retVal
  22703. retVal = ""
  22704. do case
  22705. case OBJTYPE = FRX_OBJTYP_REPORTHEADER
  22706.     retVal = TARGET_REPORT_GLOBAL_LOC
  22707. case OBJTYPE = FRX_OBJTYP_LABEL
  22708.     *retVal = TARGET_TEXT_LABEL_LOC + ": " + trim(EXPR)
  22709.     retVal = THIS.stripQuotes(trim(EXPR))
  22710. case OBJTYPE = FRX_OBJTYP_FIELD
  22711.     *retVal = TARGET_FIELD_LOC + ": " + trim(EXPR)
  22712.     retVal = THIS.stripQuotes(trim(EXPR))
  22713. case OBJTYPE = FRX_OBJTYP_LINE
  22714.     retVal = TARGET_LINE_LOC
  22715. case OBJTYPE = FRX_OBJTYP_RECTANGLE
  22716.     retVal = TARGET_BOX_LOC
  22717. case OBJTYPE = FRX_OBJTYP_PICTURE
  22718.     if not empty(NAME)
  22719.         *retVal = TARGET_PICTURE_LOC + ": " + trim(NAME)
  22720.         retVal = THIS.stripQuotes(trim(NAME))
  22721.     else
  22722.         *retVal = TARGET_PICTURE_LOC + ": " + trim(PICTURE)
  22723.         retVal = THIS.stripQuotes(trim(PICTURE))
  22724.     endif            
  22725. case OBJTYPE = FRX_OBJTYP_BAND
  22726.     do case
  22727.     case OBJCODE = FRX_OBJCOD_TITLE
  22728.         retVal = TARGET_TITLE_LOC 
  22729.     case OBJCODE = FRX_OBJCOD_PAGEHEADER
  22730.         retVal = TARGET_PAGE_HEADER_LOC 
  22731.     case OBJCODE = FRX_OBJCOD_COLHEADER
  22732.         retVal = TARGET_COL_HEADER_LOC
  22733.     case OBJCODE = FRX_OBJCOD_GROUPHEADER
  22734.         retVal = TARGET_GROUP_HEADER_LOC + ": " + THIS.stripQuotes(trim(EXPR))
  22735.     case OBJCODE = FRX_OBJCOD_DETAIL
  22736.         retVal = TARGET_DETAIL_LOC
  22737.     case OBJCODE = FRX_OBJCOD_GROUPFOOTER
  22738.         retVal = TARGET_GROUP_FOOTER_LOC 
  22739.     case OBJCODE = FRX_OBJCOD_COLFOOTER
  22740.         retVal = TARGET_COL_FOOTER_LOC 
  22741.     case OBJCODE = FRX_OBJCOD_PAGEFOOTER
  22742.         retVal = TARGET_PAGE_FOOTER_LOC
  22743.     case OBJCODE = FRX_OBJCOD_SUMMARY
  22744.         retVal = TARGET_SUMMARY_LOC 
  22745.     case OBJCODE = FRX_OBJCOD_DETAILHEADER
  22746.         retVal = TARGET_DETAIL_HEADER_LOC
  22747.     case OBJCODE = FRX_OBJCOD_DETAILFOOTER
  22748.         retVal = TARGET_DETAIL_FOOTER_LOC
  22749.     endcase
  22750. case OBJTYPE = FRX_OBJTYP_GROUP
  22751.     retVal = TARGET_GROUPED_LOC + " (" + trans(HPOS)+")"
  22752. otherwise
  22753.     retVal = TARGET_UNKNOWN_LOC
  22754. endcase
  22755. if m.tlIncludeRecno
  22756.     retVal = "["+trans(recno())+"] " + m.retVal
  22757. endif
  22758. return m.retVal
  22759. ENDPROC
  22760. PROCEDURE xmlstrtocursor
  22761. *===============================================================
  22762. * XmlStrToCursor( xml, alias )
  22763. * Returns: Logical/Success
  22764. * Notes: will close/recreate alias if already open
  22765. *===============================================================
  22766. lparameter tcXml, tcMetaAlias
  22767. local curSel, liRows, cAddColumns, cStandardSet
  22768. if used( m.tcMetaAlias )
  22769.     use in (m.tcMetaAlias)
  22770. endif
  22771. curSel = select(0)
  22772. *-----------------------------
  22773. * Create initial empty cursor
  22774. *-----------------------------
  22775. create Cursor (m.tcMetaAlias) (;
  22776.         NAME m, ;
  22777.         TYPE c(1), ;
  22778.         SCRIPT m, ;
  22779.         EXECUTE m, ;
  22780.         EXECWHEN m, ;
  22781.         CLASS m, ;
  22782.         CLASSLIB m, ;
  22783.         DECLASS m, ;
  22784.         DECLASSLIB m )
  22785. if empty( m.tcXml ) ;
  22786. or upper(trim(m.tcXml))="<VFPDATA/>"
  22787.     *--------------------------------------------------
  22788.     * Done. Empty memberdata means cursor with no records
  22789.     *--------------------------------------------------
  22790.     select (m.curSel)
  22791.     return .T.
  22792. endif
  22793. local tmpAlias
  22794. tmpAlias     = 'T' + sys(2015)
  22795.     *----------------------------------------------
  22796.     * Get the metadata out of the XML and into a cursor
  22797.     *----------------------------------------------
  22798.     liRows = XMlToCursor( m.tcXml, m.tmpAlias )
  22799. catch to oErr 
  22800.     *----------------------------------------------------
  22801.     * Inform of error and offer to reset to default:
  22802.     *----------------------------------------------------        
  22803.    if not this.QuietMode            
  22804.         if messagebox( oErr.Message + chr(13) + METADATA_XML_REPLACE_LOC,48+4,DEFAULT_MBOX_TITLE_LOC) = 6
  22805.             *----------------------------------------------------
  22806.             * XML is invalid. Replace with default and re-load:
  22807.             *----------------------------------------------------        
  22808.             tcXml = DEFAULT_MEMBERDATA_XML
  22809.             liRows = XMlToCursor( m.tcXml, m.tmpAlias )
  22810.         else
  22811.             *----------------------------------------------------
  22812.             * Fall out the bottom and return .F.
  22813.             *----------------------------------------------------
  22814.             if used(m.tmpAlias)
  22815.                 use in (m.tmpAlias)
  22816.             endif
  22817.         endif
  22818.     else
  22819.         if used(m.tmpAlias)
  22820.             use in (m.tmpAlias)
  22821.         endif
  22822.     endif
  22823. endtry
  22824. if used( m.tmpAlias )
  22825.     *----------------------------------------------
  22826.     * check for additional columns:
  22827.     *----------------------------------------------
  22828.     local cAddColumns, i
  22829.     cAddColumns  = ""
  22830.     select (m.tmpAlias)
  22831.     for m.i = 1 to fcount()
  22832.         if not ("|"+field(m.i)+"|" $ "|NAME|TYPE|SCRIPT|EXECUTE|EXECWHEN|CLASS|CLASSLIB|DECLASS|DECLASSLIB|")
  22833.             *----------------------------------------------
  22834.             * column is not part of the standard set.
  22835.             * Must add it to the metadata cursor:
  22836.             *----------------------------------------------
  22837.             m.cAddColumns = m.cAddColumns + " ADD COLUMN " + field(m.i) + " M"
  22838.         endif            
  22839.     endfor    
  22840.     if not empty( m.cAddColumns)
  22841.         *----------------------------------------------
  22842.         * Update metadata structure:
  22843.         *----------------------------------------------
  22844.         alter table (m.tcMetaAlias) &cAddColumns
  22845.     endif
  22846.     use in (m.tmpAlias)
  22847.     *----------------------------------------------
  22848.     * Extract into final cursor:
  22849.     *----------------------------------------------
  22850.     liRows = XMlToCursor( m.tcXml, m.tcMetaAlias, 8192 )
  22851.     select (m.curSel)
  22852.     return .T.
  22853. else    
  22854.     if used(m.tcMetaAlias)
  22855.         use in (m.tcMetaAlias)
  22856.     endif
  22857.     select (m.curSel)
  22858.     return .F.
  22859. endif
  22860. ENDPROC
  22861. PROCEDURE cursortoxmlstr
  22862. *===============================================================
  22863. * CursorToXmlStr( alias )
  22864. * Returns: String
  22865. * Notes: Respects DELETED flag
  22866. *===============================================================
  22867. lparameter tcMetaAlias
  22868. local lcXml, liBytes
  22869. if not used( m.tcMetaAlias )
  22870.     return ""
  22871. endif
  22872. if reccount( m.tcMetaAlias ) = 0
  22873.     return ""
  22874. endif
  22875. lcXml   = ""
  22876. if set("DELETED")="OFF"
  22877.     set deleted on
  22878.     liBytes = CursorToXml(m.tcMetaAlias, "lcXml", 2 )
  22879.     set deleted off
  22880.     liBytes = CursorToXml(m.tcMetaAlias, "lcXml", 2 )
  22881. endif
  22882. *----------------------------------------------
  22883. * Strip out "<?xml ... ?>" header
  22884. *----------------------------------------------
  22885. if at("?>",m.lcXml) > 0
  22886.     lcXml = alltrim(substr(m.lcXml,at("?>",m.lcXml)+4))
  22887. endif
  22888. if m.liBytes = 0
  22889.     return ""
  22890.     return m.lcXml
  22891. endif
  22892. ENDPROC
  22893. PROCEDURE quietmode_assign
  22894. LPARAMETERS tvNewVal
  22895. IF VARTYPE(tvNewVal) = "L"
  22896.    THIS.quietmode = m.tvNewVal
  22897. ENDIF   
  22898. ENDPROC
  22899. PROCEDURE generateevaluatecontentsscript
  22900. LPARAMETERS tcFRXAlias, tcMemberDataAlias, tiDataSession
  22901. LOCAL liDataSession
  22902. IF EMPTY(m.tiDataSession) OR (m.tiDataSession < 1)
  22903.    m.tiDataSession = SET("DATASESSION")
  22904. ENDIF
  22905. m.liDataSession = SET("DATASESSION")
  22906. SET DATASESSION TO (m.tiDataSession)
  22907. IF EMPTY(m.tcFRXAlias)
  22908.    m.tcFRXAlias = "FRX"
  22909. ENDIF
  22910. IF EMPTY(m.tcMemberDataAlias)
  22911.     m.tcMemberDataAlias = "memberdata"
  22912. ENDIF
  22913. IF NOT (USED(m.tcFRXAlias) AND USED(m.tcMemberDataAlias))
  22914.    SET DATASESSION TO (m.liDataSession)
  22915.    RETURN ""
  22916. ENDIF
  22917. LOCAL m.lcResult, m.liSelect, m.lcConditions, m.liColor, ;
  22918.       m.lcTextMergeDelims, m.lcTextMerge, m.llTextMerge, ;
  22919.       m.lcTextMergeShow, m.lcExpDelim1, m.lcExpDelim2
  22920. IF TYPE(m.tcMemberDataAlias + ".FRXRecno") = "N"
  22921.     m.lcConditions = "FRXRecno = " + TRANSFORM(RECNO(m.tcFRXAlias)) + " AND "
  22922.     m.lcConditions = ""
  22923. ENDIF
  22924. m.lcConditions = m.lcConditions + ;
  22925.                  "Type = '" + FRX_BLDR_MEMBERDATATYPE + "' AND " + ;
  22926.                  "Name = '" + FRX_BLDR_NAMESPACE_EVALUATECONTENTS  +"' "
  22927. m.liSelect = SELECT(0)
  22928. SELECT (m.tcMemberDataAlias)
  22929. LOCATE FOR &lcConditions.
  22930. IF EOF()
  22931.    m.lcConditions = ""
  22932.    m.lcTextMergeDelims = SET("TEXTMERGE",1)
  22933.    m.llTextMerge = (SET("TEXTMERGE") == "ON")
  22934.    m.lcTextMerge = SET("TEXTMERGE",2)
  22935.    m.lcTextMergeShow = SET("TEXTMERGE",3)
  22936.    SET TEXTMERGE DELIMITERS TO
  22937.    SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  22938.    SET TEXTMERGE ON
  22939.    \LPARAMETERS m.toListener, m.tP1, m.tP2 
  22940.    \ * <<FRXSCRIPTWRITER_GENERAL_LOC >>
  22941.    \ * <<FRXSCRIPTWRITER_EVALUATECONTENTS_LOC>>
  22942.    \ * FRXRECNO: <<RECNO("frx")>>, EXPR: <<FRX.Expr>>
  22943.    \ 
  22944.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS1_LOC>>
  22945.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS2_LOC>>
  22946.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS3_LOC>>
  22947.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS4_LOC>>
  22948.    \LOCAL m.nFRXRecno, m.oProps 
  22949.    \m.nFRXRecno = m.tP1
  22950.    \m.oProps = m.tP2
  22951.    \m.oProps.Reload = .T.   
  22952.    \TRY
  22953.    \   SET DATASESSION TO (m.toListener.CurrentDataSession)
  22954.    \   * <<FRXSCRIPTWRITER_CONDITIONRULES_LOC>>
  22955.    \   DO CASE
  22956.           SCAN ALL FOR &lcConditions. 
  22957.    \   CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<FRXSCRIPTWRITER_USERLABEL_LOC>> <<Execute>>
  22958.           IF NOT EMPTY(Script)
  22959.              DO CASE 
  22960.              CASE NOT ["] $ Script
  22961.                 STORE ["] TO m.lcDelim1, m.lcDelim2
  22962.              CASE NOT ['] $ Script
  22963.                 STORE ['] TO m.lcDelim1, m.lcDelim2             
  22964.              OTHERWISE
  22965.                 * may not work but we only have three delimiter choices!
  22966.                 m.lcDelim1 = "["
  22967.                 m.lcDelim2 = "]"                
  22968.              ENDCASE
  22969.              \      * <<FRXSCRIPTWRITER_EVALRULES1_LOC>>
  22970.              \      * <<FRXSCRIPTWRITER_EXPRESSIONRULES_LOC>>
  22971.              \      IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  22972.              \         m.oProps.Text = TRANSFORM(<<Script>>)
  22973.              \      ELSE
  22974.              \         * <<FRXSCRIPTWRITER_EVALRULES2_LOC>>          
  22975.              \         SET DATASESSION TO (m.toListener.FRXDataSession)           
  22976.              \         IF TYPE(<<m.lcDelim1>><<Script>><<m.lcDelim2>>) # "U"
  22977.              \            m.oProps.Text = TRANSFORM(<<Script>>)
  22978.              \         ENDIF
  22979.              \         SET DATASESSION TO (m.toListener.CurrentDataSession)                     
  22980.              \      ENDIF
  22981.           ENDIF
  22982.              \      * <<FRXSCRIPTWRITER_EVALRULES3_LOC>>   
  22983.           IF NOT (EMPTY(PenRGB) OR VAL(PenRGB) = -1)
  22984.              m.liColor = VAL(PenRGB)
  22985.              \      m.oProps.PenRed = <<INT(MOD(m.liColor,256))>>
  22986.              \      m.oProps.PenGreen = <<MOD(INT(m.liColor/256),256)>>
  22987.              \      m.oProps.PenBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  22988.           ENDIF
  22989.           IF NOT (EMPTY(FillRGB) OR VAL(FillRGB) = -1)
  22990.              m.liColor = VAL(FillRGB)
  22991.              \      m.oProps.FillRed = <<INT(MOD(m.liColor,256))>>
  22992.              \      m.oProps.FillGreen = <<MOD(INT(m.liColor/256),256)>>
  22993.              \      m.oProps.FillBlue = <<MOD(INT(m.liColor/(256*256)),256)>>
  22994.           ENDIF
  22995.           IF NOT (EMPTY(PenA) OR VAL(PenA) = -1)
  22996.              \      m.oProps.PenAlpha = <<PenA>>
  22997.           ENDIF
  22998.           IF NOT (EMPTY(FillA) OR VAL(FillA) = -1)
  22999.              \      m.oProps.FillAlpha = <<FillA>>
  23000.           ENDIF
  23001.           IF NOT EMPTY(FName)
  23002.              \      m.oProps.FontName = "<<FName>>"
  23003.           ENDIF
  23004.           IF NOT EMPTY(FStyle)
  23005.              \      m.oProps.FontStyle = <<ABS(INT(VAL(FStyle)))>>
  23006.           ENDIF
  23007.           IF NOT (EMPTY(FSize) OR EMPTY(VAL(FSize)) OR VAL(FSize) = -1)
  23008.              \      m.oProps.FontSize = <<ABS(INT(VAL(FSize)))>>
  23009.           ENDIF
  23010.           ENDSCAN
  23011.    \   OTHERWISE  && <<FRXSCRIPTWRITER_DEFAULT_LOC>>
  23012.    \      m.oProps.Reload = .F.   
  23013.    \   ENDCASE
  23014.    \CATCH WHEN .T.
  23015.    \   m.oProps.Reload = .F.   
  23016.    \FINALLY
  23017.    \   SET DATASESSION TO (m.toListener.FRXDataSession)
  23018.    \ENDTRY
  23019.    SET TEXTMERGE OFF
  23020.    SET TEXTMERGE TO
  23021.    IF EMPTY(m.lcResult)
  23022.       m.lcConditions = ""
  23023.    ELSE
  23024.       m.lcConditions = m.lcResult && we must swap to a new variable before the reset
  23025.    ENDIF   
  23026.    THIS.resetTextMerge(m.lcTextMergeDelims, ;
  23027.                        m.lcTextMerge, m.llTextMerge, ;
  23028.                        m.lcTextMergeShow)
  23029. ENDIF
  23030. SELECT (m.liSelect)
  23031. SET DATASESSION TO (m.liDataSession)
  23032. RETURN m.lcConditions
  23033. ENDPROC
  23034. PROCEDURE generateadjustobjectsizescript
  23035. LPARAMETERS tcFRXAlias, tcMemberDataAlias,tiDataSession
  23036. LOCAL liDataSession
  23037. IF EMPTY(m.tiDataSession) OR (m.tiDataSession < 1)
  23038.    m.tiDataSession = SET("DATASESSION")
  23039. ENDIF
  23040. m.liDataSession = SET("DATASESSION")
  23041. SET DATASESSION TO (m.tiDataSession)
  23042. IF EMPTY(m.tcFRXAlias)
  23043.    m.tcFRXAlias = "FRX"
  23044. ENDIF
  23045. IF EMPTY(m.tcMemberDataAlias)
  23046.     m.tcMemberDataAlias = "memberdata"
  23047. ENDIF
  23048. IF NOT (USED(m.tcFRXAlias) AND USED(m.tcMemberDataAlias))
  23049.    SET DATASESSION TO (m.liDataSession)
  23050.    RETURN ""
  23051. ENDIF
  23052. LOCAL m.lcResult, m.liSelect, m.lcConditions,  ;
  23053.       m.lcTextMergeDelims, m.lcTextMerge, m.llTextMerge, ;
  23054.       m.lcTextMergeShow
  23055. IF TYPE(m.tcMemberDataAlias + ".FRXRecno") = "N"
  23056.     m.lcConditions = "FRXRecno = " + TRANSFORM(RECNO(m.tcFRXAlias)) + " AND "
  23057.     m.lcConditions = ""
  23058. ENDIF
  23059. m.lcConditions = m.lcConditions + ;
  23060.                  "Type = '" + FRX_BLDR_MEMBERDATATYPE + "' AND " + ;
  23061.                  "Name = '" + FRX_BLDR_NAMESPACE_ADJUSTOBJECTSIZE  +"' "
  23062. m.liSelect = SELECT(0)
  23063. SELECT (m.tcMemberDataAlias)
  23064. LOCATE FOR &lcConditions.
  23065. IF EOF()
  23066.    m.lcConditions = ""
  23067.    m.lcTextMergeDelims = SET("TEXTMERGE",1)
  23068.    m.llTextMerge = (SET("TEXTMERGE") == "ON")
  23069.    m.lcTextMerge = SET("TEXTMERGE",2)
  23070.    m.lcTextMergeShow = SET("TEXTMERGE",3)
  23071.    SET TEXTMERGE DELIMITERS TO
  23072.    SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  23073.    SET TEXTMERGE ON
  23074.    \LPARAMETERS m.toListener, m.tP1, m.tP2 
  23075.    \ * <<FRXSCRIPTWRITER_GENERAL_LOC >>
  23076.    \ * <<FRXSCRIPTWRITER_ADJUSTOBJECTSIZE_LOC>>
  23077.    \ * FRXRECNO: <<RECNO("frx")>>, TYPE: <<FRX.ObjType>>
  23078.    \ 
  23079.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS1_LOC>>
  23080.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS2_LOC>>
  23081.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS3_LOC>>
  23082.    \ * <<FRXSCRIPTWRITER_DYNAMICPARAMS4_LOC>>
  23083.    \LOCAL m.nFRXRecno, m.oProps 
  23084.    \m.nFRXRecno = m.tP1
  23085.    \m.oProps = m.tP2
  23086.    \m.oProps.Reload = .T.   
  23087.    \TRY
  23088.    \   SET DATASESSION TO (m.toListener.CurrentDataSession)
  23089.    \   * <<FRXSCRIPTWRITER_CONDITIONRULES_LOC>>
  23090.    \   LOCAL liTemp
  23091.    \   * <<FRXSCRIPTWRITER_ADJUSTOBJRULES1_LOC>>
  23092.    \   * <<FRXSCRIPTWRITER_ADJUSTOBJRULES2_LOC>>
  23093.    \   * <<FRXSCRIPTWRITER_ADJUSTOBJRULES3_LOC>>
  23094.    \   DO CASE
  23095.           SCAN ALL FOR &lcConditions. 
  23096.    \   CASE <<IIF(EMPTY(ExecWhen), ".T.", ExecWhen)>> && <<FRXSCRIPTWRITER_USERLABEL_LOC>> <<Execute>>
  23097.              \      IF <<Width>> > -1 AND ;
  23098.              \         <<Width>> < FRX_RUNTIME_LAYOUT_DIMENSION_LIMIT 
  23099.              \         m.oProps.Width = INT(<<Width>>)   
  23100.              \      ENDIF
  23101.              \      IF <<Height>> > -1 AND ;
  23102.              \         <<Height>> < FRX_RUNTIME_LAYOUT_DIMENSION_LIMIT AND ;
  23103.              \         ((INT(<<Height>>) < m.oProps.MaxHeightAvailable) ;
  23104.              \          OR (NOT m.oProps.Reattempt))
  23105.              \         m.oProps.Height = INT(<<Height>>)
  23106.              \      ENDIF
  23107.         ENDSCAN
  23108.    \   OTHERWISE  && <<FRXSCRIPTWRITER_DEFAULT_LOC>>
  23109.    \      m.oProps.Reload = .F.   
  23110.    \   ENDCASE
  23111.    \CATCH WHEN .T.
  23112.    \   m.oProps.Reload = .F.   
  23113.    \FINALLY
  23114.    \   SET DATASESSION TO (m.toListener.FRXDataSession)
  23115.    \ENDTRY
  23116.    SET TEXTMERGE OFF
  23117.    SET TEXTMERGE TO
  23118.    IF EMPTY(m.lcResult)
  23119.       m.lcConditions = ""
  23120.    ELSE
  23121.       m.lcConditions = m.lcResult && we must swap to a new variable before the reset
  23122.    ENDIF   
  23123.    THIS.resetTextMerge(m.lcTextMergeDelims, ;
  23124.                        m.lcTextMerge, m.llTextMerge, ;
  23125.                        m.lcTextMergeShow)
  23126. ENDIF   
  23127. SELECT (m.liSelect)
  23128. SET DATASESSION TO (m.liDataSession)
  23129. RETURN m.lcConditions
  23130. ENDPROC
  23131. PROCEDURE resettextmerge
  23132. LPARAMETERS tcDelimiters, m.tcTextMerge, m.tlTextMerge,m.tcTextMergeShow
  23133. if m.tcDelimiters <> set("TEXTMERGE",1)
  23134.     *-----------------------------------
  23135.     * They're using custom delimiters: 
  23136.     * Restore them
  23137.     *-----------------------------------
  23138.     local delimSize, leftDelim, rightDelim
  23139.     && it's either 1 or 2:
  23140.     m.delimSize = int(len(m.lcTextMergeDelims)/2)
  23141.     m.leftDelim  = left(  m.lcTextMergeDelims, m.delimSize )
  23142.     m.rightDelim = right( m.lcTextMergeDelims, m.delimSize )
  23143.     set textmerge delimiters to m.leftDelim, m.rightDelim
  23144. endif
  23145. if m.tlTextMerge
  23146.    set textmerge on &tcTextMergeShow.
  23147.    set textmerge off
  23148. endif 
  23149. if not empty(m.tcTextMerge)
  23150.    set textmerge to &tcTextMerge. additive 
  23151. endif   
  23152. ENDPROC
  23153. PROCEDURE Init
  23154. *=======================================================
  23155. * Init()
  23156. *=======================================================
  23157. *---------------------------------
  23158. * Determine the screen DPI:
  23159. *---------------------------------
  23160. #define LOGPIXELSX 88
  23161. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  23162. declare integer GetDC         in WIN32API integer hWnd
  23163. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  23164. local hdc, screenDPI
  23165. hdc    = GetDC(0)
  23166. THIS.screenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX )
  23167. ReleaseDC( 0, m.hdc )
  23168. *---------------------------------------------------
  23169. * Fixed for SP1: 
  23170. * The ReportBuilder client will 
  23171. * reset .ScreenDPI to 96 so that it is correct 
  23172. * for design-time report designer use, even if
  23173. * at run-time the app is running on higher-res 
  23174. * screens.
  23175. *---------------------------------------------------
  23176. *---------------------------------------------------
  23177. * No ui feedback if not appropriate (servers, etc):
  23178. *---------------------------------------------------
  23179. THIS.QuietMode = !inlist(_VFP.Startmode, 0, 4)
  23180. ENDPROC
  23181. ~~~~~~
  23182. ~~~~~~
  23183. kkmkjkjhh|zx|zx{zx{zx{zx{zx{zx{zx|zx|zxjhhkjkkkm
  23184. a`_ca`ba`b`_b`_b`_b`_b`_b`_b`_b`_ba`ca`a`_
  23185. {yw}{y}{y}{y}{y}{y}{y}{y}{y}{y}{y}{y}{y{yw
  23186. vtsywvywwyxwyxwyxwyxwyxwyxwyxwyxwyxwyxwywwywvvts
  23187. gednlkpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmnlkged
  23188. ~}ywv
  23189. }|yvu
  23190. jhhnlnTVWSTTSSTSSTSSTSSTSSTSSTSSTSSTSSTSSTSTTTVWnlnjhh
  23191. ~~~||||||~
  23192. ||||||~~~
  23193. &%#&%#&%#
  23194. &%#&%#&%#
  23195. &%#''%'&$
  23196. '&%'&%&%#
  23197. '&$)(%((%
  23198. ('%*)'**'
  23199. +*(*)'('%
  23200. )(&-+),+)
  23201. ,+),,))(&
  23202. **(/.+/.+
  23203. .-+.-++)(
  23204. ,*(1/-1/.
  23205. 1/-10-,+(
  23206. -+*42/320
  23207. 410410-,*
  23208. .-+642642
  23209. 642642.-+
  23210. 0/,865865
  23211. 9758740.-
  23212. 1/-;97;97
  23213. ;97;971/-
  23214. 20/><9=;:
  23215. ><:><:31/
  23216. 421A><A><
  23217. A><A?<431
  23218. 642DA?CA?
  23219. CA?DA?542
  23220. 753FDBGDA
  23221. FDBFDB753
  23222. 975IGDIGD
  23223. IFDIFD875
  23224. ;86LIGLIGLIGLIGLIGLIGLIGLIGLIGLIGKIGLIGLIGKIGLIGLIGKIGLIGKIGLIGLIGKIGLIGLIGKIGLIG:86
  23225. <97OLJOKJOLIOLJOLJOLI>;9>;:=;:=;:>;9=;9>;:=;:=;9>;9=;:=;:>;9>;9>;:=;:NKIOLJOKINKJ<97
  23226. =:9QNLQOLRNLnlk`\Y`\Y
  23227. ?=;QNLQNLQNLQNL=;9
  23228. >;:TPNTQNTQO`\YKGFKGF
  23229. 0/-HDBHDB
  23230. B>=SQNTPNTQNTQO><;
  23231. @=;VSQVSQVSP`\YKGFVSQ
  23232. 0/-HDBHDB
  23233. C@?VSQVSQVSQVSP@>;
  23234. A?=XUSXUSXUS`\YKGFXUS
  23235. 0/-HDBHDB
  23236. EBAYUSXUSXUSXUS@?=
  23237. B?>[WU[WUZWU`\YKGF[WU
  23238. 0/-HDBHDB
  23239. GDB[WU[WU[WUZVUB?>
  23240. CA?\YV\XW\YW`\YKGF]YV
  23241. 0/-HDBHDB
  23242. IEC]YW\XW]YW\YWC@?
  23243. DA@^[X^ZY^ZX`\YKGF^ZY
  23244. 0/-HDBHDB
  23245. IFE^[X^[X^[X^ZYDA@
  23246. EBA`[Y`\Y`[Z`\YKGF_\Z
  23247. 0/-0/-0/-
  23248. JGF_[Z`[Z`\ZnlkEBA
  23249. nlknlk`\YKGFnlk
  23250. VTTnlknlk
  23251. FCAYUT
  23252. a][FCBFCAFCB`\YKGFFCB
  23253. 744FCAFCBFCAYUTMJI
  23254. =y9DH9DHclo
  23255. uudrnY
  23256. |epmXdcQutd
  23257. khTwnajxk|
  23258. igSwla@S\ r
  23259. z_tsd
  23260. srbzkU
  23261. z_zkUqp_
  23262. srbbaOsrb
  23263. LANGUAGE
  23264. LOCALLANG
  23265. LASTUPDATE
  23266. CCODEPAGE
  23267. PRINT
  23268. MENUTOP
  23269. MENUPREV
  23270. MENUNEXT
  23271. MENULAST
  23272. MENUGOTO
  23273. MENUSHOWPA
  23274. MENUPRINT
  23275. MENUCLOSE
  23276. MENUTOOLB
  23277. ONEPGMENU
  23278. TWOPGMENU
  23279. FOURPGMENU
  23280. CBOZOOMWHO
  23281. CBOZOOMTTI
  23282. CBOZOOMPGW
  23283. CMDGOTOPGT
  23284. ONEPGTTIP
  23285. TWOPGTTIP
  23286. FOURPGTTIP
  23287. REPORTTITL
  23288. ERR_CREATI
  23289. ERROR
  23290. ERRNOPRINT
  23291. MENUPROOF
  23292. COPIES
  23293. SAVEREPORT
  23294. SAVEASIMAG
  23295. SAVEASPDF
  23296. SAVEASHTML
  23297. SAVEASRTF
  23298. SAVEASXLS
  23299. SAVEASTXT
  23300. SAVEPATH
  23301. SENDTOEMAI
  23302. CLOSEREPOR
  23303. PRINTREPOR
  23304. MINIATURES
  23305. GLOBALPREV
  23306. AVAILABLEP
  23307. GOTOPG_CAP
  23308. GOTOPG_OK
  23309. CANCEL
  23310. PRINTINGPR
  23311. PREFCAPTIO
  23312. PREFTAB
  23313. PREFBUTTON
  23314. PREFPGINTE
  23315. PREFALLPG
  23316. PREFCURRPG
  23317. PREFPAGES
  23318. MINILABEL
  23319. PAGECAPTIO
  23320. MINIFIRSTT
  23321. MINILASTTI
  23322. MININEXTTI
  23323. MINIPREVTI
  23324. SETUP
  23325. SETUPTITLE
  23326. GENERAL
  23327. CUSLANGUAG
  23328. TBARVISIBL
  23329. DOCKPOSITI
  23330. CANVASCNT
  23331. ZOOMLEVEL
  23332. WNDSTATE
  23333. MINIPERPG
  23334. VISIBLE
  23335. INVISIBLE
  23336. UNDOCKED
  23337. TBONTOP
  23338. TBONLEFT
  23339. TBONRIGHT
  23340. TBONBOTTOM
  23341. USERESOURC
  23342. NORMAL
  23343. MINIMIZED
  23344. MAXIMIZED
  23345. CONTROLS
  23346. OUTPUT
  23347. EMAIL
  23348. EMAILMODE
  23349. ATTACHTYPE
  23350. AUTOEMAIL
  23351. CDOSETUP
  23352. SMTPSERVER
  23353. LOGIN
  23354. PASSWORD
  23355. SMTPPORT
  23356. SENDER
  23357. USESSL
  23358. CUSTOMPROC
  23359. SENDEMAIL
  23360. SUBJECT
  23361. BUTTONSIZE
  23362. SMALL
  23363. FINDNEXT
  23364. FINDBACK
  23365. FINDTEXT
  23366. NOTFOUND
  23367. ERRSENDMAI
  23368. DESTNOTDEF
  23369. MSGNOTSENT
  23370. BADAUTHPRO
  23371. SMTPNOTSPE
  23372. INFOREQUIR
  23373. FROMEMPTY
  23374. SUBJEMPTY
  23375. BADCONFIG
  23376. ATACHNOTFO
  23377. LANGNOTFOU
  23378. REPNOTFOUN
  23379. SAVEAS
  23380. PRGENERAL
  23381. PRCONFIG
  23382. MAXSEARCH
  23383. PROGRESS
  23384. DEFAULT
  23385. WINPGBAR
  23386. QUIETMODE
  23387. INITSTATUS
  23388. PREPSTATUS
  23389. RUNSTATUS
  23390. SECONDS
  23391. CANCELQUER
  23392. CANCELINST
  23393. REPINCOMPL
  23394. ATTENTION
  23395. NOTUPDATE
  23396. ITALIC
  23397. UNDERLINE
  23398. FONTSIZE
  23399. FONTNAME
  23400. ATTACHMENT
  23401. ALIGNLEFT
  23402. ALIGNRIGHT
  23403. ALIGNCENTE
  23404. ALIGNJUSTI
  23405. INDENTINCR
  23406. INDENTREDU
  23407. HYPERLINK
  23408. ADDPICTURE
  23409. HORIZBAR
  23410. HTMLMODEL
  23411. RECEIPT
  23412. PRIORITY
  23413. PASTE
  23414. FILESUCCES
  23415. LISTBULLET
  23416. LISTNUMBER
  23417. CLEANFORMT
  23418. MSGSUCCESS
  23419. MSGSENDING
  23420. FONTCOLOR
  23421. BACKCOLOR
  23422. REMOVEFILE
  23423. HTMLFILE
  23424. HTMLDEFA
  23425. OPENVIEWER
  23426. PDFOPTIONS
  23427. EMBEDFONTS
  23428. CANPRINT
  23429. CANEDIT
  23430. CANCOPY
  23431. CANADDNOTE
  23432. ENCRYPTDOC
  23433. MASTERPWD
  23434. USERPWD
  23435. MASTANDUSR
  23436. PAGEMODE
  23437. NORMALVIEW
  23438. OUTLINPANE
  23439. THUMBSPANE
  23440. PDFAUTHOR
  23441. PDFTITLE
  23442. SYMBBARCOD
  23443. SYMBBARTIP
  23444. BADSMTP
  23445. CONTINUE
  23446. BADSETUP
  23447. RESETDEFA
  23448. SELECTRECI
  23449. SEARCHFLD
  23450. PDFASIMAGE
  23451. ATTACHFILE
  23452. SELECTALL
  23453. UNSELECTAL
  23454. INVERTSEL
  23455. REPPREVIEW
  23456. CLOSEBTN
  23457. PDFFONT
  23458. PLEASEWAIT
  23459. XML2XLS
  23460. RPTHEADER
  23461. RPTFOOTER
  23462. WKSEXT
  23463. HIDEPAGENO
  23464. XLALIGNLEF
  23465. SAVEASMHT
  23466. XLTOOBIG
  23467. XLCONV2XLS
  23468. PREPDATA
  23469.  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.
  23470.  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
  23471. cio                             P
  23472. g. Anterior                      P
  23473. g. Seguinte                      
  23474. ltima p
  23475. gina                      Ir para p
  23476. gina                     Mostrar p
  23477. ginas                    Imprimir                           Fechar                             Barra de Ferramentas               1 p
  23478. gina                           2 p
  23479. ginas                          4 p
  23480. ginas                          P
  23481. gina Inteira                     Zoom                               Largura da P
  23482. gina                  Ir para a p
  23483. gina                   Uma p
  23484. gina                         Duas p
  23485. ginas                       Quatro p
  23486. ginas                     Previsualizando relat
  23487. rio...       Falha na cria
  23488. o do arquivo !
  23489. Tente novamente.                                  Erro                               Impressora n
  23490. o encontrada.
  23491. Instale uma impressora e execute o relat
  23492. rio novamente.                  \<Miniaturas...                    C
  23493. pias                             Salvar relat
  23494. 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
  23495. rio por email                   Fechar relat
  23496. rio                   Imprimir                           Mostrar miniaturas                 Previsualiza
  23497. o geral              Impressoras dispon
  23498. veis            Ir para p
  23499. gina                     Ok                                 Cancelar                           Prefer
  23500. ncias de impress
  23501. o          Customizar impress
  23502. o               Geral                              Prefer
  23503. ncias                       Intervalo de p
  23504. ginas               Tudo                               P
  23505. gina atual                       P
  23506. ginas :                          Paginas de %FP% a %LP%             P
  23507. gina                             Grupo de p
  23508. ginas inicial           
  23509. ltimo grupo de p
  23510. ginas            Pr
  23511. ximo grupo de p
  23512. ginas           Grupo de p
  23513. ginas anterior          Configura
  23514. es            Configura
  23515. o da previsualiza
  23516. o de relat
  23517. rios     Geral          Idioma                   Barra de ferramentas               Posi
  23518. o de dock          Quantidade de p
  23519. ginas    N
  23520. vel de zoom            Estado da janela         Miniaturas por p
  23521. gina         Vis
  23522. vel             Invis
  23523. vel           Undocked            Ferramentas no TOPO da janela                Ferramentas 
  23524.  ESQUERDA da janela             Ferramentas 
  23525.  DIREITA da janela              Ferramentas ABAIXO da janela                 Defini
  23526. es do arquivo de recursos                 Normal         Minimizado          Maximizado          Controles      Sa
  23527. da          Email          Tipo de email                 Tipo de anexo                 Gerar automaticamente anexo de email              Configura
  23528. es para envio de emails Servidor SMTP            Login               Senha               Porta SMTP          Identifica
  23529. o       Usar conex
  23530. o segura (SSL)          Modo personalizado                 Enviar email                       Assunto             Destinat
  23531. rio        Mensagem            Enviar              Tamanho dos bot
  23532. es       Pequeno (16x16 pixels)   Grande (32x32 pixels)    Localizar           Localizar pr
  23533. ximo             Procurar atr
  23534. s                               Encontrar texto:                             Texto n
  23535. o localizado!              Erro ao enviar email                         Destinat
  23536. rio n
  23537. o especificado                Mensagem n
  23538. o foi enviada                     Protocolo de autentica
  23539. o inv
  23540. lido           Servidor SMTP n
  23541. o especificado               Usu
  23542. rio/senha s
  23543. o necess
  23544. rios para autentica
  23545. sica      Remetente vazio                              Assunto vazio                                Configura
  23546. o de email inv
  23547. lida               Anexo n
  23548. o encontrado                    Linguagem solicitada n
  23549. o foi localizada O arquivo de relatorio n
  23550. o foi localizado    Salvar arquivo como ...            Op
  23551. es de impress
  23552. o gerais              Configurar impressora atual             Max. p
  23553. ginas a buscar                   Barra de progresso       Original (plana)              Barra de progressos do Windows          Silencioso                    Inicializando...         Executando c
  23554. lculos preliminares...     Criando relat
  23555. rio...     segs.     Interromper a execu
  23556. o do relat
  23557. rio? (Se selecionar 'N
  23558. o', o relat
  23559. rio continuar
  23560. .)       <ESC> Cancela...                        A gera
  23561. o do relat
  23562. rio foi cancelada. Seus resultados est
  23563. o incompletos.                            Aten
  23564. o        Configura
  23565. es salvas. As mudan
  23566. as entrar
  23567. o em vigor na pr
  23568. xima sess
  23569. o de relat
  23570. rio.                 It
  23571. lico        Negrito        Sublinhado     Tamanho da fonte         Nome da fonte       Anexos         Alinhar 
  23572.  esquerda       Alinhar 
  23573.  direita        Centralizar              Justificado              Aumentar recuo      Diminuir recuo      Hyperlink      Imagem              Barra horizontal    Modelo HTML para mensagemSolicitar confirma
  23574. o              Prioridade     Recortar       Copiar         Colar          Arquivo criado com sucesso              Lista com marcadores          Lista numerada                Desfazer            Refazer             Novo documento           Limpar formata
  23575. 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
  23576. o                     Marcar o arquivo salvo como texto padr
  23577. o para o corpo dos emails?                         Abrir com o visualizador padr
  23578. o         Op
  23579. es de PDF                 Inserir fontes no PDF              Permite imprimir              Permite alterar               Permite copiar                Permite adicionar anota
  23580. es        Criptografar documento        Senha mestre                  Senha do usu
  23581. rio              Senhas 'mestre' e do 'usu
  23582. rio' para o PDF devem ser diferentes!       Modo de p
  23583. gina                Visualiza
  23584. o normal           Show the outlines pane        Exibir painel de miniaturas   Autor do PDF                  T
  23585. tulo do PDF                 Fontes de s
  23586. mbolos or cod. barras                 Lista de fontes que n
  23587. o pode ser convertida normalmente. Em geral c
  23588. d de barras e desenhos. Usar virgula como separador, ex. "Webdings,Biro"                              Configura
  23589. o inv
  23590. lida do servidor SMTP  Continuar assim mesmo?                  Inconsist
  23591. ncia nas configura
  23592. es        Padr
  23593. o                        Selecione os contatos                   Buscar campo                  Gera p
  23594. ginas em formato imagem     Anexar arquivo           Selecionar todos         Descelecionar todos      Inverter sele
  23595. o         Previsualiza
  23596. o          Bot
  23597. o fechar             Fonte padr
  23598. o             Por favor aguarde ...    Converter planilha para o formato 'Excel 97' ? (requer MS Excel ou OpenOffice instalados)                                         Repetir cabe
  23599. alho de p
  23600. ginas do relat
  23601. rio na planilha            Repetir rodap
  23602.  de p
  23603. ginas do relat
  23604. rio na planilha               Extens
  23605. o do arquivo de planilha          Omite n
  23606. mero de p
  23607. gina nas planilhas                   Alinhar c
  23608. lulas 
  23609.  esquerda                        Salvar em MHTML                    Relatorio 
  23610.  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
  23611. OL        201111281252Imprimir                           Inicio                             P
  23612. gina anterior                    P
  23613. gina siguiente                   
  23614. ltima p
  23615. gina                      Ir a p
  23616. gina                        Mostrar p
  23617. ginas                    Imprimir                           Cerrar                             Barra de herramientas              1 p
  23618. gina                           2 p
  23619. ginas                          4 p
  23620. ginas                          P
  23621. gina entera                      Zoom                               Ancho de p
  23622. gina                    Ir a p
  23623. gina                        Una p
  23624. gina                         Dos p
  23625. ginas                        Cuatro p
  23626. ginas                     Vista previa del informe...        
  23627. No se pudo crear el archivo! Por favor int
  23628. 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
  23629. nico        Cerrar informe                     Imprimir informe                   Mostrar miniaturas                 Vista previa global                Impresoras disponibles             Ir a p
  23630. gina                        Aceptar                            Cancelar                           Preferencias de impresi
  23631. n          Personalizar impresi
  23632. n             General                            Preferencias                       Rango de p
  23633. ginas                   Todas las p
  23634. ginas                  P
  23635. gina actual                      P
  23636. ginas:                           P
  23637. ginas de %FP% a %LP%             P
  23638. gina                             Primera p
  23639. gina del grupo           
  23640. ltima p
  23641. gina del grupo            Grupo de p
  23642. ginas siguiente         Grupo de p
  23643. ginas anterior          Configuraciones          Configuraci
  23644. n de vista previa de informe          General        Idioma                   Barra de herramientas              Posici
  23645. n de acoplamiento Cantidad de p
  23646. ginas      Nivel de zoom            Estado de la ventana     Miniaturas por p
  23647. 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
  23648. ticamente archivo de correo         Configuraci
  23649. n para env
  23650. o de correosServidor SMTP            Inicio de sesi
  23651. n    Contrase
  23652. a          Puerto SMTP         Remitente           Usar conexion segura (SSL)         Modo personalizado                 Enviar correo                      Asunto              Destinatario        Mensaje             Enviar              Tama
  23653. o de botones        Peque
  23654. o (16x16 pixels)   Grande (32x32 pixels)    Buscar              Buscar siguiente              Buscar hacia atr
  23655. s                           Buscar texto:                                
  23656. Texto no encontrado!              Error al enviar el correo                    Destinatario no especificado                 Mensaje no fue enviado                       Protocolo de autenticaci
  23657. n inv
  23658. lido          Servidor SMTP no especificado                Usuario/contrase
  23659. a son necesarios para autenticaci
  23660. sica Remitente est
  23661.  en blanco                     Asunto est
  23662.  en blanco                        Configuraci
  23663. n de correo inv
  23664. lida             Adjunto no encontrado                   Lenguaje seleccionado no encontrado     No se puede encontrar el archivo del informe Guardar archivo como...            Opciones generales de impresi
  23665. n         Configurar impresora actual             Max. p
  23666. ginas a buscar                   Barra de progreso        Predeterminado                Barra de progreso de Windows            Silencioso                    Inicializando...         Ejecutando c
  23667. lculos preliminares...     Creando informe...       segs.     
  23668. Detener la ejecuci
  23669. n del informe? (Si selecciona 'No', el informe continuar
  23670. .)           Presione [Esc] para cancelar...         La ejecuci
  23671. n del informe fue cancelada. Sus resultados no est
  23672. n completos.                          Atenci
  23673. n       Configuraci
  23674. n actualizada. Los cambios realizados regir
  23675. n a partir de la pr
  23676. xima sesi
  23677. n de informe. Cursiva        Negrita        Subrayado      Tama
  23678. o de fuente         Nombre de fuente    Adjuntos       Alinear a la izquierda   Alinear a la derecha     Centrar                  Justificado              Aumentar sangr
  23679. a    Reducir sangr
  23680. a     Hiperv
  23681. nculo   Imagen              Barra horizontal    Modelo HTML para mensaje Solicitar confirmaci
  23682. n             Prioridad      Cortar         Copiar         Pegar          Archivo creado exitosamente.            Lista con vi
  23683. etas             Lista numerada                Deshacer            Rehacer             Nuevo documento          Limpiar formato               
  23684. 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
  23685. n         Permitir la edici
  23686. n           Permitir copiar               Permitir agregar notas             Encriptar documento           Contrase
  23687. a maestra            Contrase
  23688. a de usuario         Las contrase
  23689. as maestras y de usuario del PDF deben ser diferentes!   Modo p
  23690. gina                   Modo vista                    Mostrar el panel  de contornosMostrar el panel de miniaturasAutor del PDF                 T
  23691. tulo del PDF                Lista de fuentes de s
  23692. mbolos                      Lista de fuentes que no se pueden convertir en PDF. Generalmente fuentes de s
  23693. mbolos o c
  23694. digos de barra. Delimitado por comas, Ej: "Webdings, Biro"                       Configuraci
  23695. n de SMTP de correo inv
  23696. Desea continuar?                       Inconsistencia de instalac
  23697. n            Predeterminado                Seleccionar los destinatarios           Campo de b
  23698. squeda             Representar p
  23699. ginas como im
  23700. gen    Archivo adjunto          Seleccionar todo         Seleccionar ninguno      Invertir selecci
  23701. n       Vista previa             Bot
  23702. n cerrar             Fuente b
  23703. sica            Por favor espere ...     
  23704. Convertir hoja de trabajo a formato 'Excel 97'? (requiere MS Excel u OpenOffice instalado)                                       Repetir encabezado de p
  23705. gina en hoja de trabajo                  Repetir pie de p
  23706. gina en hoja de trabajo                         Extensi
  23707. n de hoja de trabajo             Omitir n
  23708. meros de p
  23709. 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
  23710. E         201111281254Yazd
  23711. r                             
  23712. lk sayfa                          
  23713. nceki sayfa                       Sonraki sayfa                      Son sayfa                          Sayfaya git                        Sayfalar
  23714. ster                   Raporu yazd
  23715. r                      
  23716. nizlemeyi kapat                   Ara
  23717. u                        Tek sayfa                          
  23718. ki sayfa                          D
  23719. rt sayfa                         T
  23720. m sayfa                          Yakla
  23721.                              Sayfa geni
  23722. i                    Sayfaya git                        Tek sayfa                          
  23723. ki sayfa                          D
  23724. rt sayfa                         Rapor 
  23725. nizleme...                  Dosya Olu
  23726. turma Hatas
  23727.  ! Tekrar Deneyin..                                       Hata                               Yaz
  23728.  bulunamad
  23729. tfen bir yaz
  23730. kleyin ve raporu tekrar 
  23731.  deneyin.                \<Minyat
  23732. rler...                   Kopya say
  23733.                        Raporu kaydet                      Resim dosyas
  23734.  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
  23735. nder                    Kapat                              Yazd
  23736. r                             Minyat
  23737. rleri G
  23738. ster                Genel 
  23739. nizleme                     Kullan
  23740. r Yaz
  23741. lar           Sayfaya Git                        Tamam                              Vazge
  23742.                              Yazd
  23743. rma Se
  23744. enekleri               Yazd
  23745. zelle
  23746. tir              Genel                              Tercihler                          Sayfa Aral
  23747.                    T
  23748. m Sayfalar                       Bu Sayfa                           Sayfalar :                         Sayfa Aral
  23749.  ( %FP% - %LP% )   Sayfa                              
  23750. lk sayfa ayar
  23751.                     Son sayfa ayar
  23752.                     Sonraki sayfa ayar
  23753.                 
  23754. nceki sayfa ayar
  23755.                  Ayarlar                  Rapor 
  23756. nizleme Ayarlar
  23757.                            Genel          Dil                      Ara
  23758. u                        Ara
  23759. u Pozisyonu    Sayfa Say
  23760.              Yak
  23761. rma Derecesi   Pencere Konumu           Sayfa Ba
  23762. na Minyat
  23763. r Say
  23764. r             G
  23765. nmez            Sabit               
  23766. stte                                        Solda                                        Sa
  23767. da                                        Altta                                        Ayarlar
  23768.  Dosyadan Al                              Normal         K
  23769.          B
  23770.          Kontroller     
  23771.           e-Posta        e-Posta bi
  23772. imi                Dosya T
  23773.                     e-Posta dosyas
  23774.  otomatik olarak olu
  23775. tur         CDO E-posta Ayarlar
  23776.                SMTP Sunucu              Kullan
  23777.        
  23778. ifre               SMTP port           G
  23779. nderen            G
  23780. venli Ba
  23781. lanti (SSL)             
  23782. zel Prosed
  23783. r                      E-posta G
  23784. nder                     Konu                Kime                Mesaj               G
  23785. nder              Buton Boyutu             K
  23786. k (16x16 pixels)     B
  23787. k (32x32 pixels)     Bul                 Sonrakini Bul                 
  23788. ncekini Bul                                 Aranan Metin:                                Bulunmad
  23789. !                         E-posta G
  23790. ndermede Hata!                     Hedef Belirtilmedi                           Message G
  23791. nderilemedi                        Ge
  23792. ersiz Do
  23793. rulama Protokolu                 SMTP sunucu belirtilmedi                     Kullan
  23794. ifre Do
  23795. rulama i
  23796. in gereklidir               Kimden Bo
  23797. !                                  Konu Bo
  23798. !                                    Hatal
  23799.  e-posta yap
  23800.                 Eklenti Bulunamad
  23801.                       Se
  23802. ilen Dil Bulunamad
  23803.                   Rapor Kaynak Dosyas
  23804.  Bulunamad
  23805.               Farkl
  23806.  Kaydet ..                   Genel Yaz
  23807.  Dialog Se
  23808. enekleri         Se
  23809. ili Yaz
  23810. in Sayfa Ayar
  23811.           Maks.Arama Sayfas
  23812.                       ilerleme 
  23813. u          Varsay
  23814. lan                    Windows ilerleme 
  23815. u                 Sessiz                        Ba
  23816. yor...          Hesaplama Yap
  23817. yor...                  Rapor Haz
  23818. yor       Saniye    
  23819. lem Durdurulsunmu? (Hay
  23820. larsan
  23821. lem devam edecek)                               Press Esc to cancel...                  Raporun 
  23822.  Durduruldu. Rapor Tamamlanmad
  23823. .                                                   Dikkat         Ayarlar G
  23824. ncellendi. G
  23825. ncellenmi
  23826.  Ayarlar Sonraki 
  23827. nizlemede Aktif Olacak.                          
  23828. talik         Kal
  23829. n          Alt 
  23830. izgili    Boyut                    Yaz
  23831.  tipi           Eklentiler     Sola Yaslanm
  23832.            Sa
  23833. a Yaslanm
  23834.            Ortalanm
  23835.                Sayfaya Yaslanm
  23836.         Bo
  23837. u Artt
  23838. r      Bo
  23839. r       Link           Resim               Yat.Kayd
  23840. u Mesaj i
  23841. in HTML bi
  23842. imi   Al
  23843.  Raporu                      
  23844. ncelik        Kes            Kopyala        Yap
  23845. r       Dosya Ba
  23846.  ile Olu
  23847. turuldu            Madde 
  23848. areti Bi
  23849. imlendir     Numara 
  23850. areti Bi
  23851. imlendir    Geri Al             
  23852. leri Al            Yeni D
  23853. man             Bi
  23854. imlemeyi Temizle           e-Posta G
  23855. nderildi!           e-Posta G
  23856. nderiliyor...Bekleyiniz..     Yaz
  23857.  Rengi               Arka Plan Rengi          Dosya Eklentisini 
  23858. kart                Mesaj G
  23859. vdesi HTML olarak kullan
  23860. lacak                      Dosya Bundan Sonraki Oturumlar 
  23861. in Kaydedilsinmi?                                        Varsay
  23862. lan G
  23863. leyiciyi A
  23864.            PDF Se
  23865. enekleri               G
  23866.  Fontlar                     Yazd
  23867. labilir                D
  23868. zenlenebilir                Kopyalanabilir                Not Eklenebilir                    D
  23869. ifrele              Ana 
  23870. ifre                     Kullan
  23871. ifresi             Ana 
  23872. ifre ve Kullan
  23873. ifreleri PDF i
  23874. in Farkl
  23875.  Olmal
  23876. r            Sayfa G
  23877.                 Normal G
  23878. m                
  23879. zet B
  23880. lmesini G
  23881. ster         K
  23882. lmede G
  23883. ster          PDF Yaratan                   PDF Ba
  23884. k                    Sembol yada bar code font listesi                 Font listesi PDF te d
  23885. lemez. Genellikle, bar code ve sembol fontlar
  23886.  virgul ile ayr
  23887. rn. "Webdings,Biro"                                                     Ge
  23888. ersiz SMTP email konfig
  23889. rasyonu      Devam Edilsinmi?                        Tutars
  23890. z Kurulum!                       Varsay
  23891. lan                    Al
  23892.                            Aranacak Alan Ad
  23893.              Sayfalar
  23894.  resim olarak d
  23895. r    Dosya ekle               Hepsini se
  23896.               Hi
  23897. birini se
  23898. me          Ters se
  23899. im               Rapor 
  23900. nizleme           Kapatma D
  23901. mesi          PDF Varsay
  23902. lan Yaz
  23903. tipi  L
  23904. tfen Bekleyiniz....    
  23905. ma sayfas
  23906.  'Excel 97' bi
  23907. imine d
  23908. ? (MS Excel yada OpenOffice gerekir)                                           Rapor ba
  23909. ma sayfas
  23910. nda tekrarla                   Rapor alt ba
  23911. ma sayfas
  23912. nda tekrarla               
  23913. ma sayfas
  23914.  dosya uzant
  23915.            Sayfa numaralar
  23916. ma sayfas
  23917. nda es ge
  23918.            H
  23919. 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
  23920.  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
  23921.  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
  23922.  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 
  23923.  stato inviato             Protocollo di autenticazione non valido      Server SMTP non specificato                  Lo username/password 
  23924.  richiesto per autenticazione di base Da 
  23925.  vuoto                                   Soggetto 
  23926.  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
  23927.  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
  23928.  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
  23929.        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
  23930.  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
  23931.  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 
  23932.  troppo grande per essere esportato in formato EXCEL. Controlla il documento creato perch
  23933.  incompleto!                                   Conversione al formato XLS                        Preparazione dati                   PERSIAN        
  23934.           201102011256
  23935.                                 
  23936.                          
  23937.                                
  23938.                                
  23939.                          
  23940.                         
  23941.                         
  23942.                           
  23943.                      
  23944.                           
  23945.                             
  23946.                             
  23947.                           
  23948.                           
  23949.                           
  23950.                            
  23951.                         
  23952.                             
  23953.                             
  23954.                           
  23955.  ...                
  23956. .                                    
  23957.                                 
  23958. .                               \<
  23959.                       
  23960.                            
  23961.                         
  23962.  ...      
  23963.  PDF                  
  23964.  HTML                 
  23965.  RTF                  
  23966.  XLS                  
  23967.  TXT / CSV / XL5      Output path                        
  23968.                   
  23969.                          
  23970.                           
  23971.                   
  23972.                       
  23973.                      
  23974.                         
  23975.                               
  23976.                              
  23977.                         
  23978.                    
  23979.                               
  23980.                              
  23981.                        
  23982.                          
  23983.                           
  23984.                               
  23985.  %FP% 
  23986.  %LP%              
  23987.  #                             
  23988.                   
  23989.                   
  23990.                    
  23991.                    
  23992.                  
  23993.                                
  23994.           
  23995.                      
  23996.                    
  23997.  Dock              
  23998.           
  23999.               
  24000.      
  24001.                
  24002.                Undocked            
  24003.                        
  24004.                       
  24005.                     
  24006.                        
  24007.                       
  24008.            
  24009.             
  24010.             
  24011.        
  24012.           
  24013.        
  24014.                  
  24015.                      
  24016.                         
  24017.  CDO                        
  24018.  SMTP                
  24019.           
  24020.              
  24021.  SMTP           
  24022.              
  24023.  (SSL)                   Custom procedure                   
  24024.                      
  24025.                
  24026.               
  24027.                 
  24028.                
  24029.               
  24030.  (16x16 
  24031. )       
  24032.  (32x32 
  24033. )       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                 
  24034.  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         201102011252Drukuj                             Pierwsza strona                    Poprzednia                         Nast
  24035. pna                           Ostatnia strona                    Id
  24036.  do strony                      Poka
  24037.  strony                       Drukuj raport                      Zamknij podgl
  24038. d                    Panel sterowania                   1 strona                           2 strony                           4 strony                           Ca
  24039. a strona                        Lupa                               Szeroko
  24040.  strony                   Id
  24041.  do strony                      Jedna strona                       Dwie strony                        Cztery strony                      Przeglad raportu...                B
  24042. d utworzenia pliku !
  24043. Prosz
  24044. buj ponownie.                                B
  24045. d                               Brak drukarek.
  24046. Zainstaluj drukark
  24047.  i spr
  24048. buj ponownie.                                              \<Miniatury...                     Kopie                              Zapisz raport                      Zapisz jako plik graficzny...      Zapisz jako PDF                    Zapisz jako HTML                   Zapisz jako RTF                    Zapisz jako XLS                    Zapisz jako TXT / CSV / XL5        Output path                        Wy
  24049. lij raport za pomoc
  24050.  e-mail               Zamknij raport                     Drukuj raport                      Poka
  24051.  miniatury                    Globalny podgl
  24052. d                   Dost
  24053. pne drukarki                  Id
  24054.  do strony                      TAK                                Cofnij                             Ustawienia drukarki                Dostosuj drukowanie                General                            Ustawienia                         Rozmiar strony                     Wszystkie strony                   Bie
  24055. aca strona                     Strony                             Strony od %FP% do %LP%             Strona #                           Pierwsza strona                    Ostatnia strona                    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                Buttons size             Small (16x16 pixels)     Big (32x32 pixels)       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                 Zapisz 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                      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 !
  24056. Silahkan mencoba sesaat lagi.                            Error                              Tidak ditemukan printer.
  24057. 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
  24058. ck                             Vor                                Letzte Seite                       Gehe zu Seite                      Anzahl Seiten                      Drucken                            Beenden                            Toolbar                            1 Seite                            2 Seiten                           4 Seiten                           Ganze Seite                        Anzeigegr
  24059. e                       Seitenbreite                       Gehe zu Seite                      1 Seite                            2 Seiten                           4 Seiten                           Vorschau f
  24060. 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
  24061. 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
  24062. chste Seitengruppe               Vorherige Seitengruppe             Optionen                 Optionen                                          Allgemein      Sprache                  Toolbar-Sichtbarkeit               Toolbar-Position         Anzahl Vorschauseiten    Anzeigegr
  24063. 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
  24064. chengr
  24065. e       Klein (16x16 Pixel)      Gro
  24066.  (32x32 Pixel)       Suchen              Weiter Suchen                 R
  24067. rts Suchen                             Text Suchen                                  Nicht gefunden                     Fehler beim Senden                           Ziel nicht definiert                         Nachricht wurde nicht gesendet               Ung
  24068. ltiges Authentifizierungsprotokoll       SMTP Server nicht spezifiziert               Benutzername/Passwort erforderlich                          Absender ist leer                            Betreffzeile ist leer                        Ung
  24069. ltige Email-Konfiguration                Anhang nicht gefunden                   Ausgew
  24070. 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
  24071. hlen Sie "Nein" um fortzusetzen)                                 Dr
  24072. cken Sie Esc um abzubrechen...       Reporterstellung abgebrochen. Resultat ist unvollst
  24073. ndig.                                           Vorsicht       Einstellungen wurden aktualisiert. 
  24074. nderungen werden in der n
  24075. chsten Vorschau wirksam.              Kursiv         Fett           Unterstrichen  Schriftgr
  24076. e             Schriftname         Anh
  24077. nge        Linksb
  24078. ndig              Rechtsb
  24079. ndig             Zentriert                Blocksatz                Rand vergr
  24080. ern     Rand verkleinern    Link           Bild                Horizontales Band   Nachricht als HTML       Best
  24081. tigung anfordern              Priorit
  24082. t      Ausschneiden   Kopieren       Einf
  24083. gen       Datei wurde erfolgreich erstellt.       Aufz
  24084. hlungszeichen            Aufz
  24085. hlungsnummern            R
  24086. ngig          Wiederholen         Neues Dokument           Formatierung zur
  24087. cksetzen     Email wurde gesendet          Nachricht wird gesendet...              Schriftfarbe             Hintergrundfarbe         Dateianlage entfernen                   HTML Email-Vorlage                                          Soll die gespeicherte Datei ab der n
  24088. chsten Sitzung zur Standardvorlage werden?           Ansicht 
  24089. ffnen                          PDF-Optionen                  Fonts einbetten                    Drucken zulassen              Editieren zulassen            Kopieren zulassen             Hinzuf
  24090. gen von Anmerkungen zulassenDokument verschl
  24091. sseln        Passwort Administrator        Passwort Benutzer             PDF-Passw
  24092. rter f
  24093. r Administrator und Benutzer m
  24094. ssen verschieden sein Seiten-Modus                  Standrdansicht                Entwurfsansicht               Miniaturansicht               PDF Autor/in                  PDF Titel                     Liste Symbol-/BarCode Fonts                       Zeichens
  24095. tze, die ins PDF-Format konvertiert werden k
  24096. nnen. Typischerweise BarCodes und Symbol-Fonts. Komma-separierte Liste, z.B.. "Webdings,Biro"                       Ung
  24097. ltige SMTP Email-Konfiguration!     Trotzdem fortfahren?                    Setup-Fehler                            Standard                      Auswahl Empf
  24098. nger                       Suchen in                     Seiten als Bilder generieren       Datei anh
  24099. ngen           Alles ausw
  24100. hlen          Auswahl aufheben         Auswahl umkehren         Druckvorschau            Schlie
  24101. en-Schaltfl
  24102. che   PDF Standardschriftart   Bitte warten Sie ...     Arbeitsblatt ins 'Excel 97' Format konvertieren? (erfordert MS Excel oder OpenOffice)                                             Reportseiten-
  24103. berschriften in Excel wiederholen                  Reportseiten-Fu
  24104. zeilen in Excel wiederholen                      Excel-Dateinamenerweiterung              Entfernt Seitenzahlfelder in Excel                     Zeichenformattierte Zellen linksb
  24105. 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          
  24106.           201111281250Tisk                               Prvn
  24107.  strana                       P
  24108. edchoz
  24109.                           Dal
  24110.                               Posledn
  24111.  strana                    Jdi na stranu...                   Zobrazit str
  24112. nky                   Tisknout                           Zav
  24113. hled                      N
  24114. stroje                           Zobrazit jednu str
  24115. nku             Zobrazit dv
  24116. nky               Zobrazit 
  24117. i str
  24118. nky             Cel
  24119. nka                       Lupa                               Cel
  24120. ka                         Jdi na ...                         Zobrazit jednu str
  24121. nku             Zobrazit dv
  24122. nky               Zobrazit 
  24123. i str
  24124. nky             N
  24125. hled tisku...                    Chyba p
  24126. i vytv
  24127.  souboru ! Zkuste to pros
  24128. m znovu.                           Chyba                              
  24129. rny!  Pros
  24130. m, nainstalujte tisk
  24131. rnu a zkuste to znovu.                                   \<N
  24132. hledy...                       Po
  24133. et kopi
  24134.                         Ulo
  24135. it jako...                     Ulo
  24136. it jako obr
  24137. zek...             Ulo
  24138. it jako PDF                    Ulo
  24139. it jako HTML                   Ulo
  24140. it jako RTF                    Ulo
  24141. it jako XLS                    Ulo
  24142. it jako TXT / CSV / XL5        Ulo
  24143. it do                          Odeslat sestavu e-mailem                     Zav
  24144. t                             Tisknout                           Zobrazit n
  24145. hledy                   N
  24146. hledy                            Dostupn
  24147.  tisk
  24148. rny                  Jdi na stranu...                   Ok                                 Storno                             P
  24149. edvolby tisku                    Nastaven
  24150.  tisku                    Obecn
  24151.                              P
  24152. edvolby                          Rozsah str
  24153. nek                     V
  24154. echny str
  24155. nky                    Aktu
  24156.  strana                    Str
  24157. nky:                           Strany od %FP% do %LP%             Strana                             Nastav prvn
  24158.  stranu                Nastav posledn
  24159.  stranu             Nastav dal
  24160.  stranu                Nastav p
  24161. edchoz
  24162.  stranu            Konfigurace              Konfigurace prohl
  24163. e                            Obecn
  24164.          Jazyk                    Zobrazit panel n
  24165. stroj
  24166.             Um
  24167.  panelu n
  24168. stroj
  24169. et zobrazen
  24170. ch stran  Zv
  24171.                  Pozice okna              Miniatur na stranu            Zobrazit            Skr
  24172. t               Voln
  24173.                Panel n
  24174. stroj
  24175.  naho
  24176. e                        Panel n
  24177. stroj
  24178.  vlevo                         Panel n
  24179. stroj
  24180.  vpravo                        Panel n
  24181. stroj
  24182.  dole                          Pou
  24183. t nastaven
  24184.  z resource souboru               Norm
  24185.        Minimalizovan
  24186.       Maximalizovan
  24187.       Prvky          V
  24188. stup         E-mail         Typ e-mailu                   Typ p
  24189. lohy                   Automaticky generovan
  24190.  e-mail                     CDO Email nastaven
  24191.                 SMTP server              Jm
  24192. no               Heslo               SMTP port           Odes
  24193. latel          Zabezpe
  24194. ipojen
  24195.  (SSL)        Vlastn
  24196.  procedura                  Odeslat e-mail                     P
  24197. t             Komu                Zpr
  24198. va              Odeslat             Velikost tla
  24199. tek        Mal
  24200.  (16x16 pixels)      Velk
  24201.  (32x32 pixels)     Hledat              Hledat dal
  24202.                   Hledat p
  24203. edchoz
  24204.                              Hledat text:                                 Nenalezeno!                        Chyba p
  24205. i odes
  24206.  emailu                   C
  24207. l nen
  24208.  definov
  24209. n                           Zpr
  24210. va NEBYLA odesl
  24211. na                       Neplatn
  24212.  autentifika
  24213.  protokol             SMTP server nen
  24214.  nastaven                    Jm
  24215. no/Heslo je vy
  24216. no pro z
  24217. kladn
  24218.               Chyb
  24219.  odes
  24220. latel                             Chyb
  24221.  subjekt                                Chybn
  24222.  konfigurace emailu                    P
  24223. loha nenalezena                      Nelze nal
  24224. zt po
  24225. adovan
  24226.  jazyk           Nelze nal
  24227. zt zdrojov
  24228.  soubor reportu         Ulo
  24229. it jako...                     Obecn
  24230.  vlastnosti tisk
  24231. rny              Nastavit vlastnosti aktu
  24232.  tisk
  24233. rny   Maximum str
  24234. nek pro hled
  24235.              Pr
  24236. h                   V
  24237.                        Pr
  24238. h                                  Tich
  24239. d                     Inicializace...          Prob
  24240.  kalkulace                       Vytv
  24241. stupu        sec(s)    Zastavit tisk ?  (Pokud zvol
  24242. te NE, tisk bude pokra
  24243. ovat...)                              Stiskn
  24244. te ESC pro p
  24245.              Tisk byl p
  24246. en. V
  24247. sledky nejsou kompletn
  24248. .                                                       Upozorn
  24249.      Nastaven
  24250. eno. Zm
  24251. ny se projev
  24252. i dal
  24253. m tisku.                                            Naklon
  24254.       Tu
  24255.           Podtr
  24256.       Velikost p
  24257. sma           P
  24258. smo               P
  24259. lohy        Zarovnat vlevo           Zarovnat vpravo          Zarovnat doprost
  24260. ed      Do bloku                 Zv
  24261. it okraj       Zmen
  24262. it okraj       Odkaz          Obr
  24263. zek             Horizont
  24264. ta  HTML 
  24265. ablona             Dotaz na p
  24266. jemce                  Priorita       Odst
  24267. ihnout    Kop
  24268. rovat      Vlo
  24269. it         Soubor byl 
  24270.  vytvo
  24271. en             Form
  24272. ek           Form
  24273. sel             Zp
  24274. t                Vp
  24275. ed               Nov
  24276.  dokument            Vymazat form
  24277.            Email by odesl
  24278. n!             Zpr
  24279. va se odes
  24280. , strpen
  24281.  pros
  24282. m...    Barva textu              Barva pozad
  24283.              Odebrat p
  24284. lohu                         HTML soubor, kter
  24285.  bude pou
  24286. it jako t
  24287. lo emailu             Pou
  24288. t ulo
  24289.  soubor jako t
  24290. lo emailu pro p
  24291.  ?                                       Otev
  24292.  prohl
  24293.                PDF volby                     Vlo
  24294.  fonty                      Povolit tisk                  Povolit 
  24295. pravy                Povolit kop
  24296.             Povolit pozn
  24297. mky                   Za
  24298. ifrovat dokument           Heslo administr
  24299. tora          Heslo u
  24300. ivatele               Administr
  24301. torsk
  24302. ivatelsk
  24303.  heslo se nesm
  24304.  shodovat!               M
  24305. d str
  24306. nky                   Normaln
  24307.  zobrazen
  24308.             Zobrazit obrysy               Zobrazit n
  24309. hledy              PDF Autor                     PDF titulek                   Seznam font
  24310.                                       Seznam font
  24311. , kter
  24312.  nemohou b
  24313. t vlo
  24314. eny do PDF. Obvykle 
  24315. dy nebo symboly. Nap
  24316. . "Webdings,Biro".                                                                  Chybn
  24317.  SMTP konfigurace!                Pokra
  24318. ovat ?                            Chybn
  24319.  konfigurace                      V
  24320.                        Vybrat p
  24321. jemce                         Hledat                        Vykreslit str
  24322. nky jako obr
  24323. zky     P
  24324. ipojit soubor          Vybrat v
  24325. e               Zru
  24326. it ozna
  24327.           Invertovat v
  24328. r         N
  24329. hled tisku             Tla
  24330. tko zav
  24331. t          PDF v
  24332. smo        
  24333. ekejte pros
  24334. m ...       Konvertovat list do form
  24335. tu 'Excel97'? (vy
  24336. aduje nainstalovan
  24337.  MS Excel nebo Open Office)                                         Opakovat z
  24338. nky v listu                                 Opakovat z
  24339. nky v listu                                  P
  24340. pona souboru                          Vynechat pole 
  24341. slo str
  24342. nky v listu                    Zarovnat bu
  24343. ky doleva                             Ulo
  24344. 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
  24345.                               
  24346.                       
  24347.                              
  24348.                              
  24349.                      
  24350.                            
  24351.                      
  24352.                       
  24353.                               
  24354.                             
  24355.                          
  24356.                              
  24357.                          
  24358.                        
  24359.                               
  24360.                          
  24361.                            
  24362.                          
  24363.                              
  24364.                          
  24365.                         
  24366.                                 
  24367.                                 
  24368.                                         \<
  24369.                         
  24370.                         
  24371.                       
  24372.                         
  24373.  PDF                          
  24374.  HTML                         
  24375.  RTF                          
  24376.  XLS                          
  24377.  TXT / CSV / XL5              Output path                        
  24378.              
  24379.                       
  24380.                       
  24381.                           
  24382.                            
  24383.                    
  24384.                            
  24385.                               
  24386.                               
  24387.                      
  24388.                         
  24389.                               
  24390.                        
  24391.                        
  24392.                           
  24393.                         
  24394.                               
  24395.  %FP% 
  24396.  %LP%           
  24397.                            
  24398.                    
  24399.                    
  24400.              
  24401.              
  24402.                   
  24403.                                 
  24404.           
  24405.                     
  24406.                        
  24407.               
  24408.             
  24409.                
  24410.                
  24411.            
  24412.             
  24413.                             
  24414.                            
  24415.                            
  24416.                             
  24417.                 
  24418.            
  24419.                 
  24420.                 
  24421.         
  24422.           
  24423.          
  24424.                   
  24425.                 
  24426.  CDO      
  24427.  SMTP              
  24428.         
  24429.            
  24430.  SMTP          
  24431.               
  24432.  (SSL)                    
  24433.                       
  24434.             
  24435.              
  24436.          
  24437.                 
  24438.                
  24439.               
  24440.  (16x16)             
  24441.  (32x32)             
  24442.                  
  24443.                       
  24444.                                     
  24445. :                                    
  24446.                        
  24447.               
  24448.                              
  24449.                               
  24450.                    
  24451.  SMTP 
  24452.                         
  24453.                      
  24454.                                 
  24455.                            
  24456.                 
  24457.                         
  24458.         
  24459.               
  24460. ....                    
  24461.                    
  24462.             
  24463.             
  24464.               
  24465.                      
  24466.                        
  24467.                           
  24468. ...                 Running calculation prepass...          
  24469.  ...        
  24470. )                           
  24471.  Esc 
  24472.  ...                    
  24473.                                                           
  24474.          
  24475. .                              
  24476.            
  24477.            
  24478.           
  24479.                  
  24480.             
  24481.        
  24482.             
  24483.             
  24484.            
  24485.              
  24486.        
  24487.        
  24488.          
  24489.                 
  24490.            
  24491.  HTML     
  24492.                       
  24493.          
  24494.             
  24495.             
  24496.           
  24497.                       
  24498.        
  24499.                  
  24500.              
  24501.                
  24502.               
  24503.                  
  24504.  ... 
  24505.        
  24506.               
  24507.               
  24508.                             
  24509.  HTML 
  24510.                      
  24511.                                    
  24512.                   
  24513.  PDF                 
  24514.                      
  24515.                
  24516.                
  24517.                  
  24518.               
  24519.                  
  24520.             
  24521.               
  24522.                 
  24523.                     
  24524.                       
  24525.             
  24526.           
  24527.  PDF                   
  24528.  PDF                  
  24529.                                 
  24530.  PDF. 
  24531. . "Webdings
  24532.  Biro"                                      
  24533.  SMTP 
  24534.       
  24535.                                 
  24536.                         
  24537.                      
  24538.                           
  24539.                      
  24540.                 
  24541.                 
  24542.             
  24543.              
  24544.             
  24545.               
  24546.                
  24547.  PDF    
  24548.  ...      
  24549.  "Excel 97"? (
  24550.  Excel or OpenIffice 
  24551. )                                                
  24552.  worksheet                                    
  24553.  worksheet                                    
  24554.  Worksheet                         
  24555.  worksheet                             
  24556.                            
  24557.  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          
  24558.        201110011253
  24559.                            
  24560.                        
  24561.                         
  24562.                             
  24563.                    
  24564.                  
  24565.                    
  24566.                   
  24567.             
  24568.                        1 
  24569.                            2 
  24570.                           4 
  24571.                           
  24572.                     
  24573.                          
  24574.               
  24575.                  
  24576.                          
  24577.                         
  24578.                    
  24579. ...          
  24580. ...                         
  24581.                               
  24582. .           \<
  24583. ...                  
  24584.                           
  24585.                 
  24586. ...   
  24587.  PDF                  
  24588.  HTML                 
  24589.  RTF                  
  24590.  XLS                  
  24591.  TXT / CSV / XL5      
  24592.                       
  24593.  e-mail                
  24594.             
  24595.                   
  24596.               
  24597.                
  24598.                  
  24599.                                  
  24600.                             
  24601.                 
  24602.                 
  24603.                              
  24604.                         
  24605.                       
  24606.                     
  24607.                     
  24608.                             
  24609.  %FP% 
  24610.  %LP%          
  24611.                              
  24612.                      
  24613.                  
  24614.                    
  24615.                
  24616.              
  24617.                  
  24618.          
  24619.                    
  24620.             
  24621.            
  24622.       
  24623.       
  24624.        
  24625.                
  24626.               
  24627.           
  24628.                 
  24629.            
  24630.               
  24631.                
  24632.                   
  24633.        
  24634.      
  24635.         
  24636.      Email          
  24637.                    
  24638.               
  24639.  Email                 
  24640.  CDO         
  24641.  SMTP         
  24642.              
  24643.      
  24644.  SMTP           
  24645.           
  24646.  (SSL)              
  24647.            
  24648. mail                     
  24649.                 
  24650.                 
  24651.                 
  24652.             
  24653.          
  24654.  (16x16 pixels)     
  24655.  (32x32 pixels     
  24656.               
  24657.                
  24658.                           
  24659. :                                     
  24660. !                     
  24661.  email                    
  24662.                    
  24663.                        
  24664.             
  24665.  SMTP 
  24666.            
  24667.       
  24668.                              
  24669.                                     
  24670.  email                        
  24671.               
  24672.          
  24673.  ...          
  24674.             
  24675.       
  24676.            
  24677.                     
  24678.  Windows              
  24679.                        
  24680. ...          
  24681. ...    
  24682. ...   
  24683. ...)    
  24684.  Esc 
  24685. ...               
  24686. .                                    
  24687.         
  24688. .             
  24689.        
  24690.       
  24691.         
  24692.            
  24693.       
  24694.           
  24695.        
  24696.        
  24697.               
  24698.  HTML     
  24699.         
  24700.       
  24701.      
  24702.      
  24703.                      
  24704.                       
  24705.             
  24706.               
  24707.          Email 
  24708. !               
  24709. ...    
  24710.      
  24711.        
  24712.                      
  24713.  HTML 
  24714.                      
  24715. ;        
  24716.      
  24717.  PDF                  
  24718.       
  24719.           
  24720.        
  24721.          
  24722.         
  24723.              
  24724.           
  24725.  PDF 
  24726.                 
  24727.                   
  24728.      
  24729.      
  24730.  PDF             
  24731.  PDF                
  24732.                  
  24733.  PDF. 
  24734. . "Webdings,Biro"                             
  24735.  SMTP       
  24736. ;                    
  24737.               
  24738.                    
  24739.                        
  24740.                  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                 
  24741.  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                      FRENCH         FRAN
  24742. AIS       201111281252Imprimer                           Premi
  24743. re page                      Pr
  24744. dente                         Suivante                           Derni
  24745. re page                      Aller 
  24746.  la page                    Afficher les pages                 Imprimer le rapport                Fermer la pr
  24747. visualisation         Barre d'outils                     1 Page                             2 Pages                            4 Pages                            Page Enti
  24748. re                       Zoom                               Largeur de Page                    Aller 
  24749.  la page                    Une page                           Deux pages                         Quatre pages                       Pr
  24750. visualisation du rapport        Impossible de cr
  24751. er le fichier ! S.V.P., veuillez r
  24752. essayer plus tard.          Erreur                             Aucune imprimante trouv
  24753. e. Veuillez installer une imprimante et r
  24754. 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
  24755. visualisation         Imprimer le Rapport                Afficher les Miniatures            Pr
  24756. visualisation Globale           Imprimantes Disponibles            Aller 
  24757.  la page                    Ok                                 Annuler                            Param
  24758. tres d'impression            Personnalisation de l'impression   G
  24759. ral                            Pr
  24760. rences                        Plage de Pages                     Toutes les Pages                   Page en Cours                      Pages                              Pages %FP% 
  24761.  %LP%                  Page #                             Premier groupe de pages            Dernier groupe de pages            Groupe de pages suivant            Groupe de pages pr
  24762. dent          Configurations           Configuration de l'aper
  24763. u avant impression        G
  24764. ral        Langage                  Visibilit
  24765.  de la Barre d'Outils    Position d'Accrochage    Nombre de rep
  24766. res        Niveau de Zoom           Etat de la fen
  24767. tre       Miniatures par page           Visible             Invisible           Flottant            Barre d'Outils en HAUT de la fen
  24768. tre         Barre d'Outils 
  24769.  GAUCHE de la fen
  24770. tre        Barre d'Outils 
  24771.  DROITE de la fen
  24772. tre        Barre d'Outils en BAS de la fen
  24773. tre          Utiliser les param
  24774. trages du fichier de ressourcesNormal         R
  24775. duit              Agrandi             Contr
  24776. les      Sortie         Courriel       Type de courriel              Type de Pi
  24777. ce Jointe          G
  24778. rer automatiquement le fichier de courriel    Configuration CDO                  Serveur SMTP             Utilisateur         Mot de Passe        Port SMTP           Exp
  24779. diteur          Connexion S
  24780. curis
  24781. e (SSL)          Proc
  24782. dure personnalis
  24783. e            Envoyer le Courriel                Objet               
  24784.                    Texte               Envoyer             Taille des Boutons       Petit (16x16 pixels)     Grand (32x32 pixels)     Rechercher          Trouver le suivant            Trouver le pr
  24785. dent                         Chercher:                                    Texte non trouv
  24786. !                  Erreur lors de l'envoi du courriel           Le destinataire n'a pas 
  24787. fini           Le message n'a pas 
  24788.  envoy
  24789.                 Protocole d'authentification invalide        Le serveur SMTP n'a pas 
  24790.  identifi
  24791.         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
  24792. ce jointe n'a pas 
  24793.  trouv
  24794. e     Le langage s
  24795. lectionn
  24796.  est introuvable  Le rapport source est introuvable            Enregistrer sous...                Options d'impression globales           Configuration de l'imprimante en cours  Nbre Maximum de pages 
  24797.  chercher        Barre de progression     D
  24798. faut                        Barre de progression Windows            Silencieux                    Initialisation...        Calculs pr
  24799. paratoires en cours...       Cr
  24800. ation de la sortie... sec(s)    Voulez-vous interrompre l'ex
  24801. cution du rapport? (Si Non, l'ex
  24802. cution du rapport reprendra)Appuyez sur <
  24803. chap> pour annuler...     L'ex
  24804. cution du rapport a 
  24805.  interrompue. Vos r
  24806. sultats sont incomplets.                            Attention      Configuration mise 
  24807.  jour. Les changements effectu
  24808. s seront op
  24809. rationnels 
  24810.  la prochaine session.   Italique       Gras           Soulign
  24811.        Taille de police         Police              Pi
  24812. ces jointes Align
  24813.  gauche          Align
  24814.  droite          Centr
  24815.                    Justifi
  24816.                  Augmenter la marge  Diminuer la marge   HyperLien      Image               Barre Horizontale   Message au format HTML   Accus
  24817.  de R
  24818. ception                Priorit
  24819.        Couper         Copier         Coller         Le fichier a 
  24820.  avec succ
  24821. s       Liste de points               Liste num
  24822. e               Annuler             Refaire             Nouveau document         Supprimer le formattage       Le courriel a 
  24823.  envoy
  24824. !     Envoie du courriel...  Un instant SVP...Couleur de la police     Couleur de fond          Supprimer fichier en pi
  24825. ce jointe       Fichier HTML qui sera utilis
  24826.  comme corps du message        Rendre le fichier enregistr
  24827.  le corps du message par d
  24828. faut dans les prochaines sessions? Ouvrir le visualiseur par d
  24829. faut        Options PDF                   Polices Incorpor
  24830. 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 
  24831. tre diff
  24832. 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 
  24833. tre converties en PDF. En g
  24834. ral, les polices de code-barre et de symboles. s
  24835. s par une virgule, par exemple "Webdings,Biro"       Configuration mail SMTP incorrecte !    Continuer quand m
  24836. me ?                  Configuration incoh
  24837. rente               D
  24838. faut                        Choisir les destinataires               Champ de recherche            Afficher les pages comme des imagesJoindre le fichier       Tout s
  24839. lectionner        Tout d
  24840. selectionner      Inverser la s
  24841. lection    Aper
  24842. u du Rapport        Bouton fermer            Police par d
  24843. 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
  24844. .              R
  24845. ter les en-t
  24846. tes de page du rapport sur la feuille de calcul R
  24847. ter les pieds de page du rapport sur la feuille de calcul    Extension du fichier de feuille de calculOmettre le num
  24848. ro de page sur la feuille de calcul     Aligner 
  24849.  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        
  24850.         201111281251
  24851.                              
  24852.                     
  24853.                          
  24854.                           
  24855.                  
  24856.                 
  24857.                   
  24858.                       
  24859.                
  24860.                 1 
  24861.                          2 
  24862.                          4 
  24863.                          
  24864.                    
  24865.                     
  24866.                  
  24867.                 
  24868.                       
  24869.                        
  24870.                     
  24871. ...             
  24872. .                    
  24873.                              
  24874. .           
  24875. ...                       
  24876.                               
  24877.                     
  24878. ...       
  24879.  PDF                  
  24880.  HTML                 
  24881.  RTF                  
  24882.  XLS                  
  24883.  TXT / CSV / XL5      
  24884.                         
  24885.  e-mail                    
  24886.                       
  24887.                   
  24888.                  
  24889.      
  24890.                  
  24891.                  
  24892.                                  
  24893.                              
  24894.                    
  24895.                    
  24896.                               
  24897.                           
  24898.                    
  24899.                        
  24900.                    
  24901.                            
  24902.  %FP% 
  24903.  %LP%            C
  24904.  #                         
  24905.           
  24906.        
  24907.        
  24908.       
  24909.              
  24910.                     
  24911.           
  24912.                      
  24913.                 
  24914.       
  24915.            
  24916.           
  24917.              
  24918.            
  24919.       
  24920.      
  24921.        
  24922.       
  24923.                
  24924.           
  24925.      
  24926.            
  24927.          
  24928.      
  24929.           E-mail         
  24930.  E-mail              
  24931.                   
  24932.  e-mail          
  24933.  CDO                      SMTP-
  24934.               
  24935.                
  24936.               
  24937.  SMTP           
  24938.          
  24939.  (SSL)        
  24940.          
  24941.  e-mail                   
  24942.                 
  24943.                  
  24944.                 
  24945.            
  24946.             
  24947.  (16x16 
  24948.                
  24949.                    
  24950.                                
  24951. :                                 
  24952. !                 
  24953.  e-mail                       
  24954.                      
  24955.                  
  24956. !            SMTP-
  24957.                      
  24958.         
  24959.                               
  24960.                                  
  24961.  e-mail                    
  24962.                    
  24963.          
  24964.        
  24965. ...              
  24966.            
  24967.                 
  24968.              
  24969.                   
  24970.  Windows                    
  24971.                         
  24972. ...         
  24973. ...           
  24974. ...       
  24975. .      
  24976. .)   
  24977.  Esc 
  24978. ...               
  24979. .                         
  24980.        
  24981.          
  24982.      
  24983.             
  24984.      
  24985.          
  24986.     HTML-
  24987.        
  24988.               
  24989.       
  24990.        
  24991.      
  24992.        
  24993.                      
  24994.           
  24995.            
  24996.             
  24997.              
  24998.            
  24999.        E-mail 
  25000.           
  25001. ...      
  25002.               
  25003.                 
  25004.                         HTML-
  25005.               
  25006. ?                            
  25007.      
  25008.  PDF                     
  25009.                   
  25010.               
  25011.       
  25012.          
  25013.          
  25014.             
  25015.                  
  25016.            
  25017.  PDF 
  25018. !        
  25019.                 
  25020.                     
  25021.      
  25022.       
  25023.  PDF                     
  25024.  PDF                 
  25025.           
  25026.  PDF. 
  25027.  "Webdings,Biro"                      
  25028.  SMTP!         
  25029. ?                             
  25030.                 
  25031.                   
  25032.                      
  25033.                    
  25034.           
  25035.               
  25036.          
  25037.        
  25038.           
  25039.  PDF 
  25040.  ...            
  25041.  'Excel 97'? (
  25042.  MS Excel 
  25043.  OpenOffice)                                   
  25044.                
  25045.               
  25046.              
  25047.               
  25048.                  
  25049.  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                      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
  25050. n bladzijde                      Twee pagina's                      Vier pagina's                      Afdrukvoorbeeld                    Fout bij het maken van bestand !
  25051. Svp nogmaals proberen..                       Fout                               Geen printer gevonden.
  25052. Svp rapport na her installatie van printer nogmaals afdrukken.              \<Miniaturen                       Kopi
  25053. 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
  25054. 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        
  25055.        20111001936 
  25056.                                
  25057.                              
  25058.                              
  25059.                              
  25060.                            
  25061.                            
  25062.                             
  25063.                           
  25064.                            
  25065.                              
  25066.                              
  25067.                              
  25068.                              
  25069.                                
  25070.                                
  25071.                                
  25072.                            
  25073.                              
  25074.                              
  25075.                              
  25076.                            
  25077. !                                                        
  25078.                                
  25079.                                                               \<
  25080.                              
  25081.                                 
  25082.                           
  25083. ...                      
  25084. PDF                          
  25085. HTML                         
  25086. WORD                         
  25087. XLS                          
  25088. TXT/CSV/XL5                  
  25089.                              
  25090.                                        
  25091.                            
  25092.                            
  25093.                            
  25094.                            
  25095.                          
  25096.                            
  25097.                                
  25098.                                
  25099.                          
  25100.                          
  25101.                                
  25102.                                
  25103.                            
  25104.                              
  25105.                              
  25106.                                
  25107. %FP% 
  25108.  %LP% 
  25109.                   
  25110.                                
  25111.                          
  25112.                        
  25113.                          
  25114.                          
  25115.                      
  25116.                                       
  25117.            
  25118.                      
  25119.                          
  25120.                      
  25121.                  
  25122.                  
  25123.                  
  25124.                       
  25125.                 
  25126.               
  25127.                 
  25128.                              
  25129.                              
  25130.                              
  25131.                              
  25132.                                     
  25133.            
  25134.               
  25135.               
  25136.            
  25137.            
  25138.            
  25139.                       
  25140.                       
  25141.                                   CDO
  25142.                         SMTP
  25143.                
  25144.               
  25145.                 SMPT
  25146.             
  25147.               
  25148. (SSL)                  
  25149.                          
  25150.                            
  25151.                 
  25152.               
  25153.                 
  25154.                 
  25155.                  
  25156. (16x16 pixels)         
  25157.  (32x32 pixels)        
  25158.                 
  25159.                     
  25160.                                      
  25161.                                      
  25162. !                          
  25163.                                  
  25164.                                  
  25165.                                    
  25166.                                      
  25167.                            
  25168.                                          
  25169.                                    
  25170.                                      
  25171.                                  
  25172.                                 
  25173.                       
  25174.                              
  25175. ...                          
  25176.                           
  25177.                       
  25178.                                 
  25179.                    
  25180.                           Windows
  25181.                            
  25182.                           
  25183. ...                
  25184. ...                         
  25185. ...              
  25186. (s)     
  25187. )                                                       
  25188. ...                          
  25189.                                                                         
  25190.            
  25191.                                                             
  25192.            
  25193.            
  25194.          
  25195.                  
  25196.                 
  25197.            
  25198.                    
  25199.                    
  25200.                      
  25201.                      
  25202.               
  25203.               
  25204.            
  25205.                 
  25206.                 HTML
  25207.              
  25208.                            
  25209.            
  25210.            
  25211.            
  25212.             
  25213.                            
  25214.                       
  25215.                       
  25216.                 
  25217.                 
  25218.                    
  25219.                       
  25220.                     
  25221. ...                 
  25222.                  
  25223.                  
  25224.                                 
  25225.                                           
  25226.                                                     
  25227.                           PDF 
  25228.                       
  25229.                            
  25230.                       
  25231.                       
  25232.                       
  25233.                        
  25234.                       
  25235.                     
  25236.                       
  25237. !                                         
  25238.                       
  25239.                       
  25240.                       
  25241.                       
  25242.                         PDF 
  25243.                       
  25244.                                           
  25245. "Webdings,Biro"                                                                                                
  25246. !                     
  25247.                                   
  25248.                               
  25249.                           
  25250.                               
  25251.                       
  25252.                        
  25253.                  
  25254.                      
  25255.                  
  25256.                  
  25257.                  
  25258.                  PDF
  25259.               
  25260. ...                
  25261. 'Excel 97'
  25262. MS Excel
  25263. OpenOffice)                                                                         
  25264.                                            
  25265.                                            
  25266.                          
  25267.                                    
  25268.                                       
  25269. MHTML                        
  25270. Excel
  25271. !                                                                                                              
  25272.                                      
  25273.                           BULGARIAN      
  25274.       201111281251
  25275.                               
  25276.                      
  25277.                   
  25278.                   
  25279.                   
  25280.                            
  25281.                              
  25282.                               
  25283.                             
  25284.                 1 
  25285.                          2 
  25286.                          4 
  25287.                          
  25288.                       
  25289.                          
  25290.             
  25291.                   
  25292.                       
  25293.                        
  25294.                     
  25295. ...                         
  25296. .                          
  25297.                              
  25298. .            
  25299. ..                        
  25300.                               
  25301.                              
  25302. ...            
  25303.  PDF                    
  25304.  HTML                   
  25305.  RTF                    
  25306.  XLS                    
  25307.  TXT / CSV / XL5        
  25308.                   
  25309.  e-mail                  
  25310.                   
  25311.                    
  25312.                    
  25313.                         
  25314.                   
  25315.                   OK                                 
  25316.                               
  25317.                  
  25318.                  
  25319.                                
  25320.                           
  25321.                    
  25322.                     
  25323.                     
  25324.                            
  25325.  %FP% 
  25326.  %LP%           
  25327.                          
  25328.       
  25329.              
  25330.                      
  25331.            
  25332.                      
  25333.                 
  25334.        
  25335.        
  25336.          
  25337.               
  25338.             
  25339.             
  25340.                  
  25341.                  
  25342.                 
  25343.                 
  25344.            
  25345.        
  25346.          
  25347.         
  25348.      
  25349.           Email          
  25350.  Email             
  25351.             
  25352.  Email            
  25353.  CDO                   SMTP - 
  25354.             
  25355.           
  25356.               SMTP 
  25357.            
  25358.              
  25359.  (SSL)             
  25360.             
  25361.  Email                      
  25362.              
  25363.                   
  25364.                
  25365.              
  25366.      
  25367.  (16x16 
  25368. )    
  25369.  (32x32 
  25370.               
  25371.                
  25372.                                   
  25373.                              
  25374.                 
  25375.  eMail                
  25376.                  
  25377.                    
  25378.             SMTP-
  25379.                      
  25380.          
  25381.                           
  25382.                             
  25383.  eMail                   
  25384.          
  25385.          
  25386. ...                     
  25387.           
  25388.             
  25389.                
  25390.                
  25391.  Windwows       
  25392.                          
  25393. ...         
  25394. ...  
  25395. ...    
  25396. .      
  25397. )       
  25398.  ESC 
  25399. ...          
  25400. .                                                 
  25401.        
  25402. .        
  25403.          
  25404.        
  25405.       
  25406.          
  25407.                
  25408.      
  25409.            
  25410.           
  25411.                
  25412.      
  25413.      
  25414.       
  25415.       
  25416.             
  25417.   HTML-
  25418.        
  25419.       
  25420.          
  25421.         
  25422.         
  25423.                
  25424.                
  25425.               
  25426.               
  25427.                
  25428.              
  25429.          eMail-
  25430. !           
  25431. ...          
  25432.            
  25433.              
  25434.             
  25435.  HTML 
  25436.  eMail-
  25437. .                  
  25438.  eMail 
  25439. ?          
  25440.             PDF 
  25441.                  
  25442.                    
  25443.              
  25444.         
  25445.         
  25446.                  
  25447.            
  25448.               
  25449.          
  25450. .             
  25451.                   
  25452.               
  25453.               
  25454.  PDF                  
  25455.  PDF               
  25456.         
  25457.  PDF. 
  25458. . "Webdings,Biro"                      
  25459.  SMTP!         
  25460. ?                          
  25461.                        
  25462.                
  25463.                        
  25464.                   
  25465.              
  25466.           
  25467.        
  25468.             
  25469.      
  25470.        PDF 
  25471. ...        
  25472.  'Excel 97' format? (
  25473.  MS Excel 
  25474.  OpenOffice)                               
  25475.                      
  25476.  footer-
  25477.                        
  25478.                       
  25479.             
  25480.            
  25481.  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       
  25482.        20120211950 
  25483. L                               
  25484.                              
  25485.                              
  25486.                              
  25487.                            
  25488.                            
  25489.                            
  25490.                            
  25491.                            
  25492.                              
  25493.                              
  25494.                              
  25495.                              
  25496.                                
  25497.                                
  25498. e                               
  25499.                            
  25500.                              
  25501.                              
  25502.                              
  25503.                            
  25504. !                                                        
  25505. ~                               
  25506. I                                                              \<
  25507.                              
  25508.                                
  25509.                            
  25510. ...                      
  25511. PDF                          
  25512. HTML                         
  25513. WORD                         
  25514. XLS                          
  25515. TXT/CSV/XL5                  
  25516.                              
  25517.                                        
  25518.                            
  25519.                            
  25520.                            
  25521.                            
  25522.                          
  25523.                            
  25524. w                               
  25525.                                
  25526.                          
  25527. L                         
  25528. W                               
  25529.                                
  25530. m                           
  25531.                              
  25532.                              
  25533.                                
  25534. q%FP%?
  25535. ?%LP%?
  25536.                   
  25537. X                               
  25538. m                         
  25539. m                       
  25540. m                         
  25541. m                         
  25542. m                     
  25543. m                                      
  25544. W           
  25545.                      
  25546.                          
  25547.                      
  25548.                  
  25549.                  
  25550.                  
  25551.                       
  25552.                 
  25553.               
  25554. }                
  25555.                              
  25556.                              
  25557.                              
  25558.                              
  25559. m                                  
  25560. `           
  25561.               
  25562.               
  25563.            
  25564. X           
  25565.            
  25566.                       
  25567.                       
  25568.                                   CDO
  25569. m                        SMTP
  25570.                
  25571. W              
  25572. X                SMPT
  25573.               
  25574. H              
  25575. (SSL)                  
  25576. {                         
  25577.                            
  25578. D                
  25579. H              
  25580. e                
  25581. e                
  25582. o                 
  25583. p(16x16 pixels)         
  25584. j(32x32 pixels)         
  25585.                 
  25586.                     
  25587. h                                     
  25588. e                                     
  25589. !                          
  25590. ~                                 
  25591. q                                 
  25592. e                                   
  25593. w                                     
  25594.                            
  25595.                                          
  25596.                                    
  25597.                                      
  25598. m                                 
  25599.                                 
  25600.                       
  25601.                              
  25602. ...                          
  25603.                           
  25604. m                      
  25605.                                 
  25606.                    
  25607. {                          Windows
  25608.                            
  25609. R                          
  25610. ...                
  25611. {...                         
  25612. X...              
  25613. (s)     
  25614. C)                                                       
  25615. ...                          
  25616. C                                                                        
  25617. N           
  25618. C                                                            
  25619.            
  25620.            
  25621. u         
  25622. p                 
  25623.                 
  25624.            
  25625.                    
  25626.                    
  25627.                      
  25628. R                     
  25629.               
  25630.               
  25631.            
  25632.                 
  25633.                 HTML
  25634.              
  25635.                            
  25636.            
  25637.            
  25638. s           
  25639. K           
  25640.                             
  25641.                       
  25642.                       
  25643. P                
  25644.                 
  25645.                    
  25646.                       
  25647. e                    
  25648. ...                 
  25649.                  
  25650.                  
  25651.                                 
  25652. e                                          
  25653. H                                                    
  25654.                           PDF
  25655.                        
  25656.                            
  25657. L                      
  25658.                       
  25659. s                      
  25660. e                       
  25661. K                      
  25662. X                    
  25663. X                      
  25664. !                                         
  25665.                       
  25666.                       
  25667.                       
  25668.                       
  25669. H                        PDF
  25670. D                       
  25671.                                           
  25672. "Webdings,Biro"                                                                                                
  25673. m!                     
  25674. H                                  
  25675. P                              
  25676. {                          
  25677.                               
  25678.                       
  25679.                          
  25680.                  
  25681.                      
  25682.                  
  25683.                  
  25684.                  
  25685. s                 PDF
  25686.               
  25687. ...                
  25688. 'Excel 97'
  25689. MS Excel
  25690. OpenOffice)                                                                         
  25691.                                            
  25692.                                            
  25693. W                         
  25694.                                    
  25695.                                       
  25696. MHTML                        
  25697. Excel
  25698. !                                                                                                              
  25699.                                      
  25700.                          BM6
  25701. ~~~~~~
  25702. kkmkjkjhh|zx{zx{zx{zx
  25703. a`_ca`b`_b`_b`_b`_
  25704. {yw}{y}{y}{y}{y}{y}{y}{y@@
  25705. vtsywvywwyxwyxwyxwyxwyxwyxwyxw@ 
  25706. gednlkpnmpnmpnmpnmpnmpnmpnmpnmpnmpnmpnm
  25707. ~}ywv
  25708. }|yvu
  25709. jhhnlnTVWSTTSSTSSTSSTSSTSSTSSTSSTSSTSSTSSTSTTTVWnlnjhh
  25710. ~~~||||||~
  25711. ||||||~~~
  25712. PROPERTY
  25713. CVALUE
  25714. NVALUE
  25715. LVALUE
  25716. _NullFlags
  25717.  cLanguage                ENGLISH                                                                                                                                                                                                                                                       
  25718.  lSaveToFile                                                                                                                                                                                                                                                                            
  25719.  lSendToEmail                                                                                                                                                                                                                                                                           
  25720.  lPrintVisible                                                                                                                                                                                                                                                                          
  25721.  lShowCopies                                                                                                                                                                                                                                                                            
  25722.  lShowMiniatures                                                                                                                                                                                                                                                                        
  25723.  lPrinterPref                                                                                                                                                                                                                                                                           
  25724.  lSaveAsImage                                                                                                                                                                                                                                                                           
  25725.  lSaveAsHTML                                                                                                                                                                                                                                                                            
  25726.  lSaveAsRTF                                                                                                                                                                                                                                                                             
  25727.  lSaveAsXLS                                                                                                                                                                                                                                                                             
  25728.  lSaveAsPDF                                                                                                                                                                                                                                                                             
  25729.  lQuietMode                                                                                                                                                                                                                                                                             
  25730.  nCanvasCount                                                                                                                                                                                                                                                                           
  25731.  nZoomLevel                                                                                                                                                                                                                                                                             
  25732.  nWindowState                                                                                                                                                                                                                                                                           
  25733.  nDockType                                                                                                                                                                                                                                                                              
  25734.  nMaxMiniatureDisplay                                                                                                                                                                                                                                                                   @
  25735.  nPDFPageMode                                                                                                                                                                                                                                                                           
  25736.  nShowToolBar                                                                                                                                                                                                                                                                           
  25737.  lEmailAuto                                                                                                                                                                                                                                                                             
  25738.  cEmailType               PDF                                                                                                                                                                                                                                                           
  25739.  lShowPrinters                                                                                                                                                                                                                                                                          
  25740.  lShowSetup                                                                                                                                                                                                                                                                             
  25741.  nEmailMode                                                                                                                                                                                                                                                                             
  25742.  cSMTPUserName                                                                                                                                                                                                                                                                          
  25743.  cSMTPPassword                                                                                                                                                                                                                                                                          
  25744.  nSMTPPort                                                                                                                                                                                                                                                                              
  25745.  cSMTPServer                                                                                                                                                                                                                                                                            
  25746.  lSMTPUseSSL                                                                                                                                                                                                                                                                            
  25747.  cEmailTo                                                                                                                                                                                                                                                                               
  25748.  cEmailSubject                                                                                                                                                                                                                                                                          
  25749.  cEmailBody                                                                                                                                                                                                                                                                             
  25750.  cEmailFrom                                                                                                                                                                                                                                                                             
  25751.  nButtonSize                                                                                                                                                                                                                                                                            
  25752.  lSaveAsTXT                                                                                                                                                                                                                                                                             
  25753.  cOutputPath                                                                                                                                                                                                                                                                            
  25754.  lShowSearch                                                                                                                                                                                                                                                                            
  25755.  nPrinterPropType                                                                                                                                                                                                                                                                       
  25756.  lDirectPrint                                                                                                                                                                                                                                                                           
  25757.  nSearchPages                                                                                                                                                                                                                                                                           
  25758.  nThermType                                                                                                                                                                                                                                                                             
  25759.  cEmailBodyFile                                                                                                                                                                                                                                                                         
  25760.  lPDFEmbedFonts                                                                                                                                                                                                                                                                         
  25761.  lPDFCanPrint                                                                                                                                                                                                                                                                           
  25762.  lPDFCanEdit                                                                                                                                                                                                                                                                            
  25763.  lPDFCanCopy                                                                                                                                                                                                                                                                            
  25764.  lPDFCanAddNotes                                                                                                                                                                                                                                                                        
  25765.  lPDFEncryptDocument                                                                                                                                                                                                                                                                    
  25766.  cPDFMasterPassword                                                                                                                                                                                                                                                                     
  25767.  cPDFUserPassword                                                                                                                                                                                                                                                                       
  25768.  lOpenViewer                                                                                                                                                                                                                                                                            
  25769.  cPdfAuthor                                                                                                                                                                                                                                                                             
  25770.  cPdfTitle                                                                                                                                                                                                                                                                              
  25771.  cPdfSubject                                                                                                                                                                                                                                                                            
  25772.  cPdfKeywords                                                                                                                                                                                                                                                                           
  25773.  cPdfCreator                                                                                                                                                                                                                                                                            
  25774.  lPDFShowErrors                                                                                                                                                                                                                                                                         
  25775.  cPDFSymbolFontsList                                                                                                                                                                                                                                                                    
  25776.  cSuccessor                                                                                                                                                                                                                                                                             
  25777.  lPdfAsImage                                                                                                                                                                                                                                                                            
  25778.  cAdressTable                                                                                                                                                                                                                                                                           
  25779.  cAdressSearch                                                                                                                                                                                                                                                                          
  25780.  lShowClose                                                                                                                                                                                                                                                                             
  25781.  cPDFDefaultFont          Helvetica                                                                                                                                                                                                                                                     
  25782.  cExcelDefaultExtension   XLS                                                                                                                                                                                                                                                           
  25783.  lExcelConvertToXLS                                                                                                                                                                                                                                                                     
  25784.  lExcelRepeatHeaders                                                                                                                                                                                                                                                                    
  25785.  lExcelRepeatFooters                                                                                                                                                                                                                                                                    
  25786.  lExcelHidePageNo                                                                                                                                                                                                                                                                       
  25787.  lExcelAlignLeft                                                                                                                                                                                                                                                                        
  25788.  lSaveAsMHT                                                                                                                                                                                                                                                                             
  25789.  lPDFReplaceFonts                                                                                                                                                                                                                                                                       
  25790.  cEmailPRG                                                                                                                                                                                                                                                                              
  25791. PLATFORM
  25792. UNIQUEID
  25793. TIMESTAMP
  25794. CLASS
  25795. CLASSLOC
  25796. BASECLASS
  25797. OBJNAME
  25798. PARENT
  25799. PROPERTIES
  25800. PROTECTED
  25801. METHODS
  25802. OBJCODE
  25803. RESERVED1
  25804. RESERVED2
  25805. RESERVED3
  25806. RESERVED4
  25807. RESERVED5
  25808. RESERVED6
  25809. RESERVED7
  25810. RESERVED8
  25811.  COMMENT Screen              
  25812.  WINDOWS _2Z911D86M1022004034
  25813.  WINDOWS _2Z911D86N1080754507
  25814.  WINDOWS _2Z911D86O1080754507
  25815.  WINDOWS _2Z911D86P1080690114d
  25816.  WINDOWS _2Z911D86Q1042694858s
  25817.  WINDOWS _2Z911D86M1065027017Q
  25818.  WINDOWS _2Z911D86N1042694858%
  25819.  WINDOWS _2Z911D86M1065027017
  25820.  WINDOWS _2Z911D86N1048408615
  25821.  WINDOWS _2Z911D86M1065027017
  25822.  WINDOWS _2Z911D86N1042694858
  25823.  WINDOWS _2Z911D86M1065027017
  25824.  WINDOWS _2Z911D86N1042694858
  25825.  WINDOWS _2ZF013V231077036022
  25826.  WINDOWS _2ZF013V241042694858
  25827.  WINDOWS _31G005RBV1042694858h
  25828.  WINDOWS _31G005RBW1077037059T
  25829.  WINDOWS _31G005RBX1042694858
  25830.  WINDOWS _2Z911D86U1064960002
  25831.  WINDOWS _2Z911D86V1064960002
  25832.  WINDOWS _2Z911D86M1064960002
  25833.  WINDOWS _2Z911D86X1064960002
  25834.  WINDOWS _2Z911D86M1064960002
  25835.  WINDOWS _2Z911D86Z1065027017
  25836.  WINDOWS _2Z911D86M1064960002
  25837.  WINDOWS _2Z911D86N1064960002
  25838.  WINDOWS _30K0LFEHW1064960002
  25839.  WINDOWS _2Z911D86O1065027017
  25840.  WINDOWS _33S01D4M61064960002^
  25841.  WINDOWS _3DB0002G31064960002b
  25842.  WINDOWS _2Z911D86M1042694858Y
  25843.  WINDOWS _2Z911D86N1042694858b
  25844.  WINDOWS _2Z911D86O1042694858X
  25845.  WINDOWS _2Z911D86P1042694858]
  25846.  WINDOWS _2Z911D86Q1042694858l
  25847.  WINDOWS _2Z911D86M1042694858y
  25848.  WINDOWS _2Z911D86N1042694858}
  25849.  WINDOWS _2Z911D86M1076905386
  25850.  WINDOWS _2ZO1BW1D91042694858
  25851.  WINDOWS _2Z911D86M1042694858
  25852.  WINDOWS _2Z911D86N1076905386
  25853.  WINDOWS _31C1D0K7W1077050810j
  25854.  WINDOWS _31C1D0K7X1062583425
  25855.  WINDOWS _31I0RW5JO1077050787
  25856.  WINDOWS _31I0RW5JP1077050810
  25857.  WINDOWS _33Z1CPWON1062583425
  25858.  WINDOWS _2Z911D86M1042694858
  25859.  WINDOWS _2Z911D86M1042694858
  25860.  WINDOWS _2Z911D86M1042694858w
  25861.  WINDOWS _2Z911D8781042694858U
  25862.  WINDOWS _2Z911D86N1062583425D
  25863.  WINDOWS _2Z911D86N1062583425
  25864.  WINDOWS _2Z911D86N1062583425
  25865.  WINDOWS _2Z911D86M1042694858~
  25866.  WINDOWS _2Z911D86N1042694858]
  25867.  WINDOWS _2Z911D86M1042694858
  25868.  WINDOWS _2Z911D86M1065027017
  25869.  WINDOWS _2Z911D86N1042694858_
  25870.  WINDOWS _2ZJ1C5GMI1042694858@
  25871.  WINDOWS _2ZJ1C5GMJ1062583425
  25872.  WINDOWS _2ZJ1C5GMK1065027017
  25873.  WINDOWS _2ZJ1C5GML1042694858z
  25874.  WINDOWS _2ZJ1E3CRI1042694858j
  25875.  WINDOWS _33D04NIU41042694858w
  25876.  WINDOWS _33D04NIU51062583425U
  25877.  WINDOWS _33D04NIU61065027017 
  25878.  WINDOWS _2Z911D86M1076905520
  25879.  WINDOWS _33S01D4MP1076905520
  25880.  WINDOWS _2Z911D86M1076905386
  25881.  WINDOWS _2Z911D86N1076905520
  25882.  WINDOWS _2Z911D86M1076905386
  25883.  WINDOWS _33S0QG5I81076905386'
  25884.  WINDOWS _33S0QG5I91076905386
  25885.  WINDOWS _33S0QG5IA1076905386
  25886.  WINDOWS _33S0QG5IB1076905386
  25887.  WINDOWS _33S0QG5IC1076905386
  25888.  WINDOWS _33S0QG5ID1076905386
  25889.  WINDOWS _33S0QG5IE1076905386w
  25890.  WINDOWS _33S0QG5IF1076905386+
  25891.  WINDOWS _2Z911D86M1076905520
  25892.  WINDOWS _2Z911D86N1076905386
  25893.  WINDOWS _2Z911D86M1076905520
  25894.  WINDOWS _2Z911D86N1076905386?
  25895.  WINDOWS _33Z1CPWOZ1077036022z
  25896.  WINDOWS _33Z1CPWP01076905386~
  25897.  WINDOWS _35N1AHVAG1076905520
  25898.  WINDOWS _3711E67NR1076905386
  25899.  WINDOWS _3711E67NS1076905520s
  25900.  WINDOWS _2Z911D86M1076905642
  25901.  WINDOWS _2Z911D86N1064960002f
  25902.  WINDOWS _2Z911D86M1062602843m
  25903.  WINDOWS _3CB1DSTEH1062583425R
  25904.  WINDOWS _2Z911D86M1022004034&
  25905.  WINDOWS _2Z911D86M1022004034&
  25906.  WINDOWS _3DC01NICH1065027017(
  25907.  WINDOWS _2Z911D86M1065027017
  25908.  WINDOWS _2Z911D86M1065027017s
  25909.  WINDOWS _2Z911D86M1063148833w
  25910.  WINDOWS _3CC00L4NW1065027017
  25911.  WINDOWS _2Z911D86M1063148833
  25912.  WINDOWS _3CC012S7Z1065027017
  25913.  WINDOWS _2Z911D86M1063148833
  25914.  WINDOWS _2Z911D86M1063148833!
  25915.  WINDOWS _3CK04Q1DQ1063148833n
  25916.  WINDOWS _2Z911D86M1065027017
  25917.  WINDOWS _2ZD1D1IP71065027017
  25918.  WINDOWS _2Z911D86M1062583425
  25919.  WINDOWS _32E04QKDC1065027017
  25920.  COMMENT RESERVED            
  25921. VERSION =   3.00
  25922. dataenvironment
  25923. dataenvironment
  25924. Dataenvironment
  25925. YTop = 0
  25926. Left = 0
  25927. Width = 0
  25928. Height = 0
  25929. DataSource = .NULL.
  25930. Name = "Dataenvironment"
  25931. frmSettings
  25932. DataSession = 2
  25933. BorderStyle = 2
  25934. Height = 470
  25935. Width = 455
  25936. Desktop = .T.
  25937. ShowWindow = 1
  25938. DoCreate = .T.
  25939. ShowTips = .T.
  25940. AutoCenter = .T.
  25941. Caption = "Report preview general configurations"
  25942. Closable = .F.
  25943. MaxButton = .F.
  25944. MinButton = .F.
  25945. WindowType = 1
  25946. AlwaysOnTop = .T.
  25947. AllowOutput = .F.
  25948. _memberdata = 
  25949.      387<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"/></VFPData>
  25950. inpreview = .T.
  25951. Name = "frmSettings"
  25952. XPPROCEDURE updatecontrol
  25953. LPARAMETERS toObject as CheckBox, tcProperty, tnAdjust
  25954. LOCAL lcProp, lcType, luValue
  25955. LOCATE FOR UPPER(FP_Settings.Property) = UPPER(tcProperty)
  25956. IF EOF()
  25957.     WAIT WINDOW "Could not locate the property '" + tcProperty + "' in the configuration file." + ;
  25958.         CHR(13) + "The settings file will be updated." NOWAIT 
  25959.     * Workaround to resize the settings table to have the Property field with C(22)
  25960.     IF LEN(FP_Settings.Property) < 25
  25961.         TRY 
  25962.             WAIT WINDOW "Updating settings table" NOWAIT 
  25963.             LOCAL lcFile0
  25964.             lcFile0 = (DBF("fp_Settings"))
  25965.             USE IN SELECT("FP_Settings")  && Close the file
  25966.             USE (lcFile0) IN 0 ALIAS fp_settings EXCLUSIVE
  25967.             ALTER TABLE FP_Settings ALTER COLUMN Property c(25)
  25968.             USE IN SELECT("FP_Settings")
  25969.             USE (lcFile0) IN 0 AGAIN ALIAS fp_settings
  25970.         CATCH 
  25971.         ENDTRY
  25972.         IF NOT USED("FP_SETTINGS")
  25973.             LOCAL lcUserFile
  25974.             lcUserFile = IIF(EMPTY(_goHelper._SettingsFile), ;
  25975.                 "FoxyPreviewer_Settings.dbf", ;
  25976.                 _goHelper._SettingsFile)
  25977.             USE (lcUserFile) IN 0 AGAIN SHARED ALIAS FP_Settings
  25978.         ENDIF
  25979.         WAIT CLEAR
  25980.     ENDIF
  25981.     APPEND BLANK 
  25982.     REPLACE FP_Settings.Property WITH tcProperty IN FP_Settings
  25983.     lcType  = UPPER(LEFT(tcProperty, 1))
  25984.     luValue = EVALUATE("_goHelper." + tcProperty)
  25985.     REPLACE (lcType + "Value") WITH luValue IN FP_Settings
  25986. ENDIF 
  25987. lcProp = FP_Settings.Property
  25988. lcType = UPPER(LEFT(lcProp, 1))
  25989. luValue = EVALUATE("FP_Settings." + lcType + "Value")
  25990. IF NOT PEMSTATUS(toObject, "nAdjust", 5)
  25991.     toObject.AddProperty("nAdjust"   , 0)
  25992.     toObject.AddProperty("cProperty" , lcProp)
  25993.     toObject.AddProperty("nRec"      , RECNO())
  25994. ENDIF
  25995. IF EMPTY(tnAdjust)
  25996.     toObject.Value = luValue
  25997. ELSE 
  25998.     toObject.nAdjust = tnAdjust
  25999.     toObject.Value = luValue + tnAdjust
  26000. ENDIF
  26001. IF _VFP.StartMode = 0 && Development
  26002.     toObject.ToolTipText = "Related property: '" + tcProperty + "'"
  26003. ENDIF 
  26004. ENDPROC
  26005. PROCEDURE updatetable
  26006. LOCAL lnPg, loControl as ComboBox
  26007. LOCAL lcProp, lcType, luValue
  26008. FOR lnPg = 1 TO Thisform.PF.PageCount
  26009.     FOR EACH loControl IN Thisform.PF.Pages(lnPg).Controls
  26010.         * Locate our controls
  26011.         IF PEMSTATUS(loControl, "nAdjust", 5)
  26012.             * MESSAGEBOX(loControl.cProperty + CHR(13) + loControl.Name)
  26013.             lcProp = loControl.cProperty
  26014.             lcType = UPPER(LEFT(lcProp, 1))
  26015.             IF lcType = "C" AND PEMSTATUS(loControl, "cValue", 5)
  26016.                 luValue = loControl.cValue
  26017.             ELSE
  26018.                 luValue = loControl.Value
  26019.             ENDIF
  26020.             DO CASE
  26021.                 CASE lcType = "L"
  26022.                     UPDATE FP_Settings ;
  26023.                         SET lValue = luValue ;
  26024.                         WHERE Property = lcProp
  26025.                 CASE lcType = "C"
  26026.                     UPDATE FP_Settings ;
  26027.                         SET cValue = luValue ;
  26028.                         WHERE Property = lcProp
  26029.                 CASE lcType = "N"
  26030.                     UPDATE FP_Settings ;
  26031.                         SET nValue = luValue - loControl.nAdjust;
  26032.                         WHERE Property = lcProp
  26033.                 OTHERWISE
  26034.                     MESSAGEBOX("Missing: " + loControl.cProperty + CHR(13) + loControl.Name)
  26035.             ENDCASE
  26036.         ENDIF
  26037.     ENDFOR
  26038. ENDFOR
  26039. * Update the Encryption container
  26040. * Update separately the cLanguage property
  26041. IF VARTYPE(This.PF.PageGeneral) = "O"
  26042.     LOCAL lcLang
  26043.     lcLang = ALLTRIM(GETWORDNUM(Thisform.PF.PageGeneral.CmbLanguage.Value, 1, "/"))
  26044.     UPDATE FP_Settings ;
  26045.         SET cValue = lcLang;
  26046.         WHERE Property = "cLanguage"
  26047. ENDIF
  26048. * Update separately the cSMTPPassword property - by Nick Porfyris [20101014]
  26049. IF VARTYPE(This.PF.PageEmail) = "O"
  26050.     LOCAL lcPass
  26051.     lcPass = _goHelper.DoEncrypt(ALLTRIM(Thisform.PF.PageEmail.txtPassword.VALUE)) && Encrypt it!...
  26052.     UPDATE FP_Settings ;
  26053.         SET cValue = lcPass;
  26054.         WHERE Property = "cSMTPPassword"
  26055. ENDIF
  26056. FLUSH IN FP_Settings FORCE
  26057. RETURN
  26058. ENDPROC
  26059. PROCEDURE validate
  26060. IF VARTYPE(This.PF.PageEmail) = "O"
  26061. WITH This.PF.PageEmail 
  26062.     IF INLIST(.CmbEmailType.Value, 2, 3) AND ; && "CDO"
  26063.             (EMPTY(.TxtSMTP.Value) OR ;
  26064.             EMPTY(.TxtLogin.Value) OR ;
  26065.             EMPTY(.TxtPassword.Value) OR ;
  26066.             EMPTY(.TxtPort.Value) OR ;
  26067.             EMPTY(.TxtFrom.Value))
  26068. *!*            IF MESSAGEBOX("Invalid SMTP email configuration!" + CHR(13) + ;
  26069. *!*                "Continue anyway?", 1 + 32, "Setup inconsistency") = 2 && 1=Ok 2=Cancel
  26070. *!*                RETURN .F.
  26071. *!*            ENDIF 
  26072.         IF MESSAGEBOX(_goHelper.GetLoc("BADSMTP") + CHR(13) + ;
  26073.             _goHelper.GetLoc("CONTINUE"), 1 + 32, _goHelper.GetLoc("BADSETUP")) = 2 && 1=Ok 2=Cancel
  26074.             RETURN .F.
  26075.         ENDIF 
  26076.     ENDIF 
  26077. ENDWITH 
  26078. ENDIF 
  26079. IF VARTYPE(This.PF.PagePDF) = "O"
  26080. IF (This.PF.PagePDF.ChkEncrypt.Value = .T.) AND ;
  26081.     (This.PF.PagePDF.TxtMasterPwd.Value = This.PF.PagePDF.TxtUserPwd.Value)
  26082.     IF MESSAGEBOX(_goHelper.GetLoc("MASTANDUSR") + CHR(13) + ;
  26083.         _goHelper.GetLoc("CONTINUE"), 1 + 32, _goHelper.GetLoc("BADSETUP")) = 2 && 1=Ok 2=Cancel
  26084.         RETURN .F.
  26085.     ENDIF 
  26086. ENDIF
  26087. ENDIF 
  26088. IF VARTYPE(This.PF.PageGeneral) = "O"
  26089. LOCAL lnIndex
  26090. lnIndex = Thisform.PF.PageGeneral.CmbLanguage.ListIndex
  26091.     _goHelper.cLanguage = _goHelper._aLanguages(lnIndex)
  26092. CATCH
  26093. ENDTRY
  26094. ENDIF
  26095. RETURN .T.
  26096. ENDPROC
  26097. PROCEDURE setlanguage
  26098. LOCAL loExc as Exception
  26099.     WITH This
  26100.         LOCAL lcVersionText, lcPreviewVersion
  26101.         TRY
  26102.             lcVersionText = GetVfpVersion()
  26103.         CATCH
  26104.             lcVersionText = ""
  26105.         ENDTRY
  26106.         lcPreviewVersion = _goHelper._PreviewVersion
  26107.         .lblVersion.Caption = ALLTRIM(TRANSFORM(_goHelper.cVersion)) + CHR(13) + "(" + VERSION(4) + ") " + lcVersionText + "   PV " + lcPreviewVersion
  26108.         .CmdOk.Caption      = _goHelper.GetLoc("GOTOPG_OK")
  26109.         .CmdCancel.Caption  = _goHelper.GetLoc("CANCEL")
  26110.         .Caption            = _goHelper.GetLoc("SETUPTITLE")
  26111.     ENDWITH
  26112.     IF VARTYPE(This.PF.PageGeneral) = "O"
  26113.         WITH This.PF.PageGeneral
  26114.             .Caption                      = _goHelper.GetLoc("GENERAL")
  26115.             .lblZoom.Caption              = _goHelper.GetLoc("ZOOMLEVEL")
  26116.             .LblCanvasCnt.Caption         = _goHelper.GetLoc("CANVASCNT")
  26117.             .lblDockPosition.Caption      = _goHelper.GetLoc("DOCKPOSITI")
  26118.             .lblLanguage.Caption          = _goHelper.GetLoc("CUSLANGUAG")
  26119.             .lblToolbarvisibility.Caption = _goHelper.GetLoc("TBARVISIBL")
  26120.             .lblWndState.Caption          = _goHelper.GetLoc("WNDSTATE")
  26121.             .lblProgress.Caption          = _goHelper.GetLoc("PROGRESS")
  26122.             .chkQuiet.Caption             = _goHelper.GetLoc("QUIETMODE")
  26123.         ENDWITH
  26124.         WITH This.PF.PageGeneral.CmbProgress as ComboBox
  26125.             .ListItem(1) = _goHelper.GetLoc("DEFAULT")
  26126.             .ListItem(2) = _goHelper.GetLoc("WINPGBAR")
  26127.         ENDWITH
  26128.         WITH This.PF.PageGeneral.CmbTbrVisibility as ComboBox
  26129.             .ListItem(1) = _goHelper.GetLoc("VISIBLE")
  26130.             .ListItem(2) = _goHelper.GetLoc("INVISIBLE")
  26131.             .ListItem(3) = _goHelper.GetLoc("USERESOURC")
  26132.         ENDWITH
  26133.         WITH This.PF.PageGeneral.CmbDock as ComboBox
  26134.             .ListItem(1) = _goHelper.GetLoc("UNDOCKED")
  26135.             .ListItem(2) = _goHelper.GetLoc("TBONTOP")
  26136.             .ListItem(3) = _goHelper.GetLoc("TBONLEFT")
  26137.             .ListItem(4) = _goHelper.GetLoc("TBONRIGHT")
  26138.             .ListItem(5) = _goHelper.GetLoc("TBONBOTTOM")
  26139.             .ListItem(6) = _goHelper.GetLoc("USERESOURC")
  26140.         ENDWITH
  26141.         WITH This.PF.PageGeneral.CmbWndState as ComboBox
  26142.             .ListItem(1) = _goHelper.GetLoc("NORMAL")
  26143.             .ListItem(2) = _goHelper.GetLoc("MINIMIZED")
  26144.             .ListItem(3) = _goHelper.GetLoc("MAXIMIZED")
  26145.         ENDWITH
  26146.         WITH This.PF.PageGeneral.CmbCanvasCnt AS ComboBox
  26147.             .ListItem(1) = _goHelper.GetLoc("ONEPGMENU")
  26148.             .ListItem(2) = _goHelper.GetLoc("TWOPGMENU")
  26149.             .ListItem(3) = _goHelper.GetLoc("FOURPGMENU")
  26150.         ENDWITH
  26151.         WITH This.PF.PageGeneral.CmbZoom as ComboBox
  26152.             .ListItem(10) = _goHelper.GetLoc("CBOZOOMWHO")
  26153.             .ListItem(11) = _goHelper.GetLoc("CBOZOOMPGW")
  26154.         ENDWITH
  26155.     ENDIF
  26156.     IF VARTYPE(This.PF.PageControls) = "O"
  26157.         WITH This.PF.PageControls
  26158.             .Caption = _goHelper.GetLoc("CONTROLS")
  26159.             .lblBtnSize.Caption       = _goHelper.GetLoc("BUTTONSIZE")
  26160.             .CmbBtnSize.ListItem(1)   = _goHelper.GetLoc("SMALL")
  26161.             .CmbBtnSize.ListItem(2)   = _goHelper.GetLoc("BIG")
  26162.             .CmbPrPrefType.ListItem(1)= _goHelper.GetLoc("PRGENERAL")
  26163.             .CmbPrPrefType.ListItem(2)= _goHelper.GetLoc("PRCONFIG")
  26164.             .ChkAvailPrinters.Caption = _goHelper.GetLoc("AVAILABLEP")
  26165.             .ChkCopies.Caption        = _goHelper.GetLoc("COPIES")
  26166.             .ChkMiniatures.Caption    = _goHelper.GetLoc("MENUPROOF")
  26167.             .lblMiniatures.Caption    = _goHelper.GetLoc("MINIPERPG")
  26168.             .ChkPrintPref.Caption     = _goHelper.GetLoc("PRINTINGPR")
  26169.             .ChkSaveToFile.Caption    = _goHelper.GetLoc("SAVEREPORT")
  26170.             .ChkSendEmail.Caption     = _goHelper.GetLoc("SENDTOEMAI")
  26171.             .ChkSettings.Caption      = _goHelper.GetLoc("Setup")
  26172.             .ChkSearch.Caption        = _goHelper.GetLoc("FIND")
  26173.             .lblSearchPages.Caption   = _goHelper.GetLoc("MAXSEARCH")
  26174.         ENDWITH
  26175.     ENDIF
  26176.     IF VARTYPE(This.PF.PageOutput) = "O"
  26177.         WITH This.PF.PageOutput
  26178.             .Caption = _goHelper.GetLoc("OUTPUT")
  26179.             .ChkSaveHTML.Caption = _goHelper.GetLoc("SAVEASHTML")
  26180.             .ChkSaveMHT.Caption  = _goHelper.GetLoc("SAVEASMHT")
  26181.             .ChkSaveImg.Caption  = _goHelper.GetLoc("SAVEASIMAG")
  26182.             .ChkSavePDF.Caption  = _goHelper.GetLoc("SAVEASPDF")
  26183.             .ChkSaveRTF.Caption  = _goHelper.GetLoc("SAVEASRTF")
  26184.             .ChkSaveXLS.Caption  = _goHelper.GetLoc("SAVEASXLS")
  26185.             .ChkSaveTXT.Caption  = _goHelper.GetLoc("SAVEASTXT")
  26186.             .lblOutputPath.Caption = _goHelper.GetLoc("SAVEPATH")
  26187.             .ChkOpenViewer.Caption = _goHelper.GetLoc("OPENVIEWER")
  26188.         ENDWITH
  26189.     ENDIF
  26190.     IF VARTYPE(This.PF.PageEmail) = "O"
  26191.         WITH This.PF.PageEmail
  26192.             .Caption = _goHelper.GetLoc("EMAIL")
  26193.             .lblAttachmentType.Caption = _goHelper.GetLoc("ATTACHTYPE")
  26194.             .lblCDOsettings.Caption    = _goHelper.GetLoc("CDOSETUP")
  26195.             .lblEmailMode.Caption      = _goHelper.GetLoc("EMAILMODE")
  26196.             .lblLogin.Caption          = _goHelper.GetLoc("LOGIN")
  26197.             .lblPassword.Caption       = _goHelper.GetLoc("PASSWORD")
  26198.             .lblSender.Caption         = _goHelper.GetLoc("SENDER")
  26199.             .lblSMTPport.Caption       = _goHelper.GetLoc("SMTPPORT")
  26200.             .lblSMTPserver.Caption     = _goHelper.GetLoc("SMTPSERVER")
  26201.             .ChkAutoEmail.Caption      = _goHelper.GetLoc("AUTOEMAIL")
  26202.             .ChkUseSSL.Caption         = _goHelper.GetLoc("USESSL")
  26203.         ENDWITH
  26204.         WITH This.PF.PageEmail.CmbEmailType as ComboBox
  26205.             .ListItem(4) = _goHelper.GetLoc("CUSTOMPROC")
  26206.         ENDWITH
  26207.     ENDIF
  26208.     IF VARTYPE(This.PF.PagePDF) = "O"
  26209.         WITH This.PF.PagePDF
  26210.             * .Caption = _goHelper.GetLoc("PDFOPTIONS")
  26211.             .chkEmbedFonts.Caption    = _goHelper.GetLoc("EMBEDFONTS")
  26212.             .chkPDFasImage.Caption    = _goHelper.GetLoc("PDFASIMAGE")
  26213.             .lblPageMode.Caption      = _goHelper.GetLoc("PAGEMODE")
  26214.             .CmbPageMode.ListItem(1)  = _goHelper.GetLoc("NORMALVIEW")
  26215.             .CmbPageMode.ListItem(2)  = _goHelper.GetLoc("THUMBSPANE")
  26216.             *!*        .CmbPageMode.ListItem(2)  = _goHelper.GetLoc("OUTLINPANE")
  26217.             *!*        .CmbPageMode.ListItem(3)  = _goHelper.GetLoc("THUMBSPANE")
  26218.             .lblPDFauthor.Caption     = _goHelper.GetLoc("PDFAUTHOR")
  26219.             .lblPDFtitle.Caption      = _goHelper.GetLoc("PDFTITLE")
  26220.             .lblSymbol.Caption        = _goHelper.GetLoc("SYMBBARCOD")
  26221.             .lblSymbol.ToolTipText    = _goHelper.GetLoc("SYMBBARTIP")
  26222.             .txtPDFSymbolList.ToolTipText = _goHelper.GetLoc("SYMBBARTIP")
  26223.             .lblDefaultFont.Caption   = _goHelper.GetLoc("PDFFONT")
  26224.             .ChkEncrypt.Caption       = _goHelper.GetLoc("ENCRYPTDOC")
  26225.             .lblMasterPwd.Caption     = _goHelper.GetLoc("MASTERPWD")
  26226.             .lblUserPwd.Caption       = _goHelper.GetLoc("USERPWD")
  26227.             .ChkCanPrint.Caption      = _goHelper.GetLoc("CANPRINT")
  26228.             .ChkCanEdit.Caption       = _goHelper.GetLoc("CANEDIT")
  26229.             .ChkCanCopy.Caption       = _goHelper.GetLoc("CANCOPY")
  26230.             .ChkCanAddNotes.Caption   = _goHelper.GetLoc("CANADDNOTE")
  26231.         ENDWITH
  26232.     ENDIF
  26233.     IF VARTYPE(This.PF.PageXLS) = "O"
  26234.         WITH This.PF.PageXLS
  26235.             .lblExcelExtension.Caption   = _goHelper.GetLoc("WKSEXT")
  26236.             .chkConverttoPureXLS.Caption = _goHelper.GetLoc("XML2XLS")
  26237.             .chkRepeatHeaders.Caption    = _goHelper.GetLoc("RPTHEADER")
  26238.             .chkRepeatFooters.Caption    = _goHelper.GetLoc("RPTFOOTER")
  26239.             .chkHidePageNo.Caption       = _goHelper.GetLoc("HIDEPAGENO")
  26240.             .chkCellAlignLeft.Caption    = _goHelper.GetLoc("XLALIGNLEF")
  26241.         ENDWITH
  26242.     ENDIF
  26243. CATCH TO loExc
  26244.     *    SET STEP ON
  26245. ENDTRY
  26246. RETURN
  26247. ENDPROC
  26248. PROCEDURE getloc
  26249. LPARAMETERS tcString
  26250. RETURN TRIM(EVALUATE("_goHelper._oLang." + tcString))
  26251. ENDPROC
  26252. PROCEDURE enablecontrols
  26253.     IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  26254.             VARTYPE(_Screen.oFoxyPreviewer.oSettingsDlg) = "O"
  26255.         WITH _Screen.oFoxyPreviewer.oSettingsDlg
  26256.             && Enabling the Tabs
  26257.             This.PF.PageGeneral.Enabled  = .lEnableTabGeneral
  26258.             This.PF.PageControls.Enabled = .lEnableTabControls
  26259.             This.PF.PageOutput.Enabled   = .lEnableTabOutput
  26260.             This.PF.PageEmail.Enabled    = .lEnableTabEmail
  26261.             This.PF.PagePDF.Enabled      = .lEnableTabPDF
  26262.             This.PF.PageXLS.Enabled      = .lEnableTabXLS
  26263.             && Showing / hiding  and Enabling / disabling the controls or pages
  26264.             IF .lShowTabXLS
  26265.             ELSE
  26266.                 This.PF.RemoveObject("PageXLS")
  26267.             ENDIF
  26268.             IF .lShowTabPDF
  26269.                 This.PF.PagePDF.ChkEmbedFonts.Enabled    = .lEnableChkEmbedFonts
  26270.                 This.PF.PagePDF.ChkPDFasImage.Enabled    = .lEnableChkPDFasImage
  26271.             ELSE
  26272.                 This.PF.RemoveObject("PagePDF")
  26273.             ENDIF
  26274.             IF .lShowTabEmail
  26275.                 This.PF.PageEmail.cmbEmailType.Enabled     = .lEnableCmbEmailType
  26276.                 This.PF.PageEmail.CmbAttach.Enabled        = .lEnableCmbAttachmentType
  26277.             ELSE 
  26278.                 This.PF.RemoveObject("PageEmail")
  26279.             ENDIF
  26280.             IF .lShowTabOutput
  26281.                 This.PF.PageOutput.chkSaveImg.Enabled       = .lEnableChkSaveAsImage
  26282.                 This.PF.PageOutput.chkSavePDF.Enabled       = .lEnableChkSaveAsPDF
  26283.                 This.PF.PageOutput.chkSaveRTF.Enabled       = .lEnableChkSaveAsRTF
  26284.                 This.PF.PageOutput.ChkSaveHTML.Enabled      = .lEnableChkSaveAsHTML
  26285.                 This.PF.PageOutput.ChkSaveMHT.Enabled       = .lEnableChkSaveAsMHT
  26286.                 This.PF.PageOutput.chkSaveXLS.Enabled       = .lEnableChkSaveAsXLS
  26287.                 This.PF.PageOutput.OptXLSType.Enabled       = .lEnableChkSaveAsXLS
  26288.                 This.PF.PageOutput.ChkSaveTXT.Enabled       = .lEnableChkSaveAsTXT
  26289.                 This.PF.PageOutput.ChkSaveTXT.Visible       = _goHelper.lExtended = .T.
  26290.             ELSE 
  26291.                 This.PF.RemoveObject("PageOutput")
  26292.             ENDIF
  26293.             IF .lShowTabControls
  26294.                 This.PF.PageControls.ChkPrintPref.Enabled     = .lEnableChkPrintPref
  26295.                 This.PF.PageControls.CmbPrPrefType.Enabled    = .lEnableCmbPrintPrefType
  26296.                 This.PF.PageControls.ChkCopies.Enabled        = .lEnableChkCopies
  26297.                 This.PF.PageControls.ChkSaveToFile.Enabled    = .lEnableChkSavetoFile
  26298.                 This.PF.PageControls.ChkAvailPrinters.Enabled = .lEnableChkPrinters
  26299.                 This.PF.PageControls.ChkSendEmail.Enabled     = .lEnableChkEmail
  26300.                 This.PF.PageControls.ChkMiniatures.Enabled    = .lEnableChkMiniatures
  26301.                 This.PF.PageControls.SpnMiniatures.Enabled    = .lEnableChkMiniatures
  26302.                 This.PF.PageControls.ChkSearch.Enabled        = .lEnableChkSearch
  26303.                 This.PF.PageControls.SpnSearchPages.Enabled   = .lEnableChkSearch
  26304.                 This.PF.PageControls.ChkSettings.Enabled      = .lEnableChkSettings
  26305.             ELSE 
  26306.                 This.PF.RemoveObject("PageControls")
  26307.             ENDIF
  26308.             IF .lShowTabGeneral
  26309.                 This.PF.PageGeneral.CmbLanguage.Visible = .lShowLanguage
  26310.                 This.PF.PageGeneral.lblLanguage.Visible = .lShowLanguage
  26311.                 This.PF.PageGeneral.CmbLanguage.Enabled = .lEnableLanguage
  26312.             ELSE 
  26313.                 This.PF.RemoveObject("PageGeneral")
  26314.             ENDIF
  26315.         ENDWITH
  26316.     ENDIF
  26317. CATCH TO loExc
  26318. *    SET STEP ON
  26319. ENDTRY
  26320. ENDPROC
  26321. PROCEDURE Load
  26322. SET TALK OFF
  26323. SET CONSOLE OFF 
  26324. Thisform.AddProperty("nSelect", SELECT())
  26325. Thisform.AddProperty("nDataSession", SET("Datasession"))
  26326. ENDPROC
  26327. PROCEDURE Destroy
  26328. USE IN SELECT("FP_Settings")
  26329. IF This.inPreview = .F.
  26330.     RELEASE _goHelper
  26331. ENDIF
  26332. SET DATASESSION TO (Thisform.nDataSession)
  26333. SELECT(Thisform.nSelect)
  26334. ENDPROC
  26335. PROCEDURE Init
  26336. && Remove the "About" page if running in EXE
  26337. IF _VFP.StartMode <> 0
  26338.     This.PF.PageCount = 6
  26339. ENDIF
  26340. IF VARTYPE(_goHelper) <> "O"
  26341.     * Get settings information
  26342.     RELEASE _goHelper
  26343.     PUBLIC  _goHelper
  26344.     _goHelper = NEWOBJECT("PreviewHelper", LOCFILE("FoxyPreviewer.Prg"))
  26345.     _goHelper.lExtended = .F.
  26346.     This.inPreview = .F.
  26347. ENDIF
  26348.     This.Icon = _goHelper.cFormIcon
  26349. CATCH
  26350. ENDTRY
  26351. LOCAL lcUserFile, llReturn, loEx as Exception
  26352. lcUserFile = IIF(EMPTY(_goHelper._SettingsFile), ;
  26353.     "FoxyPreviewer_Settings.dbf", ;
  26354.     _goHelper._SettingsFile)
  26355.     USE (lcUserFile) IN 0 AGAIN SHARED ALIAS FP_Settings
  26356. CATCH TO loEx
  26357.     MESSAGEBOX("Could not load the settings file." + CHR(13) + ;
  26358.         "Make sure to delete the file 'FoxyPreviewer_Settings.dbf'" + CHR(13) + ;
  26359.         "and run a report again using the previewer to generate the settings file", ;
  26360.         16, "Error loading settings")
  26361.     IF loEx.ErrorNo = 1 && File does not exist
  26362.     ENDIF
  26363.     llReturn = .T.
  26364. ENDTRY
  26365. IF llReturn
  26366.     SET DATASESSION TO (Thisform.nDataSession)
  26367.     SELECT(Thisform.nSelect)
  26368.     RETURN .F.
  26369. ENDIF
  26370. && Show/Hide, Enable/Disable controls in simplified mode
  26371. Thisform.EnableControls()
  26372. SELECT FP_Settings
  26373. WITH This
  26374.     * .UpdateControl(.PF.PageGeneral.CmbLanguage, "cLanguage")
  26375.     IF VARTYPE(.PF.PageGeneral) = "O"
  26376.         IF VARTYPE(_goHelper) = "O"
  26377.             * .PF.PageGeneral.CmbLanguage.Value = _goHelper.cLanguage
  26378.             This.PF.PageGeneral.CmbLanguage.ListItemId = _goHelper._LangIndex
  26379.         ENDIF
  26380.         .UpdateControl(.PF.PageGeneral.CmbTbrVisibility, "nShowToolBar")
  26381.         && 1 = Visible (default), 2 = Invisible, 3 = Use resource
  26382.         .UpdateControl(.PF.PageGeneral.CmbDock, "nDockType", 2)
  26383. 1 Undocks the toolbar or form.
  26384.         *      0 Positions the toolbar or form at the top of the main Visual FoxPro window.
  26385.         *     1 Positions the toolbar or form at the left side of the main Visual FoxPro window.
  26386.         *     2 Positions the toolbar or form at the right side of the main Visual FoxPro window.
  26387.         *     3 Positions the toolbar or form at the bottom of the main Visual FoxPro window.
  26388.         *     4 or .F. Mmeans to keep the current Dock settings from the resource
  26389.         .UpdateControl(.PF.PageGeneral.CmbCanvasCnt    , "nCanvasCount")
  26390.         .UpdateControl(.PF.PageGeneral.CmbZoom         , "nZoomLevel")
  26391.         .UpdateControl(.PF.PageGeneral.CmbWndState     , "nWindowState", 1)
  26392.         .UpdateControl(.PF.PageGeneral.ChkQuiet        , "lQuietMode")
  26393.         .UpdateControl(.PF.PageGeneral.CmbProgress     , "nThermType")
  26394.     ENDIF
  26395.     IF VARTYPE(.PF.PageControls) = "O"
  26396.         .UpdateControl(.PF.PageControls.CmbBtnSize      , "nButtonSize")
  26397.         .UpdateControl(.PF.PageControls.cmbPrPrefType   , "nPrinterPropType")
  26398.         .UpdateControl(.PF.PageControls.ChkAvailPrinters, "lShowPrinters")
  26399.         .UpdateControl(.PF.PageControls.ChkCopies       , "lShowCopies")
  26400.         .UpdateControl(.PF.PageControls.ChkPrintPref    , "lPrinterPref")
  26401.         .UpdateControl(.PF.PageControls.ChkSaveToFile   , "lSaveToFile")
  26402.         .UpdateControl(.PF.PageControls.ChkSettings     , "lShowSetup")
  26403.         .UpdateControl(.PF.PageControls.ChkMiniatures   , "lShowMiniatures")
  26404.         .UpdateControl(.PF.PageControls.SpnMiniatures   , "nMaxMiniatureDisplay")    && Number of miniature to display in the miniature form
  26405.         .UpdateControl(.PF.PageControls.ChkSendEmail    , "lSendToEmail")
  26406.         .UpdateControl(.PF.PageControls.ChkSearch       , "lShowSearch")
  26407.         .UpdateControl(.PF.PageControls.SpnSearchPages  , "nSearchPages")
  26408.     ENDIF
  26409.     IF VARTYPE(.PF.PageOutput) = "O"
  26410.         .UpdateControl(.PF.PageOutput.ChkSaveHTML     , "lSaveAsHTML")
  26411.         .UpdateControl(.PF.PageOutput.ChkSaveMHT      , "lSaveAsMHT")
  26412.         .UpdateControl(.PF.PageOutput.ChkSaveImg      , "lSaveAsImage")
  26413.         .UpdateControl(.PF.PageOutput.ChkSavePDF      , "lSaveAsPDF")
  26414.         .UpdateControl(.PF.PageOutput.ChkSaveRTF      , "lSaveAsRTF")
  26415.         .UpdateControl(.PF.PageOutput.ChkSaveXLS      , "lSaveAsXLS")
  26416.         .UpdateControl(.PF.PageOutput.ChkSaveTXT      , "lSaveAsTXT")
  26417.         .UpdateControl(.PF.PageOutput.TxtOutputPath   , "cOutputPath")
  26418.         .UpdateControl(.PF.PageOutput.ChkOpenViewer   , "lOpenViewer")
  26419.     ENDIF
  26420.     IF VARTYPE(.PF.PageEmail) = "O"
  26421.         .UpdateControl(.PF.PageEmail.CmbEmailType    , "nEmailMode")
  26422.         .UpdateControl(.PF.PageEmail.CmbAttach       , "cEmailType") && file type to be used in Emails (PDF, RTF, HTML or XLS)
  26423.         .UpdateControl(.PF.PageEmail.chkAutoEmail    , "lEmailAuto") && Auto generates output file
  26424.         .UpdateControl(.PF.PageEmail.TxtLogin        , "cSMTPUserName")
  26425.         .UpdateControl(.PF.PageEmail.TxtPassword     , "cSMTPPassword")
  26426.         .PF.PageEmail.TxtPassword.Value = _goHelper.DoDecrypt(.PF.PageEmail.TxtPassword.Value)  && Decrypt it!... by Nick Porfyris [20101014]...
  26427.         .UpdateControl(.PF.PageEmail.TxtPort         , "nSMTPPort")
  26428.         .UpdateControl(.PF.PageEmail.TxtSMTP         , "cSMTPServer")
  26429.         .UpdateControl(.PF.PageEmail.ChkUseSSL       , "lSMTPUseSSL")
  26430.         .UpdateControl(.PF.PageEmail.TxtFrom         , "cEmailFrom")
  26431.         .UpdateControl(.PF.PageEmail.TxtHTMLfile     , "cEmailBodyFile")
  26432.         * Disable the HTML output from the Email TAB if not at Extended mode
  26433.         WITH This.PF.PageEmail.CmbAttach as ComboBox
  26434.             IF NOT _goHelper.lExtended
  26435.                 .ListItem(5) = "\HTML"
  26436.             ENDIF
  26437.         ENDWITH
  26438.     ENDIF
  26439.     IF VARTYPE(.PF.PagePDF) = "O"
  26440.         .UpdateControl(.PF.PagePDF.ChkEmbedFonts   , "lPDFEmbedFonts")
  26441.         .UpdateControl(.PF.PagePDF.ChkPDFasImage   , "lPDFasImage")
  26442.         .UpdateControl(.PF.PagePDF.ChkEncrypt      , "lPDFEncryptDocument")
  26443.         .UpdateControl(.PF.PagePDF.CmbPageMode     , "nPDFPageMode")
  26444.         .UpdateControl(.PF.PagePDF.ChkCanAddNotes  , "lPDFCanAddNotes")
  26445.         .UpdateControl(.PF.PagePDF.ChkCanCopy      , "lPDFCanCopy")
  26446.         .UpdateControl(.PF.PagePDF.ChkCanEdit      , "lPDFCanEdit")
  26447.         .UpdateControl(.PF.PagePDF.ChkCanPrint     , "lPDFCanPrint")
  26448.         .UpdateControl(.PF.PagePDF.TxtMasterPwd    , "cPDFMasterPassword")
  26449.         .UpdateControl(.PF.PagePDF.TxtUserPwd      , "cPDFUserPassword")
  26450.         .UpdateControl(.PF.PagePDF.TxtPDFAuthor    , "cPDFAuthor")
  26451.         .UpdateControl(.PF.PagePDF.TxtPDFtitle     , "cPDFtitle")
  26452.         .UpdateControl(.PF.PagePDF.TxtPDFSymbolList, "cPDFSymbolFontsList")
  26453.         .UpdateControl(.PF.PagePDF.CmbDefaultFont  , "cPDFDefaultFont")
  26454.     ENDIF
  26455.     IF VARTYPE(.PF.PageXLS) = "O"
  26456.         .UpdateControl(.PF.PageXLS.cmbExcelExtension  , "cExcelDefaultExtension")
  26457.         .UpdateControl(.PF.PageXLS.chkCOnverttoPureXLS, "lExcelConvertToXLS")
  26458.         .UpdateControl(.PF.PageXLS.chkRepeatHeaders   , "lExcelRepeatHeaders")
  26459.         .UpdateControl(.PF.PageXLS.chkRepeatFooters   , "lExcelRepeatFooters")
  26460.         .UpdateControl(.PF.PageXLS.chkHidePageNo      , "lExcelHidePageNo")
  26461.         .UpdateControl(.PF.PageXLS.chkCellAlignLeft   , "lExcelAlignLeft")
  26462.     ENDIF
  26463.     *!*        cPdfAuthor          = NULL
  26464.     *!*        cPdfTitle           = NULL
  26465.     *!*        cPdfSubject         = NULL
  26466.     *!*        cPdfKeyWords        = NULL
  26467.     *!*        cPdfCreator         = NULL
  26468. ENDWITH
  26469. This.SetLanguage()
  26470. RETURN
  26471. *!*        cEmailPRG  = ""
  26472. *!*        lPDFasImage     = .F.
  26473. *!*        nPDFPageMode = 0 &&0 = Normal view (default), 1 = Show outlines pane, 2 = Show thumbnails pane
  26474. *!*        lQuietMode      = .T.
  26475. *!*         cFormIcon = PR_FORMICON
  26476. ENDPROC
  26477. GetShortPathName
  26478. Win32API
  26479. Settings file: 
  26480. Settings information
  26481. FoxyPreviewer settings table: 
  26482. LCFILE    
  26483. _GOHELPER
  26484. _SETTINGSFILE
  26485. LCLONGFILE
  26486. LCBUFFER
  26487. LNBUFFERSIZE
  26488. LNSHORTPATHLEN
  26489. LCSHORTPATH
  26490. GETSHORTPATHNAME
  26491. WIN32API
  26492. _SYS16
  26493. RightClick,
  26494. EXTENSIONHANDLER
  26495. LOEXHANDLER    
  26496. _GOHELPER
  26497. _OEXHANDLER
  26498. PREVIEWFORM
  26499. TOOLBAR
  26500. TOOLBARISVISIBLE
  26501. CREATETOOLBAR
  26502. LOEXC
  26503. THISFORM
  26504. RELEASE
  26505. Click,
  26506. EXTENSIONHANDLER
  26507. THISFORM
  26508. VALIDATE
  26509. UPDATETABLE
  26510. LOEXHANDLER    
  26511. _GOHELPER
  26512. _OEXHANDLER
  26513. PREVIEWFORM
  26514. TOOLBAR
  26515. UPDATESETTINGS
  26516. TOOLBARISVISIBLE
  26517. CREATETOOLBAR
  26518. LOEXC
  26519. RELEASE
  26520. Click,
  26521. http://foxypreviewer.codeplex.com/license
  26522. Hyperlink
  26523. LOHYPERLINK
  26524. LCLINK
  26525. NAVIGATETO
  26526. Click,
  26527. FoxyPreviewer settings table: 
  26528. CAPTION
  26529. Click,
  26530. http://foxypreviewer.codeplex.com/releases
  26531. Hyperlink
  26532. LOHYPERLINK
  26533. LCLINK
  26534. NAVIGATETO
  26535. Click,
  26536. http://foxypreviewer.codeplex.com/documentation/
  26537. Hyperlink
  26538. LOHYPERLINK
  26539. LCLINK
  26540. NAVIGATETO
  26541. Click,
  26542. ADDITEM
  26543. Init,
  26544. Helvetica
  26545. Courier
  26546. Times-Roman
  26547. ADDITEM
  26548. Init,
  26549. Normal view
  26550. Thumbnails pane
  26551. ADDITEM
  26552. Init,
  26553. PARENT
  26554. ACTIVATE
  26555. InteractiveChange,
  26556. LCDIR
  26557. LCNEWDIR
  26558. PARENT
  26559. TXTHTMLFILE
  26560. VALUE
  26561. Click,
  26562. ADDITEM
  26563. Init,
  26564. CDO - HTML
  26565. CDO - TXT
  26566. Custom procedure
  26567. MAPI Alternative
  26568. ADDITEM
  26569. Init,
  26570. Global printer prompt options
  26571. Setup property sheet for current printer
  26572. ADDITEM
  26573. Init,
  26574. Small (16x16 pixels)
  26575. Big (32x32 pixels)
  26576. ADDITEM
  26577. Init,
  26578. SAVEPATH
  26579. LCDIR
  26580. LCNEWDIR
  26581. PARENT
  26582. TXTOUTPUTPATH
  26583. VALUE    
  26584. _GOHELPER
  26585. GETLOC
  26586. Click,
  26587. VISIBLE
  26588. Init,
  26589. Default thermometer
  26590. Windows compatible thermometer
  26591. ADDITEM
  26592. Init,
  26593. Normal
  26594. Minimized
  26595. Maximized
  26596. ADDITEM
  26597. Init,
  26598. Whole Page
  26599. Page Width
  26600. ADDITEM
  26601. Init,
  26602. VALUE
  26603. 1 Page
  26604. 2 Pages
  26605. 4 Pages
  26606. COLUMNCOUNT
  26607. BOUNDCOLUMN
  26608. COLUMNWIDTHS
  26609. COLUMNLINES
  26610. ADDITEM
  26611. NEWINDEX
  26612. ProgrammaticChange,
  26613. Initi
  26614. Visible on startup
  26615. Invisible
  26616. Show according to Resource
  26617. ADDITEM
  26618. Init,
  26619. Undocked
  26620. Toolbar on TOP of the window
  26621. Toolbar on LEFT of the window
  26622. Toolbar on RIGHT of the window
  26623. Toolbar on BOTTOM of the window
  26624. Use settings from the Resource
  26625. ADDITEM
  26626. Init,
  26627. cValue
  26628. ENGLISH
  26629. ARABIC
  26630. BULGARIAN
  26631. CHINESE
  26632. CZECH
  26633. DUTCH
  26634. FRENCH
  26635. GERMAN
  26636. GREEK
  26637. INDONESIAN
  26638. ITALIAN
  26639. PERSIAN
  26640. POLISH
  26641. PORTUGUES
  26642. RUSSIAN
  26643. SPANISH
  26644. SWAHILI
  26645. TCHINESE
  26646. TURKISH
  26647. ADDPROPERTY    
  26648. _GOHELPER
  26649. LCLANG
  26650. LCLOCAL
  26651. LCITEM
  26652. _ALANGUAGES
  26653. COUNT
  26654. _ALANGLOCAL
  26655. ADDITEMX
  26656. CVALUE
  26657. VALUE    
  26658. _GOHELPER    
  26659. CLANGUAGE
  26660. THISFORM
  26661. SETLANGUAGE
  26662. Init,
  26663. InteractiveChangeL
  26664. LLENABLE
  26665. CHKENCRYPT
  26666. VALUE
  26667. CHKCANADDNOTES
  26668. ENABLED
  26669. CHKCANCOPY
  26670. CHKCANEDIT
  26671. CHKCANPRINT
  26672. TXTMASTERPWD
  26673. TXTUSERPWD
  26674. LBLMASTERPWD
  26675. LBLUSERPWD
  26676. GetShortPathName
  26677. Win32API
  26678. __ReadMe.txt
  26679. LCFILE    
  26680. _GOHELPER
  26681. _SETTINGSFILE
  26682. LCLONGFILE
  26683. LCBUFFER
  26684. LNBUFFERSIZE
  26685. LNSHORTPATHLEN
  26686. LCSHORTPATH
  26687. GETSHORTPATHNAME
  26688. WIN32API
  26689. LCINFO
  26690. LCSETTINGSFILE
  26691. _SYS16
  26692. EDTCURSETTINGS
  26693. VALUE    
  26694. EDTSOURCE    
  26695. EDTREADME
  26696. VISIBLE
  26697. PagePDF.Activate,
  26698. PageAbout.Activate{
  26699. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  26700. \PROCEDURE RightClick
  26701. LOCAL lcFile
  26702. lcFile = _goHelper._SettingsFile
  26703. IF LEN(lcFile) > 150
  26704.     * GetShortPathName
  26705.     LOCAL lcLongFile, lcBuffer, lnBufferSize, lnShortPathLen, lcShortPath
  26706.     lcLongFile = lcFile
  26707.     DECLARE INTEGER GetShortPathName IN Win32API ;   
  26708.         STRING  @cLongPath, ;   
  26709.         STRING  @cShortPathBuff, ;   
  26710.         INTEGER nBuffSize
  26711.     lcBuffer = SPACE(511)
  26712.     * should this be set to the maximum length allowed for a long path name?
  26713.     lnBufferSize = 511
  26714.     lnShortPathLen = GetShortPathName(lcLongFile, @lcBuffer, @lnBufferSize)
  26715.     lcShortPath = LEFT(lcBuffer, lnShortPathLen)
  26716.     IF NOT EMPTY(lcShortPath)
  26717.         lcFile = lcShortPath
  26718.     ENDIF 
  26719. ENDIF
  26720. MESSAGEBOX(;
  26721.         _goHelper._Sys16 + CHR(13) + ;
  26722.         "Settings file: " + lcFile, 64, "Settings information")
  26723. _ClipText = lcFile
  26724. BROWSE NORMAL TITLE "FoxyPreviewer settings table: " + lcFile
  26725. ENDPROC
  26726. Top = 456
  26727. Left = -2
  26728. Height = 13
  26729. Width = 18
  26730. Caption = "Command1"
  26731. Style = 1
  26732. TabIndex = 5
  26733. Alignment = 2
  26734. Name = "Command1"
  26735. frmSettings
  26736. Command1
  26737. commandbutton
  26738. commandbutton
  26739. AutoSize = .F.
  26740. FontSize = 8
  26741. WordWrap = .F.
  26742. Caption = "Version"
  26743. Height = 29
  26744. Left = 12
  26745. Top = 427
  26746. Width = 247
  26747. TabIndex = 4
  26748. ForeColor = 0,128,192
  26749. Name = "lblVersion"
  26750. frmSettings
  26751. lblVersion
  26752. label
  26753. label
  26754. ^PROCEDURE Click
  26755. LOCAL loExHandler
  26756. loExHandler = _goHelper._oExHandler
  26757. TRY     
  26758.     WITH loExHandler as ExtensionHandler
  26759.         IF VARTYPE(.previewForm.ToolBar) <> "O"
  26760.             .PreviewForm.ToolBar = NULL
  26761.             * _goHelper.UpdateSettings()
  26762.             .PreviewForm.ToolbarIsVisible = .F.
  26763.             .PreviewForm.CreateToolbar()
  26764.             .Show()
  26765.         ENDIF 
  26766.     ENDWITH 
  26767. CATCH TO loExc
  26768.     * LOCAL loExc AS EXCEPTION
  26769.     * MESSAGEBOX("Error :" + CHR(13) + ;
  26770.                 TRANSFORM(loExc.ERRORNO) + " - " + loExc.MESSAGE + CHR(13) + ;
  26771.                 "Line: " + TRANSFORM(loExc.LINENO) + " - " + loExc.LINECONTENTS)
  26772. ENDTRY
  26773. Thisform.Release()
  26774. RETURN
  26775. ENDPROC
  26776. tTop = 433
  26777. Left = 355
  26778. Height = 27
  26779. Width = 84
  26780. Cancel = .T.
  26781. Caption = "Cancel"
  26782. TabIndex = 3
  26783. Name = "cmdCancel"
  26784. frmSettings
  26785.     cmdCancel
  26786. commandbutton
  26787. commandbutton
  26788. PROCEDURE Click
  26789. IF NOT Thisform.Validate()
  26790.     RETURN
  26791. ENDIF 
  26792. Thisform.UpdateTable()
  26793. INKEY(.1)
  26794.     LOCAL loExHandler
  26795.     loExHandler = _goHelper._oExHandler
  26796.     WITH loExHandler as ExtensionHandler
  26797.         TRY 
  26798.             .PreviewForm.ToolBar.Hide()
  26799.             .PreviewForm.ToolBar = NULL
  26800.         CATCH 
  26801.         ENDTRY 
  26802.         _goHelper.UpdateSettings()
  26803.         .PreviewForm.ToolbarIsVisible = .F.
  26804.         .PreviewForm.CreateToolbar()
  26805.         .Show()
  26806.     ENDWITH 
  26807. CATCH TO loExc
  26808. *    SET STEP ON 
  26809. ENDTRY 
  26810. Thisform.Release()
  26811. ENDPROC
  26812. ^Top = 433
  26813. Left = 259
  26814. Height = 27
  26815. Width = 84
  26816. Caption = "Ok"
  26817. TabIndex = 2
  26818. Name = "cmdOk"
  26819. frmSettings
  26820. cmdOk
  26821. commandbutton
  26822. commandbutton
  26823. SHeight = 174
  26824. Left = 14
  26825. ReadOnly = .F.
  26826. Top = 8
  26827. Width = 409
  26828. Name = "edtReadMe"
  26829. frmSettings.PF.PageAbout
  26830.     edtReadMe
  26831. editbox
  26832. editbox
  26833. WFontSize = 8
  26834. Height = 38
  26835. Left = 86
  26836. Top = 314
  26837. Width = 338
  26838. Name = "edtCurSettings"
  26839. frmSettings.PF.PageAbout
  26840. edtCurSettings
  26841. editbox
  26842. editbox
  26843. RFontSize = 8
  26844. Height = 38
  26845. Left = 86
  26846. Top = 267
  26847. Width = 338
  26848. Name = "edtSource"
  26849. frmSettings.PF.PageAbout
  26850.     edtSource
  26851. editbox
  26852. editbox
  26853. PROCEDURE Click
  26854. LOCAL loHyperlink, lcLink
  26855. lcLink = "http://foxypreviewer.codeplex.com/license"
  26856. loHyperlink = CREATEOBJECT("Hyperlink") 
  26857. loHyperlink.navigateto(lcLink)
  26858. ENDPROC
  26859. AutoSize = .T.
  26860. FontUnderline = .T.
  26861. BackStyle = 0
  26862. Caption = "Freeware and open source utility - See License online"
  26863. Height = 17
  26864. Left = 14
  26865. MousePointer = 15
  26866. Top = 239
  26867. Width = 296
  26868. ForeColor = 0,0,255
  26869. ToolTipText = "Click to follow link"
  26870. Name = "Label2"
  26871. frmSettings.PF.PageAbout
  26872. Label2
  26873. label
  26874. label
  26875. AutoSize = .T.
  26876. WordWrap = .T.
  26877. BackStyle = 0
  26878. Caption = "Source file:"
  26879. Height = 17
  26880. Left = 14
  26881. Top = 267
  26882. Width = 61
  26883. TabIndex = 15
  26884. Name = "lblInfo"
  26885. frmSettings.PF.PageAbout
  26886. lblInfo
  26887. label
  26888. label
  26889. _PROCEDURE Click
  26890. BROWSE NORMAL TITLE "FoxyPreviewer settings table: " + This.Caption
  26891. ENDPROC
  26892. AutoSize = .T.
  26893. FontUnderline = .T.
  26894. WordWrap = .T.
  26895. BackStyle = 0
  26896. Caption = "Browse settings file"
  26897. Height = 17
  26898. Left = 14
  26899. MousePointer = 15
  26900. Top = 356
  26901. Width = 108
  26902. ForeColor = 0,0,255
  26903. ToolTipText = "Click to follow link"
  26904. Name = "lblSettingsFile"
  26905. frmSettings.PF.PageAbout
  26906. lblSettingsFile
  26907. label
  26908. label
  26909. AutoSize = .T.
  26910. BackStyle = 0
  26911. Caption = "Settings file:"
  26912. Height = 17
  26913. Left = 14
  26914. Top = 315
  26915. Width = 69
  26916. TabIndex = 15
  26917. Name = "lblExcelExtension"
  26918. frmSettings.PF.PageAbout
  26919. lblExcelExtension
  26920. label
  26921. label
  26922. PROCEDURE Click
  26923. LOCAL loHyperlink, lcLink
  26924. lcLink = "http://foxypreviewer.codeplex.com/releases"
  26925. loHyperlink = CREATEOBJECT("Hyperlink") 
  26926. loHyperlink.navigateto(lcLink)
  26927. ENDPROC
  26928. AutoSize = .T.
  26929. FontUnderline = .T.
  26930. BackStyle = 0
  26931. Caption = "FoxyPreviewer latest releases"
  26932. Height = 17
  26933. Left = 14
  26934. MousePointer = 15
  26935. Top = 213
  26936. Width = 165
  26937. ForeColor = 0,0,255
  26938. ToolTipText = "Click to follow link"
  26939. Name = "Label1"
  26940. frmSettings.PF.PageAbout
  26941. Label1
  26942. label
  26943. label
  26944. frmSettings.PF.PageAbout
  26945. Label4
  26946. label
  26947. label
  26948. frmSettings.PF.PageXLS
  26949. _memberdata XML Metadata for customizable properties
  26950. inpreview
  26951. *updatecontrol 
  26952. *updatetable 
  26953. *validate 
  26954. *setlanguage 
  26955. *getloc 
  26956. *enablecontrols 
  26957.     pageframe
  26958.     pageframe
  26959. frmSettings
  26960. {ErasePage = .T.
  26961. PageCount = 7
  26962. Top = 11
  26963. Left = 7
  26964. Width = 443
  26965. Height = 408
  26966. TabIndex = 1
  26967. Name = "PF"
  26968. Page1.Caption = "General"
  26969. Page1.PageOrder = 1
  26970. Page1.Name = "PageGeneral"
  26971. Page2.Caption = "Output"
  26972. Page2.PageOrder = 3
  26973. Page2.Name = "PageOutput"
  26974. Page3.Caption = "Controls"
  26975. Page3.PageOrder = 2
  26976. Page3.Name = "PageControls"
  26977. Page4.Caption = "Email"
  26978. Page4.Enabled = .T.
  26979. Page4.PageOrder = 4
  26980. Page4.Name = "PageEmail"
  26981. Page5.Caption = "PDF"
  26982. Page5.PageOrder = 5
  26983. Page5.Name = "PagePDF"
  26984. Page6.Caption = "XLS"
  26985. Page6.PageOrder = 6
  26986. Page6.Name = "PageXLS"
  26987. Page7.Caption = "About"
  26988. Page7.PageOrder = 7
  26989. Page7.Name = "PageAbout"
  26990. =PROCEDURE PagePDF.Activate
  26991. LOCAL llEnable
  26992. llEnable = This.chkEncrypt.Value
  26993. WITH This
  26994.     .ChkCanAddNotes.Enabled = llEnable
  26995.     .ChkCanCopy.Enabled     = llEnable  
  26996.     .ChkCanEdit.Enabled     = llEnable
  26997.     .ChkCanPrint.Enabled    = llEnable
  26998.     .TxtMasterPwd.Enabled   = llEnable
  26999.     .TxtUserPwd.Enabled     = llEnable
  27000.     .lblMasterPwd.Enabled   = llEnable
  27001.     .lblUserPwd.Enabled     = llEnable
  27002. ENDWITH 
  27003. ENDPROC
  27004. PROCEDURE PageAbout.Activate
  27005. LOCAL lcFile
  27006. lcFile = _goHelper._SettingsFile
  27007. IF LEN(lcFile) > 150
  27008.     * GetShortPathName
  27009.     LOCAL lcLongFile, lcBuffer, lnBufferSize, lnShortPathLen, lcShortPath
  27010.     lcLongFile = lcFile
  27011.     DECLARE INTEGER GetShortPathName IN Win32API ;   
  27012.         STRING  @cLongPath, ;   
  27013.         STRING  @cShortPathBuff, ;   
  27014.         INTEGER nBuffSize
  27015.     lcBuffer = SPACE(511)
  27016.     * should this be set to the maximum length allowed for a long path name?
  27017.     lnBufferSize = 511
  27018.     lnShortPathLen = GetShortPathName(lcLongFile, @lcBuffer, @lnBufferSize)
  27019.     lcShortPath = LEFT(lcBuffer, lnShortPathLen)
  27020.     IF NOT EMPTY(lcShortPath)
  27021.         lcFile = lcShortPath
  27022.     ENDIF 
  27023. ENDIF
  27024. LOCAL lcInfo, lcSettingsFile
  27025. lcInfo = _goHelper._Sys16
  27026. This.EdtCurSettings.Value = lcFile
  27027. This.EdtSource.Value = lcInfo
  27028.     This.EdtReadMe.Value = FILETOSTR("__ReadMe.txt")
  27029. CATCH
  27030.     This.EdtReadMe.Visible = .F.
  27031. ENDTRY 
  27032. _ClipText = lcFile
  27033. ENDPROC
  27034. PROCEDURE Click
  27035. LOCAL loHyperlink, lcLink
  27036. lcLink = "http://foxypreviewer.codeplex.com/documentation/"
  27037. loHyperlink = CREATEOBJECT("Hyperlink") 
  27038. loHyperlink.navigateto(lcLink)
  27039. ENDPROC
  27040. AutoSize = .T.
  27041. FontUnderline = .T.
  27042. BackStyle = 0
  27043. Caption = "FoxyPreviewer online documentation"
  27044. Height = 17
  27045. Left = 14
  27046. MousePointer = 15
  27047. Top = 188
  27048. Width = 202
  27049. ForeColor = 0,0,255
  27050. ToolTipText = "Click to follow link"
  27051. Name = "Label4"
  27052. Top = 261
  27053. Left = 40
  27054. Height = 17
  27055. Width = 126
  27056. AutoSize = .T.
  27057. Alignment = 0
  27058. BackStyle = 0
  27059. Caption = "Align cells to the left"
  27060. TabIndex = 1
  27061. Name = "chkCellAlignLeft"
  27062. chkCellAlignLeft
  27063. checkbox
  27064. checkbox
  27065. Top = 225
  27066. Left = 40
  27067. Height = 17
  27068. Width = 128
  27069. AutoSize = .T.
  27070. Alignment = 0
  27071. BackStyle = 0
  27072. Caption = "Hide page numbers"
  27073. TabIndex = 1
  27074. Name = "chkHidePageNo"
  27075. frmSettings.PF.PageXLS
  27076. chkHidePageNo
  27077. checkbox
  27078. checkbox
  27079. Top = 189
  27080. Left = 40
  27081. Height = 17
  27082. Width = 99
  27083. AutoSize = .T.
  27084. Alignment = 0
  27085. BackStyle = 0
  27086. Caption = "Repeat footers"
  27087. TabIndex = 1
  27088. Name = "chkRepeatFooters"
  27089. frmSettings.PF.PageXLS
  27090. chkRepeatFooters
  27091. checkbox
  27092. checkbox
  27093. frmSettings.PF.PageXLS
  27094. checkbox
  27095. combobox
  27096. combobox
  27097. cmbLanguage
  27098. frmSettings.PF.PageGeneral
  27099. rRowSourceType = 0
  27100. Height = 24
  27101. Left = 186
  27102. Style = 2
  27103. TabIndex = 1
  27104. Top = 20
  27105. Width = 241
  27106. Name = "cmbLanguage"
  27107. TPROCEDURE Init
  27108. This.AddProperty("cValue", "")
  27109. IF VARTYPE(_goHelper) = "O"
  27110.     LOCAL n, lcLang, lcLocal, lcItem
  27111.     FOR m.n = 1 TO _goHelper._aLanguages.Count
  27112.         lcLang  = ALLTRIM(_goHelper._aLanguages(m.n))
  27113.         lcLocal = ALLTRIM(_goHelper._aLangLocal(m.n))
  27114.         IF lcLang == lcLocal
  27115.             lcLocal = ""
  27116.         ELSE 
  27117.             lcLocal = " / " + lcLocal
  27118.         ENDIF 
  27119.         lcItem = lcLang + lcLocal
  27120.         This.AddItem(lcItem)
  27121.     ENDFOR
  27122.     This.AddItem("ENGLISH")
  27123.     This.AddItem("ARABIC")
  27124.     This.AddItem("BULGARIAN")
  27125.     This.AddItem("CHINESE")
  27126.     This.AddItem("CZECH")
  27127.     This.AddItem("DUTCH")
  27128.     This.AddItem("FRENCH")
  27129.     This.AddItem("GERMAN")
  27130.     This.AddItem("GREEK")
  27131.     This.AddItem("INDONESIAN")
  27132.     This.AddItem("ITALIAN")
  27133.     This.AddItem("PERSIAN")
  27134.     This.AddItem("POLISH")
  27135.     This.AddItem("PORTUGUES")
  27136.     This.AddItem("RUSSIAN")
  27137.     This.AddItem("SPANISH")
  27138.     This.AddItem("SWAHILI")
  27139.     This.AddItem("TCHINESE")
  27140.     This.AddItem("TURKISH")
  27141. ENDIF
  27142. ENDPROC
  27143. PROCEDURE InteractiveChange
  27144. This.cValue = ALLTRIM(GETWORDNUM(This.Value, 1, " / "))
  27145.     _goHelper.cLanguage = This.cValue
  27146.     Thisform.SetLanguage()
  27147. CATCH
  27148. ENDTRY
  27149. ENDPROC
  27150. Top = 153
  27151. Left = 40
  27152. Height = 17
  27153. Width = 107
  27154. AutoSize = .T.
  27155. Alignment = 0
  27156. BackStyle = 0
  27157. Caption = "Repeat headers"
  27158. TabIndex = 1
  27159. Name = "chkRepeatHeaders"
  27160. chkRepeatHeaders
  27161. checkbox
  27162. Top = 82
  27163. Left = 40
  27164. Height = 52
  27165. Width = 391
  27166. WordWrap = .T.
  27167. AutoSize = .F.
  27168. Alignment = 0
  27169. BackStyle = 0
  27170. Caption = "Convert to pure XLS"
  27171. TabIndex = 1
  27172. Name = "chkConverttoPureXLS"
  27173. frmSettings.PF.PageXLS
  27174. chkConverttoPureXLS
  27175. checkbox
  27176. checkbox
  27177. AutoSize = .T.
  27178. BackStyle = 0
  27179. Caption = "Default file extension"
  27180. Height = 17
  27181. Left = 40
  27182. Top = 45
  27183. Width = 116
  27184. TabIndex = 15
  27185. Name = "lblExcelExtension"
  27186. frmSettings.PF.PageXLS
  27187. lblExcelExtension
  27188. label
  27189. label
  27190. CPROCEDURE Init
  27191. This.AddItem("XLS")
  27192. This.AddItem("XML")
  27193. ENDPROC
  27194. FontSize = 8
  27195. RowSourceType = 0
  27196. Height = 24
  27197. Left = 277
  27198. Style = 2
  27199. TabIndex = 3
  27200. Top = 45
  27201. Width = 112
  27202. Name = "cmbExcelExtension"
  27203. frmSettings.PF.PageXLS
  27204. cmbExcelExtension
  27205. combobox
  27206. combobox
  27207. AutoSize = .T.
  27208. BackStyle = 0
  27209. Caption = "PDF default font"
  27210. Height = 17
  27211. Left = 12
  27212. Top = 119
  27213. Width = 89
  27214. TabIndex = 16
  27215. Name = "lblDefaultFont"
  27216. frmSettings.PF.PagePDF
  27217. lblDefaultFont
  27218. label
  27219. label
  27220. lblLanguage
  27221. frmSettings.PF.PageGeneral
  27222. AutoSize = .T.
  27223. BackStyle = 0
  27224. Caption = "Language"
  27225. Height = 17
  27226. Left = 12
  27227. Top = 22
  27228. Width = 58
  27229. TabIndex = 9
  27230. Name = "lblLanguage"
  27231. combobox
  27232. combobox
  27233. cmbDock
  27234. frmSettings.PF.PageGeneral
  27235. nRowSourceType = 0
  27236. Height = 24
  27237. Left = 186
  27238. Style = 2
  27239. TabIndex = 3
  27240. Top = 92
  27241. Width = 241
  27242. Name = "cmbDock"
  27243. FPROCEDURE Init
  27244. This.AddItem("Undocked")     && -1
  27245. This.AddItem("Toolbar on TOP of the window")    && 0
  27246. This.AddItem("Toolbar on LEFT of the window")   && 1
  27247. This.AddItem("Toolbar on RIGHT of the window")  && 2
  27248. This.AddItem("Toolbar on BOTTOM of the window") && 3
  27249. This.AddItem("Use settings from the Resource") && .F.
  27250. * This.ListItemId = 1
  27251.     *!*        
  27252. 1 Undocks the toolbar or form.
  27253.     *!*          0 Positions the toolbar or form at the top of the main Visual FoxPro window.
  27254.     *!*         1 Positions the toolbar or form at the left side of the main Visual FoxPro window.
  27255.     *!*         2 Positions the toolbar or form at the right side of the main Visual FoxPro window.
  27256.     *!*         3 Positions the toolbar or form at the bottom of the main Visual FoxPro window.
  27257.     *!*      4 or .F. Mmeans to keep the current Dock settings from the resource
  27258. ENDPROC
  27259. label
  27260. label
  27261. jPROCEDURE Init
  27262. This.AddItem("Helvetica")
  27263. This.AddItem("Courier")
  27264. This.AddItem("Times-Roman")
  27265. ENDPROC
  27266. FontSize = 8
  27267. RowSourceType = 0
  27268. Height = 24
  27269. Left = 163
  27270. Style = 2
  27271. TabIndex = 6
  27272. Top = 116
  27273. Width = 259
  27274. Name = "cmbDefaultFont"
  27275. frmSettings.PF.PagePDF
  27276. cmbDefaultFont
  27277. combobox
  27278. combobox
  27279. frmSettings.PF.PagePDF
  27280. chkPDFasImage
  27281. checkbox
  27282. checkbox
  27283. label
  27284. label
  27285. lblDockPosition
  27286. frmSettings.PF.PageGeneral
  27287. AutoSize = .T.
  27288. BackStyle = 0
  27289. Caption = "Dock position"
  27290. Height = 17
  27291. Left = 12
  27292. Top = 95
  27293. Width = 77
  27294. TabIndex = 10
  27295. Name = "lblDockPosition"
  27296. combobox
  27297. combobox
  27298. cmbTbrVisibility
  27299. frmSettings.PF.PageGeneral
  27300. wRowSourceType = 0
  27301. Height = 24
  27302. Left = 186
  27303. Style = 2
  27304. TabIndex = 2
  27305. Top = 56
  27306. Width = 241
  27307. Name = "cmbTbrVisibility"
  27308. PROCEDURE Init
  27309. This.AddItem("Visible on startup")
  27310. This.AddItem("Invisible")     
  27311. This.AddItem("Show according to Resource")
  27312. * This.ListItemId = 1
  27313. ENDPROC
  27314. Top = 12
  27315. Left = 209
  27316. Height = 17
  27317. Width = 152
  27318. AutoSize = .T.
  27319. Alignment = 0
  27320. BackStyle = 0
  27321. Caption = "Render pages as Image"
  27322. TabIndex = 2
  27323. Name = "chkPDFasImage"
  27324. vFontSize = 8
  27325. Format = "K"
  27326. Height = 21
  27327. Left = 163
  27328. TabIndex = 7
  27329. Top = 144
  27330. Width = 259
  27331. Name = "txtPDFSymbolList"
  27332. label
  27333. label
  27334. lblToolbarvisibility
  27335. frmSettings.PF.PageGeneral
  27336. AutoSize = .T.
  27337. BackStyle = 0
  27338. Caption = "Toolbar visibility"
  27339. Height = 17
  27340. Left = 12
  27341. Top = 60
  27342. Width = 89
  27343. TabIndex = 11
  27344. Name = "lblToolbarvisibility"
  27345. combobox
  27346. combobox
  27347. cmbCanvasCnt
  27348. frmSettings.PF.PageGeneral
  27349. ColumnWidths = "250"
  27350. RowSourceType = 0
  27351. Height = 24
  27352. Left = 186
  27353. Style = 2
  27354. TabIndex = 4
  27355. Top = 128
  27356. Width = 136
  27357. Name = "cmbCanvasCnt"
  27358. PROCEDURE ProgrammaticChange
  27359. IF This.Value = 4
  27360.     This.Value = "3"
  27361. ENDIF  
  27362. ENDPROC
  27363. PROCEDURE Init
  27364. WITH This
  27365.     .ColumnCount = 2
  27366.     .BoundColumn = 2
  27367.     .ColumnWidths = "80,0"
  27368.     .ColumnLines = .F. 
  27369.     .AddItem("1 Page")
  27370.     .List[.NewIndex, 2] = '1'
  27371.     .AddItem("2 Pages")
  27372.     .List[.NewIndex, 2] = '2'
  27373.     .AddItem("4 Pages")
  27374.     .List[.NewIndex, 2] = '3'
  27375. ENDWITH 
  27376. * This.ListItemId = 1
  27377. ENDPROC
  27378. frmSettings.PF.PagePDF
  27379. txtPDFSymbolList
  27380. textbox
  27381. textbox
  27382. AutoSize = .F.
  27383. WordWrap = .T.
  27384. BackStyle = 0
  27385. Caption = "Symbol or Bar codes fonts"
  27386. Height = 47
  27387. Left = 12
  27388. Top = 145
  27389. Width = 144
  27390. TabIndex = 19
  27391. Name = "lblSymbol"
  27392. frmSettings.PF.PagePDF
  27393.     lblSymbol
  27394. label
  27395. label
  27396. pFontSize = 8
  27397. Format = "K"
  27398. Height = 21
  27399. Left = 163
  27400. TabIndex = 5
  27401. Top = 90
  27402. Width = 259
  27403. Name = "txtPDFTitle"
  27404. frmSettings.PF.PagePDF
  27405. txtPDFTitle
  27406. textbox
  27407. textbox
  27408. frmSettings.PF.PagePDF
  27409. lblPDFtitle
  27410. label
  27411. label
  27412. label
  27413. label
  27414. label
  27415. lblCanvasCnt
  27416. frmSettings.PF.PageGeneral
  27417. AutoSize = .T.
  27418. BackStyle = 0
  27419. Caption = "Canvas count"
  27420. Height = 17
  27421. Left = 12
  27422. Top = 132
  27423. Width = 77
  27424. TabIndex = 12
  27425. Name = "lblCanvasCnt"
  27426. combobox
  27427. combobox
  27428. cmbZoom
  27429. frmSettings.PF.PageGeneral
  27430. oRowSourceType = 0
  27431. Height = 24
  27432. Left = 186
  27433. Style = 2
  27434. TabIndex = 5
  27435. Top = 164
  27436. Width = 136
  27437. Name = "cmbZoom"
  27438. PROCEDURE Init
  27439. This.AddItem("10%")
  27440. This.AddItem("25%")
  27441. This.AddItem("50%")
  27442. This.AddItem("75%")
  27443. This.AddItem("100%")
  27444. This.AddItem("150%")
  27445. This.AddItem("200%")
  27446. This.AddItem("300%")
  27447. This.AddItem("500%")
  27448. This.AddItem("Whole Page")
  27449. This.AddItem("Page Width")
  27450. * This.ListItemId = 1
  27451. * nZoomLevel = 5 && initial zoom level of the preview window. Possible values are:
  27452.     && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ;
  27453.     && 7-200%, 8-300%, 9-500%, 10-whole page
  27454. ENDPROC
  27455. AutoSize = .T.
  27456. BackStyle = 0
  27457. Caption = "PDF Title"
  27458. Height = 17
  27459. Left = 12
  27460. Top = 92
  27461. Width = 52
  27462. TabIndex = 18
  27463. Name = "lblPDFtitle"
  27464. qFontSize = 8
  27465. Format = "K"
  27466. Height = 21
  27467. Left = 163
  27468. TabIndex = 4
  27469. Top = 64
  27470. Width = 259
  27471. Name = "txtPDFAuthor"
  27472. frmSettings.PF.PagePDF
  27473. txtPDFAuthor
  27474. textbox
  27475. textbox
  27476. frmSettings.PF.PagePDF
  27477. lblPDFauthor
  27478. label
  27479. frmSettings.PF.PagePDF
  27480. label
  27481. label
  27482. lblZoom
  27483. frmSettings.PF.PageGeneral
  27484. AutoSize = .T.
  27485. BackStyle = 0
  27486. Caption = "Zoom level"
  27487. Height = 17
  27488. Left = 12
  27489. Top = 168
  27490. Width = 62
  27491. TabIndex = 13
  27492. Name = "lblZoom"
  27493. combobox
  27494. combobox
  27495. cmbWndState
  27496. frmSettings.PF.PageGeneral
  27497. sRowSourceType = 0
  27498. Height = 24
  27499. Left = 186
  27500. Style = 2
  27501. TabIndex = 6
  27502. Top = 200
  27503. Width = 136
  27504. Name = "cmbWndState"
  27505. PROCEDURE Init
  27506. This.AddItem("Normal")
  27507. This.AddItem("Minimized")
  27508. This.AddItem("Maximized")
  27509. * This.ListItemId = 1
  27510. * nWindowState
  27511. *    0 = Normal
  27512. *    1 = Minimized
  27513. *    2 = Maximized
  27514. ENDPROC
  27515. AutoSize = .T.
  27516. BackStyle = 0
  27517. Caption = "PDF Author"
  27518. Height = 17
  27519. Left = 12
  27520. Top = 65
  27521. Width = 64
  27522. TabIndex = 17
  27523. Name = "lblPDFauthor"
  27524. txtUserPwd
  27525. textbox
  27526. textbox
  27527. frmSettings.PF.PagePDF
  27528. lblUserPwd
  27529. label
  27530. label
  27531. label
  27532. label
  27533. lblWndState
  27534. frmSettings.PF.PageGeneral
  27535. AutoSize = .T.
  27536. BackStyle = 0
  27537. Caption = "Window State"
  27538. Height = 17
  27539. Left = 12
  27540. Top = 203
  27541. Width = 77
  27542. TabIndex = 14
  27543. Name = "lblWndState"
  27544. checkbox
  27545. checkbox
  27546. chkQuiet
  27547. frmSettings.PF.PageGeneral
  27548. Top = 274
  27549. Left = 186
  27550. Height = 17
  27551. Width = 47
  27552. AutoSize = .T.
  27553. Alignment = 0
  27554. BackStyle = 0
  27555. Caption = "Quiet"
  27556. TabIndex = 7
  27557. Name = "chkQuiet"
  27558. combobox
  27559. combobox
  27560. cmbProgress
  27561. frmSettings.PF.PageGeneral
  27562. sRowSourceType = 0
  27563. Height = 24
  27564. Left = 186
  27565. Style = 2
  27566. TabIndex = 8
  27567. Top = 297
  27568. Width = 241
  27569. Name = "cmbProgress"
  27570. |PROCEDURE Init
  27571. WITH This
  27572.     .AddItem("Default thermometer")
  27573.     .AddItem("Windows compatible thermometer")
  27574. ENDWITH
  27575. ENDPROC
  27576. FontSize = 8
  27577. Format = "K"
  27578. Height = 21
  27579. Left = 213
  27580. TabIndex = 10
  27581. Top = 245
  27582. Width = 203
  27583. PasswordChar = "*"
  27584. Name = "txtUserPwd"
  27585. AutoSize = .T.
  27586. BackStyle = 0
  27587. Caption = "User password"
  27588. Height = 17
  27589. Left = 64
  27590. Top = 246
  27591. Width = 87
  27592. TabIndex = 21
  27593. Name = "lblUserPwd"
  27594. label
  27595. label
  27596. lblProgress
  27597. frmSettings.PF.PageGeneral
  27598. AutoSize = .T.
  27599. BackStyle = 0
  27600. Caption = "Progress Thermometer"
  27601. Height = 17
  27602. Left = 11
  27603. Top = 275
  27604. Width = 131
  27605. TabIndex = 15
  27606. Name = "lblProgress"
  27607. checkbox
  27608. checkbox
  27609. chkSavePDF
  27610. frmSettings.PF.PageOutput
  27611. Top = 67
  27612. Left = 25
  27613. Height = 17
  27614. Width = 89
  27615. AutoSize = .T.
  27616. Alignment = 0
  27617. BackStyle = 0
  27618. Caption = "Save as PDF"
  27619. TabIndex = 2
  27620. Name = "chkSavePDF"
  27621. checkbox
  27622. checkbox
  27623. chkSaveRTF
  27624. frmSettings.PF.PageOutput
  27625. Top = 99
  27626. Left = 25
  27627. Height = 17
  27628. Width = 88
  27629. AutoSize = .T.
  27630. Alignment = 0
  27631. BackStyle = 0
  27632. Caption = "Save as RTF"
  27633. TabIndex = 3
  27634. Name = "chkSaveRTF"
  27635. checkbox
  27636. checkbox
  27637. chkSaveHTML
  27638. frmSettings.PF.PageOutput
  27639. Top = 131
  27640. Left = 25
  27641. Height = 17
  27642. Width = 97
  27643. AutoSize = .T.
  27644. Alignment = 0
  27645. BackStyle = 0
  27646. Caption = "Save as HTML"
  27647. TabIndex = 4
  27648. Name = "chkSaveHTML"
  27649. checkbox
  27650. checkbox
  27651. chkSaveXLS
  27652. frmSettings.PF.PageOutput
  27653. Top = 195
  27654. Left = 25
  27655. Height = 17
  27656. Width = 119
  27657. AutoSize = .T.
  27658. Alignment = 0
  27659. BackStyle = 0
  27660. Caption = "Save as XLS / XML"
  27661. TabIndex = 5
  27662. Name = "chkSaveXLS"
  27663. checkbox
  27664. checkbox
  27665. chkSaveImg
  27666. frmSettings.PF.PageOutput
  27667. Top = 35
  27668. Left = 25
  27669. Height = 17
  27670. Width = 100
  27671. AutoSize = .T.
  27672. Alignment = 0
  27673. BackStyle = 0
  27674. Caption = "Save as Image"
  27675. TabIndex = 1
  27676. Name = "chkSaveImg"
  27677. optiongroup
  27678. optiongroup
  27679. optXLSType
  27680. frmSettings.PF.PageOutput
  27681. ButtonCount = 2
  27682. BackStyle = 0
  27683. Value = 1
  27684. Enabled = .F.
  27685. Height = 46
  27686. Left = 219
  27687. Top = 194
  27688. Width = 120
  27689. TabIndex = 11
  27690. Name = "optXLSType"
  27691. Option1.BackStyle = 0
  27692. Option1.Caption = "XLS Listener"
  27693. Option1.Value = 1
  27694. Option1.Height = 17
  27695. Option1.Left = 5
  27696. Option1.Top = 5
  27697. Option1.Width = 88
  27698. Option1.AutoSize = .T.
  27699. Option1.Name = "Option1"
  27700. Option2.BackStyle = 0
  27701. Option2.Caption = "Plain XLS"
  27702. Option2.Height = 17
  27703. Option2.Left = 5
  27704. Option2.Top = 24
  27705. Option2.Width = 71
  27706. Option2.AutoSize = .T.
  27707. Option2.Name = "Option2"
  27708. .PROCEDURE Init
  27709. This.Visible = .F. 
  27710. ENDPROC
  27711. FontSize = 8
  27712. Format = "K"
  27713. Height = 21
  27714. Left = 213
  27715. TabIndex = 9
  27716. Top = 219
  27717. Width = 203
  27718. PasswordChar = "*"
  27719. Name = "txtMasterPwd"
  27720. frmSettings.PF.PagePDF
  27721. txtMasterPwd
  27722. textbox
  27723. label
  27724. label
  27725. lblOutputPath
  27726. frmSettings.PF.PageOutput
  27727. AutoSize = .F.
  27728. WordWrap = .T.
  27729. BackStyle = 0
  27730. Caption = "Output Path"
  27731. Height = 42
  27732. Left = 25
  27733. Top = 259
  27734. Width = 107
  27735. TabIndex = 7
  27736. Name = "lblOutputPath"
  27737. textbox
  27738. textbox
  27739. txtOutputPath
  27740. frmSettings.PF.PageOutput
  27741. sFontSize = 8
  27742. Format = "K"
  27743. Height = 23
  27744. Left = 159
  27745. TabIndex = 9
  27746. Top = 261
  27747. Width = 264
  27748. Name = "txtOutputPath"
  27749. checkbox
  27750. checkbox
  27751. chkSaveTXT
  27752. frmSettings.PF.PageOutput
  27753. Top = 227
  27754. Left = 25
  27755. Height = 17
  27756. Width = 149
  27757. AutoSize = .T.
  27758. Alignment = 0
  27759. BackStyle = 0
  27760. Caption = "Save as TXT / CSV / XL5"
  27761. TabIndex = 6
  27762. Name = "chkSaveTXT"
  27763. commandbutton
  27764. commandbutton
  27765. cmdPath
  27766. frmSettings.PF.PageOutput
  27767. aTop = 260
  27768. Left = 133
  27769. Height = 24
  27770. Width = 24
  27771. Caption = "..."
  27772. TabIndex = 8
  27773. Name = "cmdPath"
  27774. \PROCEDURE Click
  27775. LOCAL lcDir, lcNewDir
  27776. lcDir = This.Parent.TxtOutputPath.Value
  27777. * This.Parent.TxtOutputPath.Value = GETDIR(lcDir, _goHelper.GetLoc("SAVEPATH"), _goHelper.GetLoc("SAVEPATH"), 64)
  27778. lcNewDir = GETDIR(lcDir, "", _goHelper.GetLoc("SAVEPATH"), 64)
  27779. IF NOT EMPTY(lcNewDir)
  27780.     This.Parent.TxtOutputPath.Value = lcNewDir
  27781. ENDIF 
  27782. ENDPROC
  27783. textbox
  27784. AutoSize = .T.
  27785. BackStyle = 0
  27786. Caption = "Master password"
  27787. Height = 17
  27788. Left = 63
  27789. Top = 221
  27790. Width = 97
  27791. TabIndex = 20
  27792. Name = "lblMasterPwd"
  27793. frmSettings.PF.PagePDF
  27794. lblMasterPwd
  27795. label
  27796. label
  27797. frmSettings.PF.PagePDF
  27798. chkCanAddNotes
  27799. checkbox
  27800. checkbox
  27801. frmSettings.PF.PagePDF
  27802. chkCanCopy
  27803. checkbox
  27804. checkbox
  27805. chkOpenViewer
  27806. frmSettings.PF.PageOutput
  27807. Top = 299
  27808. Left = 25
  27809. Height = 17
  27810. Width = 126
  27811. AutoSize = .T.
  27812. Alignment = 0
  27813. BackStyle = 0
  27814. Caption = "Open default viewer"
  27815. TabIndex = 10
  27816. Name = "chkOpenViewer"
  27817. checkbox
  27818. checkbox
  27819. chkSaveMHT
  27820. frmSettings.PF.PageOutput
  27821. Top = 163
  27822. Left = 25
  27823. Height = 17
  27824. Width = 106
  27825. AutoSize = .T.
  27826. Alignment = 0
  27827. BackStyle = 0
  27828. Caption = "Save as MHTML"
  27829. TabIndex = 4
  27830. Name = "chkSaveMHT"
  27831. checkbox
  27832. checkbox
  27833. chkPrintPref
  27834. frmSettings.PF.PageControls
  27835. Top = 55
  27836. Left = 20
  27837. Height = 17
  27838. Width = 160
  27839. AutoSize = .T.
  27840. Alignment = 0
  27841. BackStyle = 0
  27842. Caption = "Printer preferences button"
  27843. TabIndex = 3
  27844. Name = "chkPrintPref"
  27845. checkbox
  27846. checkbox
  27847.     chkCopies
  27848. frmSettings.PF.PageControls
  27849. Top = 85
  27850. Left = 20
  27851. Height = 17
  27852. Width = 98
  27853. AutoSize = .T.
  27854. Alignment = 0
  27855. BackStyle = 0
  27856. Caption = "Copies control"
  27857. TabIndex = 5
  27858. Name = "chkCopies"
  27859. checkbox
  27860. checkbox
  27861. chkSaveToFile
  27862. frmSettings.PF.PageControls
  27863. Top = 115
  27864. Left = 20
  27865. Height = 17
  27866. Width = 114
  27867. AutoSize = .T.
  27868. Alignment = 0
  27869. BackStyle = 0
  27870. Caption = "Save to file button"
  27871. TabIndex = 6
  27872. Name = "chkSaveToFile"
  27873. checkbox
  27874. checkbox
  27875. chkAvailPrinters
  27876. frmSettings.PF.PageControls
  27877. Top = 145
  27878. Left = 20
  27879. Height = 17
  27880. Width = 131
  27881. AutoSize = .T.
  27882. Alignment = 0
  27883. BackStyle = 0
  27884. Caption = "Available printers list"
  27885. TabIndex = 7
  27886. Name = "chkAvailPrinters"
  27887. checkbox
  27888. checkbox
  27889. chkSettings
  27890. frmSettings.PF.PageControls
  27891. Top = 265
  27892. Left = 20
  27893. Height = 17
  27894. Width = 100
  27895. AutoSize = .T.
  27896. Alignment = 0
  27897. BackStyle = 0
  27898. Caption = "Settings button"
  27899. TabIndex = 15
  27900. Visible = .F.
  27901. Name = "chkSettings"
  27902. checkbox
  27903. checkbox
  27904. chkSendEmail
  27905. frmSettings.PF.PageControls
  27906. Top = 175
  27907. Left = 20
  27908. Height = 17
  27909. Width = 132
  27910. AutoSize = .T.
  27911. Alignment = 0
  27912. BackStyle = 0
  27913. Caption = "Send to Email button"
  27914. TabIndex = 8
  27915. Name = "chkSendEmail"
  27916. checkbox
  27917. checkbox
  27918. chkMiniatures
  27919. frmSettings.PF.PageControls
  27920. Top = 205
  27921. Left = 20
  27922. Height = 17
  27923. Width = 112
  27924. AutoSize = .T.
  27925. Alignment = 0
  27926. BackStyle = 0
  27927. Caption = "Miniatures button"
  27928. TabIndex = 9
  27929. Name = "chkMiniatures"
  27930. combobox
  27931. combobox
  27932. cmbBtnSize
  27933. frmSettings.PF.PageControls
  27934. qRowSourceType = 0
  27935. Height = 24
  27936. Left = 251
  27937. Style = 2
  27938. TabIndex = 2
  27939. Top = 17
  27940. Width = 175
  27941. Name = "cmbBtnSize"
  27942. qPROCEDURE Init
  27943. WITH This
  27944.     .AddItem("Small (16x16 pixels)")
  27945.     .AddItem("Big (32x32 pixels)")
  27946. ENDWITH
  27947. ENDPROC
  27948. Top = 344
  27949. Left = 64
  27950. Height = 17
  27951. Width = 105
  27952. AutoSize = .T.
  27953. Alignment = 0
  27954. BackStyle = 0
  27955. Caption = "Allow add notes"
  27956. TabIndex = 14
  27957. Name = "chkCanAddNotes"
  27958. checkbox
  27959. checkbox
  27960. frmSettings.PF.PagePDF
  27961. chkCanEdit
  27962. checkbox
  27963. label
  27964. label
  27965. label
  27966. lblBtnSize
  27967. frmSettings.PF.PageControls
  27968. AutoSize = .T.
  27969. BackStyle = 0
  27970. Caption = "Size of buttons"
  27971. Height = 17
  27972. Left = 20
  27973. Top = 22
  27974. Width = 82
  27975. TabIndex = 1
  27976. Name = "lblBtnSize"
  27977. checkbox
  27978. checkbox
  27979.     chkSearch
  27980. frmSettings.PF.PageControls
  27981. Top = 235
  27982. Left = 20
  27983. Height = 17
  27984. Width = 94
  27985. AutoSize = .T.
  27986. Alignment = 0
  27987. BackStyle = 0
  27988. Caption = "Search button"
  27989. TabIndex = 12
  27990. Visible = .T.
  27991. Name = "chkSearch"
  27992. combobox
  27993. combobox
  27994. cmbPrPrefType
  27995. frmSettings.PF.PageControls
  27996. tRowSourceType = 0
  27997. Height = 24
  27998. Left = 251
  27999. Style = 2
  28000. TabIndex = 4
  28001. Top = 52
  28002. Width = 175
  28003. Name = "cmbPrPrefType"
  28004. PROCEDURE Init
  28005. WITH This
  28006.     .AddItem("Global printer prompt options")
  28007.     .AddItem("Setup property sheet for current printer")
  28008. ENDWITH
  28009. ENDPROC
  28010. Top = 320
  28011. Left = 64
  28012. Height = 17
  28013. Width = 75
  28014. AutoSize = .T.
  28015. Alignment = 0
  28016. BackStyle = 0
  28017. Caption = "Allow copy"
  28018. TabIndex = 13
  28019. Name = "chkCanCopy"
  28020. checkbox
  28021. frmSettings.PF.PagePDF
  28022. chkCanPrint
  28023. checkbox
  28024. checkbox
  28025. frmSettings.PF.PagePDF
  28026. cntEncryptPDF
  28027. spinner
  28028. spinner
  28029. spnSearchPages
  28030. frmSettings.PF.PageControls
  28031. Height = 24
  28032. Increment =   1.00
  28033. InputMask = "999999"
  28034. KeyboardHighValue = 999999
  28035. KeyboardLowValue = -1
  28036. Left = 369
  28037. SpinnerHighValue = 999999.00
  28038. SpinnerLowValue =  -1.00
  28039. TabIndex = 14
  28040. Top = 235
  28041. Width = 57
  28042. Format = "999999"
  28043. Value = -1
  28044. Name = "spnSearchPages"
  28045. label
  28046. label
  28047. lblSearchPages
  28048. frmSettings.PF.PageControls
  28049. AutoSize = .F.
  28050. WordWrap = .T.
  28051. BackStyle = 0
  28052. Caption = "Max. Search pages"
  28053. Height = 38
  28054. Left = 202
  28055. Top = 236
  28056. Width = 149
  28057. TabIndex = 13
  28058. Name = "lblSearchPages"
  28059. label
  28060. label
  28061. lblMiniatures
  28062. frmSettings.PF.PageControls
  28063. AutoSize = .F.
  28064. BackStyle = 0
  28065. Caption = "Miniatures per page"
  28066. Height = 31
  28067. Left = 202
  28068. Top = 207
  28069. Width = 157
  28070. TabIndex = 10
  28071. Name = "lblMiniatures"
  28072. spinner
  28073. spinner
  28074. spnMiniatures
  28075. frmSettings.PF.PageControls
  28076. Height = 24
  28077. KeyboardHighValue = 64
  28078. KeyboardLowValue = 1
  28079. Left = 369
  28080. SpinnerHighValue =  64.00
  28081. SpinnerLowValue =   1.00
  28082. TabIndex = 11
  28083. Top = 202
  28084. Width = 57
  28085. Value = 0
  28086. Name = "spnMiniatures"
  28087.     container
  28088.     container
  28089. cntEncryptPDF
  28090. frmSettings.PF.PageEmail
  28091. rTop = 149
  28092. Left = 28
  28093. Width = 397
  28094. Height = 191
  28095. Enabled = .F.
  28096. TabIndex = 17
  28097. Style = 3
  28098. Name = "cntEncryptPDF"
  28099. label
  28100. label
  28101. lblSMTPserver
  28102. frmSettings.PF.PageEmail
  28103. AutoSize = .T.
  28104. BackStyle = 0
  28105. Caption = "SMTP server"
  28106. Height = 17
  28107. Left = 38
  28108. Top = 159
  28109. Width = 71
  28110. TabIndex = 13
  28111. Name = "lblSMTPserver"
  28112. label
  28113. label
  28114. lblLogin
  28115. frmSettings.PF.PageEmail
  28116. AutoSize = .T.
  28117. BackStyle = 0
  28118. Caption = "Login"
  28119. Height = 17
  28120. Left = 38
  28121. Top = 189
  28122. Width = 33
  28123. TabIndex = 14
  28124. Name = "lblLogin"
  28125. label
  28126. label
  28127. lblPassword
  28128. frmSettings.PF.PageEmail
  28129. AutoSize = .T.
  28130. BackStyle = 0
  28131. Caption = "Password"
  28132. Height = 17
  28133. Left = 38
  28134. Top = 221
  28135. Width = 58
  28136. TabIndex = 15
  28137. Name = "lblPassword"
  28138. label
  28139. label
  28140. lblCDOsettings
  28141. frmSettings.PF.PageEmail
  28142. AutoSize = .T.
  28143. BackStyle = 0
  28144. Caption = "CDO email settings"
  28145. Height = 17
  28146. Left = 11
  28147. Top = 125
  28148. Width = 110
  28149. TabIndex = 16
  28150. Name = "lblCDOsettings"
  28151. textbox
  28152. textbox
  28153. txtSMTP
  28154. frmSettings.PF.PageEmail
  28155. _Format = "K"
  28156. Height = 23
  28157. Left = 165
  28158. TabIndex = 4
  28159. Top = 159
  28160. Width = 254
  28161. Name = "txtSMTP"
  28162. textbox
  28163. textbox
  28164. txtLogin
  28165. frmSettings.PF.PageEmail
  28166. `Format = "K"
  28167. Height = 23
  28168. Left = 165
  28169. TabIndex = 5
  28170. Top = 189
  28171. Width = 254
  28172. Name = "txtLogin"
  28173. textbox
  28174. textbox
  28175. txtPassword
  28176. frmSettings.PF.PageEmail
  28177. wFormat = "K"
  28178. Height = 23
  28179. Left = 165
  28180. TabIndex = 6
  28181. Top = 219
  28182. Width = 254
  28183. PasswordChar = "*"
  28184. Name = "txtPassword"
  28185. label
  28186. label
  28187. lblSMTPport
  28188. frmSettings.PF.PageEmail
  28189. AutoSize = .T.
  28190. BackStyle = 0
  28191. Caption = "SMTP port"
  28192. Height = 17
  28193. Left = 38
  28194. Top = 249
  28195. Width = 58
  28196. TabIndex = 18
  28197. Name = "lblSMTPport"
  28198. textbox
  28199. textbox
  28200. txtPort
  28201. frmSettings.PF.PageEmail
  28202. ^Format = "K"
  28203. Height = 23
  28204. Left = 165
  28205. TabIndex = 7
  28206. Top = 248
  28207. Width = 44
  28208. Name = "txtPort"
  28209. checkbox
  28210. checkbox
  28211.     chkUseSSL
  28212. frmSettings.PF.PageEmail
  28213. Top = 249
  28214. Left = 216
  28215. Height = 17
  28216. Width = 67
  28217. AutoSize = .T.
  28218. Alignment = 0
  28219. BackStyle = 0
  28220. Caption = "Use SSL"
  28221. TabIndex = 8
  28222. Name = "chkUseSSL"
  28223. combobox
  28224. combobox
  28225. cmbEmailType
  28226. frmSettings.PF.PageEmail
  28227. sRowSourceType = 0
  28228. Height = 24
  28229. Left = 164
  28230. Style = 2
  28231. TabIndex = 1
  28232. Top = 10
  28233. Width = 147
  28234. Name = "cmbEmailType"
  28235. CPROCEDURE Init
  28236. This.AddItem("MAPI")
  28237. This.AddItem("CDO - HTML")
  28238. This.AddItem("CDO - TXT")
  28239. This.AddItem("Custom procedure")
  28240. This.AddItem("MAPI Alternative")
  28241. * This.AddItem("MAPI Alternative 2")
  28242. * This.ListItemId = 1
  28243. * nEmailMode && 1 = MAPI, 2 = CDOSYS HTML, 3 = CDOSYS plain text, 4 = Custom procedure
  28244. ENDPROC
  28245. Top = 296
  28246. Left = 64
  28247. Height = 17
  28248. Width = 70
  28249. AutoSize = .T.
  28250. Alignment = 0
  28251. BackStyle = 0
  28252. Caption = "Allow edit"
  28253. TabIndex = 12
  28254. Name = "chkCanEdit"
  28255. Top = 272
  28256. Left = 64
  28257. Height = 17
  28258. Width = 91
  28259. AutoSize = .T.
  28260. Alignment = 0
  28261. BackStyle = 0
  28262. Caption = "Allow printing"
  28263. TabIndex = 11
  28264. Name = "chkCanPrint"
  28265. label
  28266. label
  28267. lblEmailMode
  28268. frmSettings.PF.PageEmail
  28269. AutoSize = .T.
  28270. BackStyle = 0
  28271. Caption = "Email mode"
  28272. Height = 17
  28273. Left = 13
  28274. Top = 10
  28275. Width = 69
  28276. TabIndex = 19
  28277. Name = "lblEmailMode"
  28278. label
  28279. label
  28280.     lblSender
  28281. frmSettings.PF.PageEmail
  28282. AutoSize = .T.
  28283. BackStyle = 0
  28284. Caption = "Sender"
  28285. Height = 17
  28286. Left = 38
  28287. Top = 278
  28288. Width = 42
  28289. TabIndex = 20
  28290. Name = "lblSender"
  28291. textbox
  28292. textbox
  28293. txtFrom
  28294. frmSettings.PF.PageEmail
  28295. _Format = "K"
  28296. Height = 23
  28297. Left = 165
  28298. TabIndex = 9
  28299. Top = 277
  28300. Width = 254
  28301. Name = "txtFrom"
  28302. combobox
  28303. combobox
  28304.     cmbAttach
  28305. frmSettings.PF.PageEmail
  28306. pRowSourceType = 0
  28307. Height = 24
  28308. Left = 164
  28309. Style = 2
  28310. TabIndex = 2
  28311. Top = 44
  28312. Width = 147
  28313. Name = "cmbAttach"
  28314. PROCEDURE Init
  28315. This.AddItem("PDF")
  28316. This.AddItem("RTF")     
  28317. This.AddItem("XLS")
  28318. This.AddItem("XML")
  28319. This.AddItem("HTML")
  28320. This.AddItem("TIF")
  28321. ENDPROC
  28322. rTop = 211
  28323. Left = 51
  28324. Width = 372
  28325. Height = 157
  28326. Enabled = .F.
  28327. TabIndex = 22
  28328. Style = 3
  28329. Name = "cntEncryptPDF"
  28330.     container
  28331.     container
  28332. AutoSize = .T.
  28333. BackStyle = 0
  28334. Caption = "Page mode"
  28335. Height = 17
  28336. Left = 12
  28337. Top = 38
  28338. Width = 66
  28339. TabIndex = 15
  28340. Name = "lblPageMode"
  28341. lblPageMode
  28342. label
  28343. label
  28344. lblAttachmentType
  28345. frmSettings.PF.PageEmail
  28346. AutoSize = .T.
  28347. BackStyle = 0
  28348. Caption = "Attachment type"
  28349. Height = 17
  28350. Left = 13
  28351. Top = 44
  28352. Width = 88
  28353. TabIndex = 21
  28354. Name = "lblAttachmentType"
  28355. checkbox
  28356. checkbox
  28357. chkAutoEmail
  28358. frmSettings.PF.PageEmail
  28359. Top = 77
  28360. Left = 12
  28361. Height = 17
  28362. Width = 195
  28363. AutoSize = .T.
  28364. Alignment = 0
  28365. BackStyle = 0
  28366. Caption = "Automatically generate email file"
  28367. TabIndex = 3
  28368. Name = "chkAutoEmail"
  28369. label
  28370. label
  28371. lblOutputPath
  28372. frmSettings.PF.PageEmail
  28373. AutoSize = .T.
  28374. BackStyle = 0
  28375. Caption = "HTML"
  28376. Height = 17
  28377. Left = 38
  28378. Top = 308
  28379. Width = 34
  28380. TabIndex = 12
  28381. Name = "lblOutputPath"
  28382. textbox
  28383. textbox
  28384. txtHTMLfile
  28385. frmSettings.PF.PageEmail
  28386. rFontSize = 8
  28387. Format = "K"
  28388. Height = 23
  28389. Left = 165
  28390. TabIndex = 11
  28391. Top = 306
  28392. Width = 254
  28393. Name = "txtHTMLfile"
  28394. commandbutton
  28395. commandbutton
  28396. cmdPath
  28397. frmSettings.PF.PageEmail
  28398. bTop = 305
  28399. Left = 134
  28400. Height = 24
  28401. Width = 24
  28402. Caption = "..."
  28403. TabIndex = 10
  28404. Name = "cmdPath"
  28405. PROCEDURE Click
  28406. LOCAL lcDir, lcNewDir
  28407. lcDir = This.Parent.TxtHTMLfile.Value
  28408. lcNewDir = GETFILE("HTM")
  28409. IF NOT EMPTY(lcNewDir)
  28410.     This.Parent.TxtHTMLfile.Value = lcNewDir
  28411. ENDIF
  28412. ENDPROC
  28413. frmSettings.PF.PagePDF
  28414. label
  28415. FontSize = 8
  28416. RowSourceType = 0
  28417. Height = 24
  28418. Left = 163
  28419. Style = 2
  28420. TabIndex = 3
  28421. Top = 35
  28422. Width = 259
  28423. Name = "cmbPageMode"
  28424. frmSettings.PF.PagePDF
  28425. cmbPageMode
  28426. combobox
  28427. combobox
  28428. >PROCEDURE InteractiveChange
  28429. This.Parent.Activate()
  28430. ENDPROC
  28431. checkbox
  28432. checkbox
  28433. chkEmbedFonts
  28434. frmSettings.PF.PagePDF
  28435. Top = 12
  28436. Left = 12
  28437. Height = 17
  28438. Width = 88
  28439. AutoSize = .T.
  28440. Alignment = 0
  28441. BackStyle = 0
  28442. Caption = "Embed fonts"
  28443. TabIndex = 1
  28444. Name = "chkEmbedFonts"
  28445. checkbox
  28446. checkbox
  28447. chkEncrypt
  28448. frmSettings.PF.PagePDF
  28449. Top = 191
  28450. Left = 12
  28451. Height = 17
  28452. Width = 116
  28453. AutoSize = .T.
  28454. Alignment = 0
  28455. BackStyle = 0
  28456. Caption = "Encrypt document"
  28457. TabIndex = 8
  28458. Name = "chkEncrypt"
  28459. 9PROCEDURE Init
  28460. This.AddItem("Normal view")
  28461. * This.AddItem("Outlines pane")
  28462. This.AddItem("Thumbnails pane")
  28463. && 0 = Normal view, 1 = Show the outlines pane, 2 = Show the thumbnails pane
  28464. * This.ListItemId = 1
  28465. * nEmailMode && 1 = MAPI, 2 = CDOSYS HTML, 3 = CDOSYS plain text, 4 = Custom procedure
  28466. ENDPROC
  28467. CHECKBOX
  28468. Could not locate the property '
  28469. ' in the configuration file.
  28470. The settings file will be updated.
  28471. Updating settings table
  28472. fp_Settings&
  28473. FP_SettingsW
  28474. FP_Settings
  28475. FP_SettingsW
  28476. FP_SETTINGS
  28477. FoxyPreviewer_Settings.dbf
  28478. _goHelper.
  28479. Value
  28480. FP_Settings.
  28481. Value
  28482. nAdjust
  28483. nAdjust
  28484. cProperty
  28485. nRecCO
  28486. Related property: '
  28487. TOOBJECT
  28488. TCPROPERTY
  28489. TNADJUST
  28490. LCPROP
  28491. LCTYPE
  28492. LUVALUE
  28493. FP_SETTINGS
  28494. PROPERTY
  28495. LCFILE0
  28496. LCUSERFILE    
  28497. _GOHELPER
  28498. _SETTINGSFILE
  28499. ADDPROPERTY
  28500. VALUE
  28501. NADJUST    
  28502. STARTMODE
  28503. TOOLTIPTEXT
  28504. COMBOBOX
  28505. nAdjust
  28506. cValue
  28507. FP_Settings
  28508. FP_Settings
  28509. FP_Settings
  28510. Missing: 
  28511. FP_Settings
  28512. cLanguage
  28513. FP_Settings
  28514. cSMTPPassword
  28515. LNPG    
  28516. LOCONTROL
  28517. LCPROP
  28518. LCTYPE
  28519. LUVALUE
  28520. THISFORM
  28521. PAGECOUNT
  28522. PAGES
  28523. CONTROLS    
  28524. CPROPERTY
  28525. CVALUE
  28526. VALUE
  28527. FP_SETTINGS
  28528. LVALUE
  28529. PROPERTY
  28530. NVALUE
  28531. NADJUST
  28532. PAGEGENERAL
  28533. LCLANG
  28534. CMBLANGUAGE    
  28535. PAGEEMAIL
  28536. LCPASS    
  28537. _GOHELPER    
  28538. DOENCRYPT
  28539. TXTPASSWORD&
  28540. BADSMTP
  28541. CONTINUE
  28542. BADSETUP
  28543. MASTANDUSR
  28544. CONTINUE
  28545. BADSETUP
  28546. PAGEEMAIL
  28547. CMBEMAILTYPE
  28548. VALUE
  28549. TXTSMTP
  28550. TXTLOGIN
  28551. TXTPASSWORD
  28552. TXTPORT
  28553. TXTFROM    
  28554. _GOHELPER
  28555. GETLOC
  28556. PAGEPDF
  28557. CHKENCRYPT
  28558. TXTMASTERPWD
  28559. TXTUSERPWD
  28560. PAGEGENERAL
  28561. LNINDEX
  28562. THISFORM
  28563. CMBLANGUAGE    
  28564. LISTINDEX    
  28565. CLANGUAGE
  28566. _ALANGUAGES;
  28567. EXCEPTION
  28568.    PV 
  28569. GOTOPG_OK
  28570. CANCEL
  28571. SETUPTITLE
  28572. GENERAL
  28573. ZOOMLEVEL
  28574. CANVASCNT
  28575. DOCKPOSITI
  28576. CUSLANGUAG
  28577. TBARVISIBL
  28578. WNDSTATE
  28579. PROGRESS
  28580. QUIETMODE
  28581. COMBOBOX
  28582. DEFAULT
  28583. WINPGBAR
  28584. COMBOBOX
  28585. VISIBLE
  28586. INVISIBLE
  28587. USERESOURC
  28588. COMBOBOX
  28589. UNDOCKED
  28590. TBONTOP
  28591. TBONLEFT
  28592. TBONRIGHT
  28593. TBONBOTTOM
  28594. USERESOURC
  28595. COMBOBOX
  28596. NORMAL
  28597. MINIMIZED
  28598. MAXIMIZED
  28599. COMBOBOX
  28600. ONEPGMENU
  28601. TWOPGMENU
  28602. FOURPGMENU
  28603. COMBOBOX
  28604. CBOZOOMWHO
  28605. CBOZOOMPGW
  28606. CONTROLS
  28607. BUTTONSIZE
  28608. SMALL
  28609. PRGENERAL
  28610. PRCONFIG
  28611. AVAILABLEP
  28612. COPIES
  28613. MENUPROOF
  28614. MINIPERPG
  28615. PRINTINGPR
  28616. SAVEREPORT
  28617. SENDTOEMAI
  28618. Setup
  28619. MAXSEARCH
  28620. OUTPUT
  28621. SAVEASHTML
  28622. SAVEASMHT
  28623. SAVEASIMAG
  28624. SAVEASPDF
  28625. SAVEASRTF
  28626. SAVEASXLS
  28627. SAVEASTXT
  28628. SAVEPATH
  28629. OPENVIEWER
  28630. EMAIL
  28631. ATTACHTYPE
  28632. CDOSETUP
  28633. EMAILMODE
  28634. LOGIN
  28635. PASSWORD
  28636. SENDER
  28637. SMTPPORT
  28638. SMTPSERVER
  28639. AUTOEMAIL
  28640. USESSL
  28641. COMBOBOX
  28642. CUSTOMPROC
  28643. EMBEDFONTS
  28644. PDFASIMAGE
  28645. PAGEMODE
  28646. NORMALVIEW
  28647. THUMBSPANE
  28648. PDFAUTHOR
  28649. PDFTITLE
  28650. SYMBBARCOD
  28651. SYMBBARTIP
  28652. SYMBBARTIP
  28653. PDFFONT
  28654. ENCRYPTDOC
  28655. MASTERPWD
  28656. USERPWD
  28657. CANPRINT
  28658. CANEDIT
  28659. CANCOPY
  28660. CANADDNOTE
  28661. WKSEXT
  28662. XML2XLS
  28663. RPTHEADER
  28664. RPTFOOTER
  28665. HIDEPAGENO
  28666. XLALIGNLEF
  28667. LOEXC
  28668. LCVERSIONTEXT
  28669. LCPREVIEWVERSION
  28670. GETVFPVERSION    
  28671. _GOHELPER
  28672. _PREVIEWVERSION
  28673. LBLVERSION
  28674. CAPTION
  28675. CVERSION
  28676. CMDOK
  28677. GETLOC    
  28678. CMDCANCEL
  28679. PAGEGENERAL
  28680. LBLZOOM
  28681. LBLCANVASCNT
  28682. LBLDOCKPOSITION
  28683. LBLLANGUAGE
  28684. LBLTOOLBARVISIBILITY
  28685. LBLWNDSTATE
  28686. LBLPROGRESS
  28687. CHKQUIET
  28688. CMBPROGRESS
  28689. LISTITEM
  28690. CMBTBRVISIBILITY
  28691. CMBDOCK
  28692. CMBWNDSTATE
  28693. CMBCANVASCNT
  28694. CMBZOOM
  28695. PAGECONTROLS
  28696. LBLBTNSIZE
  28697. CMBBTNSIZE
  28698. CMBPRPREFTYPE
  28699. CHKAVAILPRINTERS    
  28700. CHKCOPIES
  28701. CHKMINIATURES
  28702. LBLMINIATURES
  28703. CHKPRINTPREF
  28704. CHKSAVETOFILE
  28705. CHKSENDEMAIL
  28706. CHKSETTINGS    
  28707. CHKSEARCH
  28708. LBLSEARCHPAGES
  28709. PAGEOUTPUT
  28710. CHKSAVEHTML
  28711. CHKSAVEMHT
  28712. CHKSAVEIMG
  28713. CHKSAVEPDF
  28714. CHKSAVERTF
  28715. CHKSAVEXLS
  28716. CHKSAVETXT
  28717. LBLOUTPUTPATH
  28718. CHKOPENVIEWER    
  28719. PAGEEMAIL
  28720. LBLATTACHMENTTYPE
  28721. LBLCDOSETTINGS
  28722. LBLEMAILMODE
  28723. LBLLOGIN
  28724. LBLPASSWORD    
  28725. LBLSENDER
  28726. LBLSMTPPORT
  28727. LBLSMTPSERVER
  28728. CHKAUTOEMAIL    
  28729. CHKUSESSL
  28730. CMBEMAILTYPE
  28731. PAGEPDF
  28732. CHKEMBEDFONTS
  28733. CHKPDFASIMAGE
  28734. LBLPAGEMODE
  28735. CMBPAGEMODE
  28736. LBLPDFAUTHOR
  28737. LBLPDFTITLE    
  28738. LBLSYMBOL
  28739. TOOLTIPTEXT
  28740. TXTPDFSYMBOLLIST
  28741. LBLDEFAULTFONT
  28742. CHKENCRYPT
  28743. LBLMASTERPWD
  28744. LBLUSERPWD
  28745. CHKCANPRINT
  28746. CHKCANEDIT
  28747. CHKCANCOPY
  28748. CHKCANADDNOTES
  28749. PAGEXLS
  28750. LBLEXCELEXTENSION
  28751. CHKCONVERTTOPUREXLS
  28752. CHKREPEATHEADERS
  28753. CHKREPEATFOOTERS
  28754. CHKHIDEPAGENO
  28755. CHKCELLALIGNLEFT,
  28756. _goHelper._oLang.
  28757. TCSTRING
  28758. PageXLS
  28759. PagePDF
  28760. PageEmail
  28761. PageOutput
  28762. PageControls
  28763. PageGeneral
  28764. OFOXYPREVIEWER
  28765. OSETTINGSDLG
  28766. PAGEGENERAL
  28767. ENABLED
  28768. LENABLETABGENERAL
  28769. PAGECONTROLS
  28770. LENABLETABCONTROLS
  28771. PAGEOUTPUT
  28772. LENABLETABOUTPUT    
  28773. PAGEEMAIL
  28774. LENABLETABEMAIL
  28775. PAGEPDF
  28776. LENABLETABPDF
  28777. PAGEXLS
  28778. LENABLETABXLS
  28779. LSHOWTABXLS
  28780. REMOVEOBJECT
  28781. LSHOWTABPDF
  28782. CHKEMBEDFONTS
  28783. LENABLECHKEMBEDFONTS
  28784. CHKPDFASIMAGE
  28785. LENABLECHKPDFASIMAGE
  28786. LSHOWTABEMAIL
  28787. CMBEMAILTYPE
  28788. LENABLECMBEMAILTYPE    
  28789. CMBATTACH
  28790. LENABLECMBATTACHMENTTYPE
  28791. LSHOWTABOUTPUT
  28792. CHKSAVEIMG
  28793. LENABLECHKSAVEASIMAGE
  28794. CHKSAVEPDF
  28795. LENABLECHKSAVEASPDF
  28796. CHKSAVERTF
  28797. LENABLECHKSAVEASRTF
  28798. CHKSAVEHTML
  28799. LENABLECHKSAVEASHTML
  28800. CHKSAVEMHT
  28801. LENABLECHKSAVEASMHT
  28802. CHKSAVEXLS
  28803. LENABLECHKSAVEASXLS
  28804. OPTXLSTYPE
  28805. CHKSAVETXT
  28806. LENABLECHKSAVEASTXT
  28807. VISIBLE    
  28808. _GOHELPER    
  28809. LEXTENDED
  28810. LSHOWTABCONTROLS
  28811. CHKPRINTPREF
  28812. LENABLECHKPRINTPREF
  28813. CMBPRPREFTYPE
  28814. LENABLECMBPRINTPREFTYPE    
  28815. CHKCOPIES
  28816. LENABLECHKCOPIES
  28817. CHKSAVETOFILE
  28818. LENABLECHKSAVETOFILE
  28819. CHKAVAILPRINTERS
  28820. LENABLECHKPRINTERS
  28821. CHKSENDEMAIL
  28822. LENABLECHKEMAIL
  28823. CHKMINIATURES
  28824. LENABLECHKMINIATURES
  28825. SPNMINIATURES    
  28826. CHKSEARCH
  28827. LENABLECHKSEARCH
  28828. SPNSEARCHPAGES
  28829. CHKSETTINGS
  28830. LENABLECHKSETTINGS
  28831. LSHOWTABGENERAL
  28832. CMBLANGUAGE
  28833. LSHOWLANGUAGE
  28834. LBLLANGUAGE
  28835. LENABLELANGUAGE
  28836. LOEXCT
  28837. nSelectCW
  28838. nDataSessionC
  28839. Datasessionv
  28840. THISFORM
  28841. ADDPROPERTYS
  28842. FP_SettingsW
  28843. THIS    
  28844. INPREVIEW    
  28845. _GOHELPER
  28846. THISFORM
  28847. NDATASESSION
  28848. NSELECTq
  28849. PreviewHelperC
  28850. FoxyPreviewer.Prg
  28851. EXCEPTION
  28852. FoxyPreviewer_Settings.dbf
  28853. Could not load the settings file.C
  28854. Make sure to delete the file 'FoxyPreviewer_Settings.dbf'
  28855. and run a report again using the previewer to generate the settings file
  28856. Error loading settings
  28857. nShowToolBar
  28858. nDockType
  28859. nCanvasCount
  28860. nZoomLevel
  28861. nWindowState
  28862. lQuietMode
  28863. nThermType
  28864. nButtonSize
  28865. nPrinterPropType
  28866. lShowPrinters
  28867. lShowCopies
  28868. lPrinterPref
  28869. lSaveToFile
  28870. lShowSetup
  28871. lShowMiniatures
  28872. nMaxMiniatureDisplay
  28873. lSendToEmail
  28874. lShowSearch
  28875. nSearchPages
  28876. lSaveAsHTML
  28877. lSaveAsMHT
  28878. lSaveAsImage
  28879. lSaveAsPDF
  28880. lSaveAsRTF
  28881. lSaveAsXLS
  28882. lSaveAsTXT
  28883. cOutputPath
  28884. lOpenViewer
  28885. nEmailMode
  28886. cEmailType
  28887. lEmailAuto
  28888. cSMTPUserName
  28889. cSMTPPassword
  28890. nSMTPPort
  28891. cSMTPServer
  28892. lSMTPUseSSL
  28893. cEmailFrom
  28894. cEmailBodyFile
  28895. COMBOBOX
  28896. \HTML
  28897. lPDFEmbedFonts
  28898. lPDFasImage
  28899. lPDFEncryptDocument
  28900. nPDFPageMode
  28901. lPDFCanAddNotes
  28902. lPDFCanCopy
  28903. lPDFCanEdit
  28904. lPDFCanPrint
  28905. cPDFMasterPassword
  28906. cPDFUserPassword
  28907. cPDFAuthor
  28908. cPDFtitle
  28909. cPDFSymbolFontsList
  28910. cPDFDefaultFont
  28911. cExcelDefaultExtension
  28912. lExcelConvertToXLS
  28913. lExcelRepeatHeaders
  28914. lExcelRepeatFooters
  28915. lExcelHidePageNo
  28916. lExcelAlignLeft
  28917. STARTMODE
  28918. PAGECOUNT    
  28919. _GOHELPER    
  28920. LEXTENDED    
  28921. INPREVIEW
  28922. ICON    
  28923. CFORMICON
  28924. LCUSERFILE
  28925. LLRETURN
  28926. _SETTINGSFILE
  28927. FP_SETTINGS
  28928. ERRORNO
  28929. THISFORM
  28930. NDATASESSION
  28931. NSELECT
  28932. ENABLECONTROLS
  28933. PAGEGENERAL
  28934. CMBLANGUAGE
  28935. LISTITEMID
  28936. _LANGINDEX
  28937. UPDATECONTROL
  28938. CMBTBRVISIBILITY
  28939. CMBDOCK
  28940. CMBCANVASCNT
  28941. CMBZOOM
  28942. CMBWNDSTATE
  28943. CHKQUIET
  28944. CMBPROGRESS
  28945. PAGECONTROLS
  28946. CMBBTNSIZE
  28947. CMBPRPREFTYPE
  28948. CHKAVAILPRINTERS    
  28949. CHKCOPIES
  28950. CHKPRINTPREF
  28951. CHKSAVETOFILE
  28952. CHKSETTINGS
  28953. CHKMINIATURES
  28954. SPNMINIATURES
  28955. CHKSENDEMAIL    
  28956. CHKSEARCH
  28957. SPNSEARCHPAGES
  28958. PAGEOUTPUT
  28959. CHKSAVEHTML
  28960. CHKSAVEMHT
  28961. CHKSAVEIMG
  28962. CHKSAVEPDF
  28963. CHKSAVERTF
  28964. CHKSAVEXLS
  28965. CHKSAVETXT
  28966. TXTOUTPUTPATH
  28967. CHKOPENVIEWER    
  28968. PAGEEMAIL
  28969. CMBEMAILTYPE    
  28970. CMBATTACH
  28971. CHKAUTOEMAIL
  28972. TXTLOGIN
  28973. TXTPASSWORD
  28974. VALUE    
  28975. DODECRYPT
  28976. TXTPORT
  28977. TXTSMTP    
  28978. CHKUSESSL
  28979. TXTFROM
  28980. TXTHTMLFILE
  28981. LISTITEM
  28982. PAGEPDF
  28983. CHKEMBEDFONTS
  28984. CHKPDFASIMAGE
  28985. CHKENCRYPT
  28986. CMBPAGEMODE
  28987. CHKCANADDNOTES
  28988. CHKCANCOPY
  28989. CHKCANEDIT
  28990. CHKCANPRINT
  28991. TXTMASTERPWD
  28992. TXTUSERPWD
  28993. TXTPDFAUTHOR
  28994. TXTPDFTITLE
  28995. TXTPDFSYMBOLLIST
  28996. CMBDEFAULTFONT
  28997. PAGEXLS
  28998. CMBEXCELEXTENSION
  28999. CHKCONVERTTOPUREXLS
  29000. CHKREPEATHEADERS
  29001. CHKREPEATFOOTERS
  29002. CHKHIDEPAGENO
  29003. CHKCELLALIGNLEFT
  29004. SETLANGUAGE
  29005. updatecontrol,
  29006. updatetable
  29007. validate
  29008. setlanguage
  29009. getloc
  29010. enablecontrols
  29011. Destroy
  29012. PLATFORM
  29013. UNIQUEID
  29014. TIMESTAMP
  29015. CLASS
  29016. CLASSLOC
  29017. BASECLASS
  29018. OBJNAME
  29019. PARENT
  29020. PROPERTIES
  29021. PROTECTED
  29022. METHODS
  29023. OBJCODE
  29024. RESERVED1
  29025. RESERVED2
  29026. RESERVED3
  29027. RESERVED4
  29028. RESERVED5
  29029. RESERVED6
  29030. RESERVED7
  29031. RESERVED8
  29032.  COMMENT Screen              
  29033.  WINDOWS _2Z911D86M1022004034
  29034.  WINDOWS _2Z911D86N1059848280
  29035.  WINDOWS _2Z911D86M1026460027
  29036.  WINDOWS _2ZD1D1IP71027520183
  29037.  WINDOWS _2Z911D86M1025136828
  29038.  WINDOWS _2Z911D86N1025136828
  29039.  WINDOWS _2Z911D86M1025136828[
  29040.  WINDOWS _2ZH1E1KNS1025136828
  29041.  WINDOWS _2ZH1E1KNT1025136828
  29042.  WINDOWS _2ZH1E1KNU1025136828l
  29043.  WINDOWS _2ZH1F6HRH1025136828B
  29044.  WINDOWS _2ZH1F6HRI1027520183
  29045.  COMMENT RESERVED            
  29046. VERSION =   3.00
  29047. dataenvironment
  29048. dataenvironment
  29049. Dataenvironment
  29050. YTop = 0
  29051. Left = 0
  29052. Width = 0
  29053. Height = 0
  29054. DataSource = .NULL.
  29055. Name = "Dataenvironment"
  29056. frmSendMail
  29057. DataSession = 2
  29058. BorderStyle = 2
  29059. Height = 400
  29060. Width = 470
  29061. Desktop = .T.
  29062. ShowWindow = 1
  29063. DoCreate = .T.
  29064. AutoCenter = .T.
  29065. Caption = "Send Email"
  29066. Closable = .F.
  29067. MaxButton = .F.
  29068. MinButton = .F.
  29069. Icon = ..\
  29070. WindowType = 1
  29071. AlwaysOnTop = .T.
  29072. AllowOutput = .F.
  29073. _memberdata = <VFPData><memberdata name="updatecontrol" display="UpdateControl"/><memberdata name="updatetable" display="UpdateTable"/></VFPData>
  29074. Name = "frmSendMail"
  29075. PROCEDURE Unload
  29076. RETURN Thisform.lCancelled
  29077. ENDPROC
  29078. PROCEDURE Load
  29079. SET TALK OFF
  29080. SET CONSOLE OFF 
  29081. ENDPROC
  29082. PROCEDURE Init
  29083. LPARAMETERS tcFile
  29084. Thisform.lblAttachment.Caption = JUSTFNAME(tcFile)
  29085. Thisform.AddProperty("lCancelled", .F.)
  29086.     This.Icon = _goHelper.cFormIcon
  29087. CATCH
  29088. ENDTRY
  29089.     WITH _goHelper
  29090.         This.txtDestination.Value = .cEmailTo
  29091.         This.txtSubject.Value     = .cEmailSubject
  29092.         This.edtBody.Value        =    .cEmailBody
  29093.         This.Caption            = .GetLoc("SENDEMAIL")
  29094.         This.CmdCancel.Caption  = .GetLoc("CANCEL")
  29095.         This.CmdSend.Caption    = .GetLoc("SEND")
  29096.         This.lblBody.Caption    = .GetLoc("BODY")
  29097.         This.lblSubject.Caption = .GetLoc("SUBJECT")
  29098.         This.lblTo.Caption      = .GetLoc("TO")
  29099.     ENDWITH
  29100. CATCH
  29101. ENDTRY
  29102. ENDPROC
  29103. THISFORM
  29104. LCANCELLED
  29105. RELEASE
  29106. Click,
  29107. _GOHELPER
  29108. CEMAILTO
  29109. THISFORM
  29110. TXTDESTINATION
  29111. VALUE
  29112. CEMAILSUBJECT
  29113. TXTSUBJECT
  29114. CEMAILBODY
  29115. EDTBODY
  29116. RELEASE
  29117. Click,
  29118. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  29119. nPicture = images\pr_attach.bmp
  29120. BackStyle = 0
  29121. Height = 16
  29122. Left = 62
  29123. Top = 84
  29124. Width = 16
  29125. Name = "Image1"
  29126. frmSendMail
  29127. Image1
  29128. image
  29129. image
  29130. frmSendMail
  29131. lblAttachment
  29132. label
  29133. label
  29134. frmSendMail
  29135. V_memberdata XML Metadata for customizable properties
  29136. *updatecontrol 
  29137. *updatetable 
  29138. commandbutton
  29139. commandbutton
  29140. cmdSend
  29141. frmSendMail
  29142. bTop = 360
  29143. Left = 276
  29144. Height = 27
  29145. Width = 84
  29146. Caption = "Send"
  29147. TabIndex = 5
  29148. Name = "cmdSend"
  29149. PROCEDURE Click
  29150. WITH _goHelper
  29151.     .cEmailTo      = ALLTRIM(Thisform.txtDestination.Value)
  29152.     .cEmailSubject = ALLTRIM(Thisform.txtSubject.Value)
  29153.     .cEmailBody    = Thisform.edtBody.Value
  29154. ENDWITH 
  29155. Thisform.Release()
  29156. ENDPROC
  29157. AutoSize = .T.
  29158. BackStyle = 0
  29159. Caption = "Attachment"
  29160. Height = 17
  29161. Left = 85
  29162. Top = 84
  29163. Width = 63
  29164. TabIndex = 3
  29165. Name = "lblAttachment"
  29166. QHeight = 240
  29167. Left = 87
  29168. TabIndex = 4
  29169. Top = 110
  29170. Width = 370
  29171. Name = "edtBody"
  29172. edtBody
  29173. editbox
  29174. editbox
  29175. frmSendMail
  29176. lblBody
  29177. label
  29178. label
  29179. frmSendMail
  29180. txtSubject
  29181. textbox
  29182. commandbutton
  29183. commandbutton
  29184.     cmdCancel
  29185. frmSendMail
  29186. tTop = 360
  29187. Left = 372
  29188. Height = 27
  29189. Width = 84
  29190. Cancel = .T.
  29191. Caption = "Cancel"
  29192. TabIndex = 6
  29193. Name = "cmdCancel"
  29194. IPROCEDURE Click
  29195. Thisform.lCancelled = .T.
  29196. Thisform.Release()
  29197. ENDPROC
  29198. AutoSize = .T.
  29199. BackStyle = 0
  29200. Caption = "Body:"
  29201. Height = 17
  29202. Left = 14
  29203. Top = 110
  29204. Width = 32
  29205. TabIndex = 9
  29206. Name = "lblBody"
  29207. RHeight = 23
  29208. Left = 87
  29209. TabIndex = 2
  29210. Top = 52
  29211. Width = 370
  29212. Name = "txtSubject"
  29213. textbox
  29214. label
  29215. label
  29216. lblTo
  29217. frmSendMail
  29218. |AutoSize = .T.
  29219. BackStyle = 0
  29220. Caption = "To:"
  29221. Height = 17
  29222. Left = 14
  29223. Top = 16
  29224. Width = 19
  29225. TabIndex = 7
  29226. Name = "lblTo"
  29227. textbox
  29228. textbox
  29229. txtDestination
  29230. frmSendMail
  29231. VHeight = 23
  29232. Left = 87
  29233. TabIndex = 1
  29234. Top = 16
  29235. Width = 370
  29236. Name = "txtDestination"
  29237. label
  29238. label
  29239. lblSubject
  29240. frmSendMail
  29241. AutoSize = .T.
  29242. BackStyle = 0
  29243. Caption = "Subject:"
  29244. Height = 17
  29245. Left = 14
  29246. Top = 52
  29247. Width = 46
  29248. TabIndex = 8
  29249. Name = "lblSubject"
  29250. THISFORM
  29251. LCANCELLED
  29252. lCancelled-
  29253. SENDEMAIL
  29254. CANCEL
  29255. SUBJECT
  29256. TCFILE
  29257. THISFORM
  29258. LBLATTACHMENT
  29259. CAPTION
  29260. ADDPROPERTY
  29261. ICON    
  29262. _GOHELPER    
  29263. CFORMICON
  29264. TXTDESTINATION
  29265. VALUE
  29266. CEMAILTO
  29267. TXTSUBJECT
  29268. CEMAILSUBJECT
  29269. EDTBODY
  29270. CEMAILBODY
  29271. GETLOC    
  29272. CMDCANCEL
  29273. CMDSEND
  29274. LBLBODY
  29275. LBLSUBJECT
  29276. LBLTO
  29277. Unload,
  29278. LoadU
  29279. Inith
  29280. PLATFORM
  29281. UNIQUEID
  29282. TIMESTAMP
  29283. CLASS
  29284. CLASSLOC
  29285. BASECLASS
  29286. OBJNAME
  29287. PARENT
  29288. PROPERTIES
  29289. PROTECTED
  29290. METHODS
  29291. OBJCODE
  29292. RESERVED1
  29293. RESERVED2
  29294. RESERVED3
  29295. RESERVED4
  29296. RESERVED5
  29297. RESERVED6
  29298. RESERVED7
  29299. RESERVED8
  29300.  COMMENT Class               
  29301.  WINDOWS _18E1A3AY7 822197245
  29302.  COMMENT RESERVED            
  29303.  WINDOWS _18E1A3AY7 822328842
  29304.  COMMENT RESERVED            
  29305.  WINDOWS _18E19ZCVM 822432384
  29306.  COMMENT RESERVED            
  29307.  WINDOWS _18P19LGRG 822432551
  29308.  COMMENT RESERVED            
  29309.  WINDOWS _18O1AV6J6 822434107
  29310.  COMMENT RESERVED            
  29311.  WINDOWS _18P1BYG3R 824668460
  29312.  COMMENT RESERVED            
  29313.  WINDOWS _18F0ZR1S1 826623356;
  29314.  COMMENT RESERVED            
  29315.  WINDOWS _18F0ZR1S1 826623373
  29316.  COMMENT RESERVED            
  29317.  WINDOWS _18O1ATV50 826624375
  29318.  COMMENT RESERVED            
  29319.  WINDOWS _18E0V1V1K 828065963
  29320.  COMMENT RESERVED            
  29321.  WINDOWS _19A0QGWHR 828065293
  29322.  COMMENT RESERVED            
  29323.  WINDOWS _18F0ZR1S1 829569785
  29324.  COMMENT RESERVED            
  29325.  WINDOWS _18B1CLDLZ 830372061
  29326.  COMMENT RESERVED            
  29327.  WINDOWS _19A0QEO5E 830372083
  29328.  COMMENT RESERVED            
  29329.  WINDOWS _18O18G812 830372203L
  29330.  COMMENT RESERVED            
  29331.  WINDOWS _18E18PHD71049013850
  29332.  COMMENT RESERVED            
  29333. VERSION =   3.00
  29334. gppoint
  29335. _gdiplus.vcx
  29336. gpbase
  29337. gpobject
  29338.     gdiplus.h
  29339. Class
  29340. Class
  29341. Pixels
  29342.     gdiplus.h
  29343. gpbase
  29344.     gdiplus.h
  29345. haderror
  29346. lasterrormessage
  29347. Pixels
  29348. Class
  29349. custom
  29350. gpbase
  29351. custom
  29352. ,gdiphandle
  29353. gdipstatus
  29354. gdipownsthishandle
  29355. Pixels
  29356. gpbase
  29357. gpobject
  29358. custom
  29359. _gdiplus.vcx
  29360. gpcolor
  29361.     gdiplus.h
  29362. Pixels
  29363. gppoint
  29364. _gdiplus.vcx
  29365. custom
  29366. Class
  29367. gpsolidbrush
  29368.     gdiplus.h
  29369. Pixels
  29370. 0A brush object which fills with a a solid color.
  29371. Class
  29372. gpbrush
  29373. gpsolidbrush
  29374. brushcolor Get or set color of a SolidBrush object
  29375. *create Create solid brush in given color
  29376. *brushcolor_access 
  29377. *brushcolor_assign 
  29378. custom
  29379. _gdiplus.vcx
  29380. uThe abstract base class for all GDI+ objects. Provides management of GDI+ handles and the outcome of GDI+ operations.
  29381. pEncapsulates a GDI+ color, consisting of 4 positive integers (0..255) for red, green, blue and alpha components.
  29382. gpbase
  29383. gpcolor
  29384. custom
  29385. _gdiplus.vcx
  29386. gpsize
  29387. gpbase
  29388. _gdiplus.vcx
  29389. Pixels
  29390. _gdiplus.vcx
  29391. gpgraphics
  29392. Pixels
  29393. gpbrush
  29394. gphatchbrush
  29395. Pixels
  29396.     gdiplus.h
  29397. Class
  29398.     gdiplus.h
  29399. Jgdippoint_access
  29400. gdippoint_assign
  29401. gdippointf_access
  29402. gdippointf_assign
  29403. Pixels
  29404.     gdiplus.h
  29405. gpobject
  29406. Pixels
  29407. gpstringformat
  29408. Pixels
  29409. _memberdata = <VFPData><memberdata name="brushcolor" type="property" display="BrushColor" favorites="true"/><memberdata name="create" type="method" display="Create" favorites="true"/></VFPData>
  29410. Name = "gpsolidbrush"
  29411. gppen
  29412.     gdiplus.h
  29413. Pixels
  29414.     gdiplus.h
  29415. Class
  29416. gpobject
  29417. gpstringformat
  29418. gpgraphics
  29419. gpbitmap
  29420. Class
  29421. gpfontfamily
  29422.     gdiplus.h
  29423. Class
  29424. custom
  29425. _gdiplus.vcx
  29426. 9Designates attributes shared by a group of related fonts.
  29427. gpobject
  29428. gpfontfamily
  29429. custom
  29430. _gdiplus.vcx
  29431. gpobject
  29432. _gdiplus.vcx
  29433. custom
  29434.     gdiplus.h
  29435. gpimage
  29436. gpbitmap
  29437. custom
  29438. _gdiplus.vcx
  29439. custom
  29440. custom
  29441. custom
  29442. Class
  29443. Class
  29444. gpfont
  29445. Pixels
  29446. gpimage
  29447. Object which encapsulates text layout information (such as alignment and line spacing) and display manipulations (such as ellipsis insertion and national digit substitution).
  29448. Class
  29449. gpobject
  29450. gppen
  29451. custom
  29452. Lgetencoderparamsfromstring
  29453. getencoderparamsfromarray
  29454. getencoderparaminfo
  29455.     gdiplus.h
  29456. gpbrush
  29457. Class
  29458. _gdiplus.vcx
  29459. gpobject
  29460.     gdiplus.h
  29461. VDefines a particular format for text, including font face, size, and style attributes.
  29462. Class
  29463. gpobject
  29464. gpfont
  29465. custom
  29466. _gdiplus.vcx
  29467. Dforegroundcolor Color of hatch lines
  29468. backgroundcolor Color of space between hatch lines
  29469. hatchstyle Hatch style of this brush object
  29470. *create Create solid brush in given color
  29471. *foregroundcolor_access 
  29472. *foregroundcolor_assign 
  29473. *backgroundcolor_access 
  29474. *backgroundcolor_assign 
  29475. *hatchstyle_access 
  29476. *hatchstyle_assign 
  29477.     gdiplus.h
  29478. gprectangle
  29479. Pixels
  29480. alignment Text alignment information.
  29481. formatflags Formatting Information (StringFormatFlags enumeration)
  29482. hotkeyprefix Set GpHotkeyPrefix object (write-only?)
  29483. linealignment Line alignment
  29484. trimming String trimming
  29485. *alignment_access 
  29486. *alignment_assign 
  29487. *formatflags_access 
  29488. *formatflags_assign 
  29489. *hotkeyprefix_access 
  29490. *hotkeyprefix_assign 
  29491. *linealignment_access 
  29492. *linealignment_assign 
  29493. *trimming_access 
  29494. *trimming_assign 
  29495. *getgenericdefault Get generic default string format (.NET: SystemDrawing.StringFormat.GenericDefault)
  29496. *getgenerictypographic Get generic typographic StringFormat
  29497. *create Create StringFormat with optional flags and language
  29498. 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.
  29499. 6*createfromgraphics Create from a GpGraphics object
  29500. *create Create bitmap with specified properties
  29501. *setpixel Set an individual pixel in this image to a specific colour value
  29502. *getpixel Get the colour value of an individual pixel
  29503. *setresolution Set the resolution of the bitmap, specified in dots-per-inch
  29504. Pixels
  29505. sEncapsulates a GDI+ image, and serves as the base class for specific image types (for example, the gpBitmap class).
  29506. Class
  29507.     gdiplus.h
  29508. Pixels
  29509. gpimage
  29510. \The abstract base class for all other _GDIPLUS classes. Provides some basic utility methods.
  29511. 5A pen object, which is used to draw lines and curves.
  29512. _gdiplus.vcx
  29513. gphatchbrush
  29514. gpsize
  29515. custom
  29516. gpbrush
  29517. gpbase
  29518. Class
  29519. gprectangle
  29520. gdiplus.h
  29521. gdiplus_locs.h
  29522. custom
  29523. _gdiplus.vcx
  29524. 0A brush object which fills with a hatch pattern.
  29525. Fgdiprect_access
  29526. gdiprect_assign
  29527. gdiprectf_access
  29528. gdiprectf_assign
  29529. gdiplus.h
  29530. gdiplus_locs.h
  29531. gThe abstract base class for all Brush classes (for example, the gpSolidBrush and gpHatchBrush classes).
  29532. WEncapsulates a set of four numbers that represent the location and size of a rectangle.
  29533. Fgdipsize_access
  29534. gdipsize_assign
  29535. gdipsizef_access
  29536. gdipsizef_assign
  29537. QStores an ordered pair of numbers, typically the width and height of a rectangle.
  29538. zw width value
  29539. h height value
  29540. gdipsize String representing the GDI+ Size structure (2 x 32bit integers)
  29541. gdipsizef String representing the GDI+ SizeF structure (2 x 32bit single-precision floats)
  29542. *gdipsize_access 
  29543. *gdipsize_assign 
  29544. *gdipsizef_access 
  29545. *gdipsizef_assign 
  29546. *create Set point from individual coordinates
  29547. *set Set point coordinates from individual x,y values
  29548. eEncapsulates an ordered pair of x- and y-coordinates that defines a point in a two-dimensional plane.
  29549. gdiplus.h
  29550. gdiplus_locs.h
  29551. gdiplus.h
  29552. gdiplus_locs.h
  29553. gdiplus.h
  29554. gdiplus_locs.h
  29555. gdiplus.h
  29556. gdiplus_locs.h
  29557. style Get style information for this font
  29558. unit The unit of measure used by this font
  29559. fontname Font name eg "Arial"
  29560. size Get the em size in the unit of this Font object
  29561. *create Create font using specified font family, size and style
  29562. *style_access 
  29563. *style_assign 
  29564. *unit_access 
  29565. *unit_assign 
  29566. *getheight Get line spacing for a given Graphics object (in the units of that graphics object)
  29567. *fontname_access 
  29568. *fontname_assign 
  29569. *size_access 
  29570. *size_assign 
  29571. *getheightgivendpi Get line spacing of this font, for specified DPI
  29572. 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.
  29573. fontname Font name eg "Arial"
  29574. *create Create font family with specified name
  29575. *getgenericmonospace Gets a generic monospace FontFamily 
  29576. *getgenericserif Gets a generic serif FontFamily 
  29577. *getgenericsansserif Gets a generic sans serif FontFamily 
  29578. *isstyleavailable Indicates whether the specified Font Style enumeration is available
  29579. *fontname_access 
  29580. *fontname_assign 
  29581. *getcellascent Get cell ascent in design units, of this font family in the specified  style
  29582. *getemheight Get the height in design units, of this font family in the specified  style
  29583. *getcelldescent Get cell descent in design units, of this font family in the specified  style
  29584. *getlinespacing Get line spacing in design units, of this font family in the specified  style
  29585. *getname Get name of this font family, in the specified language
  29586. TOOTHEROBJECT,
  29587. StringFromGUID2
  29588. ole32.dll
  29589. Internal error: buffer too small
  29590. TQGUID
  29591. LCUNICODESTRING
  29592. LNRESULT
  29593. STRINGFROMGUID2
  29594. OLE32
  29595. STRING
  29596. CLSIDFromString
  29597. ole32.dll
  29598. StringToGUID error code CC
  29599. LCSTRING
  29600. LCCLSID
  29601. LNRESULT
  29602. CLSIDFROMSTRING
  29603. OLE32
  29604. NUMBER
  29605. NUMBER
  29606. NUMBER
  29607. NUMBER
  29608. NUMBER
  29609. NUMBER
  29610. ARRAY
  29611. INTEGER
  29612. INTEGER
  29613. m.taArray[1,2]b
  29614. TAARRAY
  29615. TNCOLS
  29616. TNFIRSTCOL
  29617. LCSTRUCT
  29618. LNROWS
  29619. LNROW
  29620. LNCOL
  29621. LNFIRSTCOL
  29622. LNCOLSMINUSONEs
  29623. STRING
  29624. INTEGER
  29625. STRING
  29626. STRING
  29627. STRING
  29628. STRING
  29629. STRING
  29630. STRING
  29631. STRING
  29632. STRING
  29633. m.tcExprCC
  29634. TCALIAS
  29635. TNCOLS
  29636. TCEXPR1
  29637. TCEXPR2
  29638. TCEXPR3
  29639. TCEXPR4
  29640. TCEXPR5
  29641. TCEXPR6
  29642. TCEXPR7
  29643. TCEXPR8
  29644. LCSTRUCT
  29645. LNCOL
  29646. LNSAVEAREA
  29647. LNSAVERECNO
  29648. LAEXPR
  29649. NUMBER
  29650. NUMBER
  29651. VNEWVAL
  29652. ALLOWMODALMESSAGESH
  29653. VNEWVAL
  29654. QUIETONERRORH
  29655. VNEWVAL
  29656. IGNOREERRORS!
  29657. HADERROR
  29658. LASTERRORMESSAGE
  29659. HADERROR
  29660. LASTERRORMESSAGEH
  29661. VNEWVAL
  29662. APPNAME
  29663. TCCONTEXT
  29664. TCCLASSNAME
  29665. LCCLASSLIBRARY
  29666. LCMODULE
  29667. CLASSLIBRARY
  29668. OBJFACTORYHOOK
  29669. TCCONTEXT
  29670. RCCLASSNAME
  29671. RCCLASSLIBRARY
  29672. RCMODULE
  29673. INTEGER
  29674. STRING
  29675. INTEGER
  29676. error
  29677. CCCCC
  29678. error()
  29679. m.nError
  29680. program()
  29681. m.cMethod
  29682. lineno()
  29683. m.nLine
  29684. message()
  29685. m.lcMessage
  29686. message(1)
  29687. m.lcCodeLine
  29688. &lcOnError
  29689. Error:           
  29690. Method:       
  29691. Line:            
  29692. NERROR
  29693. CMETHOD
  29694. NLINE    
  29695. LCMESSAGE
  29696. LCCODELINE
  29697. HADERROR
  29698. IGNOREERRORS    
  29699. STARTMODE    
  29700. LCONERROR
  29701. LCERRORMSG
  29702. LASTERRORMESSAGE
  29703. QUIETONERROR
  29704. ALLOWMODALMESSAGES
  29705. APPNAME
  29706. clone,
  29707. guidtostringI
  29708. stringtoguid
  29709. makegdipsizef
  29710. makegdiprectf
  29711. makegdiparrayf|
  29712. makegdiparrayffromcursor
  29713. makegdippointf
  29714. allowmodalmessages_assignN
  29715. quietonerror_assign
  29716. ignoreerrors_assign&
  29717. clearerrors
  29718. geterrorstatus
  29719. getlasterrormessage
  29720. appname_assign$
  29721. objfactory
  29722. objfactoryhook
  29723. Error
  29724. Init3
  29725. _memberdata = 
  29726.      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>
  29727. Name = "gpstringformat"
  29728. )PROCEDURE clone
  29729. lparameters toBrush as GpBrush
  29730. #if GDIPLUS_CHECK_PARAMS
  29731. if !(vartype(m.toBrush)='O' and m.toBrush.gdipHandle<>0)
  29732.     error 11 && function argument
  29733.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  29734.     return .F.
  29735. endif
  29736. #endif
  29737. this.Destroy()
  29738. local nHandle
  29739. nHandle = 0
  29740. Declare Integer GdipCloneBrush In GDIPlus.Dll ;
  29741.     integer nBrush, integer @nCloneBrush
  29742. This.gdipStatus = GdipCloneBrush( ;
  29743.     m.toBrush.gdipHandle ;
  29744. ,    @nHandle)
  29745. this.gdipHandle= m.nHandle
  29746. return GDIPLUS_STATUS_OK == This.GdipStatus
  29747. ENDPROC
  29748. PROCEDURE Destroy
  29749. if This.gdipHandle!=0 and This.gdipOwnsThisHandle
  29750.     declare integer GdipDeleteBrush in gdiplus.dll ;
  29751.         integer nBrush
  29752.     GdipDeleteBrush( This.gdipHandle )
  29753.     This.gdipHandle = 0
  29754.     This.gdipOwnsThisHandle = .F.
  29755. endif
  29756. return dodefault()
  29757. ENDPROC
  29758. [_memberdata XML Metadata for customizable properties
  29759. allowmodalmessages Allow error handler to put up Messagebox on error
  29760. quietonerror If .T., error messages are suppressed
  29761. ignoreerrors If .T., errors are ignored: test return values from all functions!
  29762. haderror Flag indicating whether an error has occured - you can also check return value from most functions.
  29763. lasterrormessage Last error message (formatted)
  29764. appname Application name for use in user feedback
  29765. *clone Create a new object as an exact copy of an existing object
  29766. *guidtostring Convert GUID value from binary form to string representation
  29767. *stringtoguid Convert string representation of a GUID or CLSID to binary form (16 bytes)
  29768. *makegdipsizef Create GDI+ SizeF structure as string, from separate width,height parameters
  29769. *makegdiprectf Create GDI+ RectF structure as string, from separate x,y,w,h parameters
  29770. *makegdiparrayf Convert VFP array to a binary string (array of floats)
  29771. *makegdiparrayffromcursor Convert VFP cursor to a binary string (array of floats)
  29772. *makegdippointf Create GDI+ PointF structure as string, from separate x,y parameters
  29773. *allowmodalmessages_assign 
  29774. *quietonerror_assign 
  29775. *ignoreerrors_assign 
  29776. *clearerrors Resets the object's error status
  29777. *geterrorstatus Has an error occurred?
  29778. *getlasterrormessage Get information about the last error to occur
  29779. *appname_assign 
  29780. *objfactory Object factory function for creating _GDIPLUS objects. Override this or ObjFactoryHook to change the classes used
  29781. *objfactoryhook Modify behaviour of object factory for  _GDIPLUS objects. Override this or ObjFactory to change the classes used
  29782. _memberdata = 
  29783.     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>
  29784. allowmodalmessages = (inlist(_VFP.StartMode,0,4))
  29785. quietonerror = (not inlist(_VFP.StartMode,0,4))
  29786. lasterrormessage = ('')
  29787. appname = GDI+ FFC Library
  29788. Name = "gpbase"
  29789. _memberdata = 
  29790.      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>
  29791. Name = "gpbrush"
  29792. hatchstyle = 0
  29793. _memberdata = 
  29794.      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>
  29795. Name = "gphatchbrush"
  29796. TCRECT
  29797. TCRECTF
  29798. NUMBER
  29799. NUMBER
  29800. NUMBER
  29801. NUMBER
  29802. TCPOINTF
  29803. TCRECTF
  29804. TCSIZEF
  29805. gprectange.gppoint_access
  29806. GpPoint
  29807. OBJFACTORY
  29808. TOPOINT
  29809. gprectange.gpsize_access
  29810. GpSize
  29811. OBJFACTORY
  29812. TOSIZE
  29813. GPPOINT
  29814. GPSIZE
  29815. TOPOINT
  29816. TOSIZE
  29817. GPPOINT
  29818. GDIPPOINTF
  29819. GPSIZE    
  29820. GDIPSIZEF(
  29821. STRING
  29822. TCSIZE
  29823. STRING
  29824. TCPOINT
  29825. STRING
  29826. TCRECT
  29827. VNEWVAL
  29828. VNEWVAL
  29829. TOOTHERRECT
  29830. THIS    
  29831. GDIPRECTF
  29832. TXORRECTORPOINT
  29833. TYORSIZE
  29834. CLONE    
  29835. GDIPRECTF
  29836. CREATEFROMPOINTSIZE
  29837. CREATE
  29838. gdiprect_access,
  29839. gdiprect_assign
  29840. gdiprectf_accessv
  29841. gdiprectf_assign
  29842. create
  29843. x2_access
  29844. y2_access
  29845. gdippointf_access
  29846. gdippointf_assignA
  29847. gdipsizef_access
  29848. gdipsizef_assign 
  29849. gppoint_access
  29850. gppoint_assign
  29851. gpsize_access
  29852. gpsize_assign
  29853. createfrompointsize
  29854. gdipsize_access^
  29855. gdipsize_assign
  29856. gdippoint_accessB
  29857. gdippoint_assignz
  29858. gdirect_access'
  29859. gdirect_assign
  29860. x2_assign
  29861. y2_assign
  29862. clone
  29863. Init{
  29864. GDIPHANDLE
  29865. GDIPSTATUS
  29866. TVNEWHANDLE
  29867. TLOWNSHANDLE
  29868. GDIPSTATUS
  29869. GDIPHANDLE
  29870. GDIPOWNSTHISHANDLE
  29871. GDI+ not initialized
  29872. VNEWVAL
  29873. GDIPSTATUS
  29874. WIN32LASTERROR
  29875. _WIN32_GETLASTERRORG
  29876. GetLastError
  29877. kernel32.dllQ
  29878. _win32_GetLastError
  29879. GETLASTERROR
  29880. KERNEL32
  29881. _WIN32_GETLASTERROR    
  29882. gethandle,
  29883. getstatusQ
  29884. sethandlev
  29885. gdipstatus_assignG
  29886. gdiplus.h
  29887. gdiplus_locs.h
  29888. gdiplus.h
  29889. gdiplus_locs.h
  29890. gdiplus.h
  29891. gdiplus_locs.h
  29892. gdiplus.h
  29893. gdiplus_locs.h
  29894. gdiplus.h
  29895. gdiplus_locs.h
  29896. gdiplus.h
  29897. gdiplus_locs.h
  29898. gdiplus.h
  29899. gdiplus_locs.h
  29900. gdiplus.h
  29901. gdiplus_locs.h
  29902. gdiplus.h
  29903. gdiplus_locs.h
  29904. gdiplus.h
  29905. gdiplus_locs.h
  29906. ^Encapsulates a GDI+ drawing surface. Provides methods for drawing on a window or other canvas.
  29907. Dargb Color in ARGB form (GDI+ native format), bits 24-31=alpha, 16-23=red, 8-15=green, 0-7=blue
  29908. foxrgb Color in Foxpro RGB form (bits 0-7=red, 8-15=green, 16-23=blue, no transparency)
  29909. red Red component, value 0-255
  29910. green Green component, value 0-255
  29911. blue Blue component, value 0-255
  29912. alpha Alpha (transparency) component, value 0-255 (255=completely opaque)
  29913. *foxrgb_access 
  29914. *foxrgb_assign 
  29915. *red_access 
  29916. *red_assign 
  29917. *green_access 
  29918. *green_assign 
  29919. *blue_access 
  29920. *blue_assign 
  29921. *alpha_access 
  29922. *alpha_assign 
  29923. *set Set colour value using separate R,G,B,Alpha components
  29924. ]gdiphandle Underlying GDI+ handle for this object
  29925. gdipstatus Status code returned from last GDI+ function called (see Status enumeration)
  29926. gdipownsthishandle True if this VFP object owns the corresponding GDI+ object (and thus should dispose of it in its Destroy Event)
  29927. win32lasterror Win32 error code if GetStatus() returns GP_STATUS_Win32Error
  29928. *gethandle Return the underlying GDI+ handle for this object
  29929. *getstatus Return the status code from the last GDI+ function called on this object
  29930. *sethandle Set the native GDI+ handle if this has been obtained from an outside source
  29931. *gdipstatus_assign 
  29932. x x-coordinate of point
  29933. y y-coordinate of point
  29934. gdippoint String representing the GDI+ Point structure (2 x 32bit integers)
  29935. gdippointf String representing the GDI+ PointF structure (2 x 32bit single-precision floats)
  29936. *gdippoint_access 
  29937. *gdippoint_assign 
  29938. *gdippointf_access 
  29939. *gdippointf_assign 
  29940. *create Set point from individual x,y coordinates
  29941. *set Set point from individual x,y coordinates
  29942. QPROCEDURE gethandle
  29943. return This.gdipHandle
  29944. ENDPROC
  29945. PROCEDURE getstatus
  29946. return This.gdipStatus
  29947. ENDPROC
  29948. PROCEDURE sethandle
  29949. lparameters tvNewHandle, tlOwnsHandle
  29950. #if GDIPLUS_CHECK_PARAMS
  29951. if !(vartype(m.tvNewHandle)='N' and vartype(m.tlOwnsHandle)='L')
  29952.     error 11 && function argument
  29953.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  29954.     return .F.
  29955. endif
  29956. #endif
  29957. * Assume if we came through this function that we do NOT own the graphics handle
  29958. * Thus destroy must not call GdipDelete..() on this handle
  29959. * This can be overridden by passing tlOwnsHandle=.T.
  29960. This.gdipHandle = m.tvNewHandle
  29961. This.gdipOwnsThisHandle = m.tlOwnsHandle
  29962. ENDPROC
  29963. PROCEDURE gdipstatus_assign
  29964. LPARAMETERS vNewVal
  29965. THIS.gdipStatus = m.vNewVal
  29966. do case
  29967. case m.vNewVal == GDIPLUS_STATUS_Win32Error
  29968.     This.win32LastError = _win32_GetLastError()
  29969. #if GDIPLUS_CHECK_GDIPLUSNOTINIT
  29970. case m.vNewVal == GDIPLUS_STATUS_GdiplusNotInitialized
  29971.     error _GDIPLUS_GDIPLUSNOTINIT_LOC
  29972. #endif    
  29973. endcase
  29974. ENDPROC
  29975. PROCEDURE Init
  29976. declare integer GetLastError in kernel32.dll as _win32_GetLastError 
  29977. return dodefault()
  29978. ENDPROC
  29979. CPROCEDURE create
  29980. lparameters tvColor
  29981. * tvColor may be ARGB or a Color object
  29982. #if GDIPLUS_CHECK_PARAMS
  29983. if !(vartype(m.tvColor)$'ONL')
  29984.     error 11 && Function argument
  29985.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  29986.     return .F.
  29987. endif
  29988. #endif
  29989. this.Destroy()
  29990. local nHandle
  29991. nHandle = 0
  29992. Declare Integer GdipCreateSolidFill In GDIPlus.Dll ;
  29993.     integer nColor, Integer @nBrush
  29994. This.gdipStatus = GdipCreateSolidFill( ;
  29995.     icase(vartype(m.tvColor)='O',m.tvColor.ARGB,vartype(m.tvColor)='N',m.tvColor,0xFF000000) ;
  29996. ,    @nHandle)
  29997. This.SetHandle(m.nHandle,.T.)
  29998. return GDIPLUS_STATUS_OK == This.gdipStatus
  29999. ENDPROC
  30000. PROCEDURE brushcolor_access
  30001. #if GDIPLUS_CHECK_OBJECT
  30002. if This.gdipHandle==0
  30003.     error _GDIPLUS_NOGDIPOBJECT_LOC
  30004.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  30005.     return cast(null as I)
  30006. endif
  30007. #endif
  30008. declare integer GdipGetSolidFillColor in gdiplus.dll ;
  30009.     integer, integer @
  30010. local nARGB
  30011. nARGB = 0
  30012. This.gdipStatus = GdipGetSolidFillColor( This.gdipHandle, @nARGB )
  30013. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  30014. ENDPROC
  30015. PROCEDURE brushcolor_assign
  30016. LPARAMETERS tvColor
  30017. #if GDIPLUS_CHECK_OBJECT
  30018. if This.gdipHandle==0
  30019.     error _GDIPLUS_NOGDIPOBJECT_LOC
  30020.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  30021.     return .F.
  30022. endif
  30023. #endif
  30024. #if GDIPLUS_CHECK_PARAMS
  30025. if !(vartype(m.tvColor)$'ON')
  30026.     error 11 && Function argument
  30027.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  30028.     return .F.
  30029. endif
  30030. #endif
  30031. declare Integer GdipSetSolidFillColor in gdiplus.dll ;
  30032.     integer nPen, integer nColor
  30033. This.gdipStatus = GdipSetSolidFillColor( This.gdipHandle,iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor))
  30034. return GDIPLUS_STATUS_OK == This.gdipStatus
  30035. ENDPROC
  30036. PROCEDURE Init
  30037. lparameters tvColor
  30038. if not dodefault()
  30039.     return .F.
  30040. endif
  30041. if pcount()>0
  30042.     return This.Create(m.tvColor)
  30043. endif
  30044. ENDPROC
  30045. pencolor The color of this Pen object.
  30046. penwidth Width of the pen object
  30047. pentype The style of lines drawn with this Pen object
  30048. alignment The alignment of this pen (see GP_PENALIGNMENT_ constants)
  30049. miterlimit The limit of the thickness of the join on a mitered corner
  30050. dashcap The cap style at the end of dashes, for dashed lines
  30051. linejoin Join style for the ends of two consecutive lines drawn with this Pen
  30052. startcap Cap style at the start of lines drawn with this Pen
  30053. endcap Cap style at the end of lines drawn with this Pen
  30054. dashstyle The style used for dashed lines
  30055. dashoffset The distance from the start of a line to the beginning of a dash pattern
  30056. penunit The unit for measuring width etc, see GDIPLUS_UNIT constants
  30057. *create Create pen in a given color
  30058. *createfrombrush Create pen from an existing _gdiplus brush object
  30059. *pencolor_access 
  30060. *pencolor_assign 
  30061. *penwidth_access 
  30062. *penwidth_assign 
  30063. *pentype_access 
  30064. *pentype_assign 
  30065. *alignment_access 
  30066. *alignment_assign 
  30067. *miterlimit_access 
  30068. *miterlimit_assign 
  30069. *dashcap_access 
  30070. *dashcap_assign 
  30071. *linejoin_access 
  30072. *linejoin_assign 
  30073. *startcap_access 
  30074. *startcap_assign 
  30075. *endcap_access 
  30076. *endcap_assign 
  30077. *dashstyle_access 
  30078. *dashstyle_assign 
  30079. *dashoffset_access 
  30080. *dashoffset_assign 
  30081. *penunit_access 
  30082. *penunit_assign 
  30083. _memberdata = 
  30084.     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>
  30085. Name = "gppen"
  30086. Lx = 0
  30087. y = 0
  30088. _memberdata = 
  30089.      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>
  30090. Name = "gppoint"
  30091. BPROCEDURE gdippoint_access
  30092. * Convert object into 2 x 32-bit integers
  30093. * Modify bintoc() output into little-endian with normal sign bit
  30094. return ;
  30095.     bintoc(This.X,'4RS') + bintoc(This.Y,'4RS')
  30096. ENDPROC
  30097. PROCEDURE gdippoint_assign
  30098. LPARAMETERS tcPoint
  30099. #if GDIPLUS_CHECK_PARAMS
  30100. if !(vartype(m.tcPoint)='C' and len(m.tcPoint)=8)
  30101.     error 11 && Function argument
  30102.     return .F.
  30103. endif
  30104. #endif
  30105. This.X = ctobin(substr(m.tcPoint,1,4),'RS')
  30106. This.Y = ctobin(substr(m.tcPoint,5,4),'RS')
  30107. ENDPROC
  30108. PROCEDURE gdippointf_access
  30109. return ;
  30110.     bintoc(This.X,'F') + bintoc(This.Y,'F')
  30111. ENDPROC
  30112. PROCEDURE gdippointf_assign
  30113. LPARAMETERS tcPointF
  30114. #if GDIPLUS_CHECK_PARAMS
  30115. if !(vartype(m.tcPointF)='C' and len(m.tcPointF)=8)
  30116.     error 11 && Function argument
  30117.     return .F.
  30118. endif
  30119. #endif
  30120. This.X = ctobin(substr(m.tcPointF,1,4),'N')
  30121. This.Y = ctobin(substr(m.tcPointF,5,4),'N')
  30122. ENDPROC
  30123. PROCEDURE create
  30124. lparameters tx,ty
  30125. #if GDIPLUS_CHECK_PARAMS
  30126. if !(vartype(m.tx)='N' and vartype(m.ty)='N')
  30127.     error 11 && Function argument
  30128.     return .F.
  30129. endif
  30130. #endif
  30131. This.X = m.tx
  30132. This.Y = m.ty
  30133. ENDPROC
  30134. PROCEDURE set
  30135. lparameters tx as Number,ty as Number
  30136. #if GDIPLUS_CHECK_PARAMS
  30137. if !(vartype(m.tx)='N' and vartype(m.ty)='N')
  30138.     error 11 && Function argument
  30139.     return .F.
  30140. endif
  30141. #endif
  30142. This.X = m.tx
  30143. This.Y = m.ty
  30144. ENDPROC
  30145. PROCEDURE Init
  30146. lparameters tXorPoint,ty
  30147. if not dodefault()
  30148.     return .F.
  30149. endif
  30150. do case
  30151. case pcount()=1 and vartype(m.tXorPoint)='O'
  30152.     * Passed an object - presumably an existing Point object
  30153.     This.Clone(m.tXorPoint)
  30154. case pcount()=1 and vartype(m.tXorPoint)='C'
  30155.     * Passed a string (structure)
  30156.     * Assume PointF as this is preferred format
  30157.     This.gdipPointF = m.tXorPoint
  30158. case pcount()>=2
  30159.     * Separate components
  30160.     This.Create(m.tXorPoint,m.ty)
  30161. endcase
  30162. ENDPROC
  30163. PROCEDURE clone
  30164. lparameters toOtherPoint as GpPoint
  30165. #if GDIPLUS_CHECK_PARAMS
  30166. if !(vartype(m.toOtherPoint)='O' ;
  30167.     and vartype(toOtherPoint.X)='N' and vartype(toOtherPoint.Y)='N')
  30168.         error 11 && Function argument
  30169.         return .F.
  30170.     endif
  30171.     #endif
  30172. This.X = m.toOtherPoint.X
  30173. This.Y = m.toOtherPoint.Y
  30174. ENDPROC
  30175. gdiphandle = 0
  30176. gdipstatus = 0
  30177. win32lasterror = 0
  30178. _memberdata = 
  30179.      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>
  30180. Name = "gpobject"
  30181. gdipfontcollectionhandle = 0
  30182. _memberdata = 
  30183.     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>
  30184. Name = "gpfontfamily"
  30185. argb = -16777216
  30186. _memberdata = 
  30187.      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>
  30188. Name = "gpcolor"
  30189. Gw = 0
  30190. h = 0
  30191. _memberdata = 
  30192.      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>
  30193. Name = "gpsize"
  30194. PROCEDURE gdipsize_access
  30195. * Convert object into 2 x 32-bit integers
  30196. * Modify bintoc() output into little-endian with normal sign bit
  30197. return ;
  30198.     bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
  30199. ENDPROC
  30200. PROCEDURE gdipsize_assign
  30201. LPARAMETERS tcSize as String
  30202. #if GDIPLUS_CHECK_PARAMS
  30203. if !(vartype(m.tcSize)='C' and len(m.tcSize)=8)
  30204.     error 11 && Function argument
  30205.     return .F.
  30206. endif
  30207. #endif
  30208. This.W = ctobin(substr(m.tcSize,1,4),'RS')
  30209. This.H = ctobin(substr(m.tcSize,5,4),'RS')
  30210. ENDPROC
  30211. PROCEDURE gdipsizef_access
  30212. return ;
  30213.     bintoc(This.W,'F') + bintoc(This.H,'F')
  30214. ENDPROC
  30215. PROCEDURE gdipsizef_assign
  30216. LPARAMETERS tcSizeF as String
  30217. #if GDIPLUS_CHECK_PARAMS
  30218. if !(vartype(m.tcSizeF)='C' and len(m.tcSizeF)=8)
  30219.     error 11 && Function argument
  30220.     return .F.
  30221. endif
  30222. #endif
  30223. This.W = ctobin(substr(m.tcSizeF,1,4),'N')
  30224. This.H = ctobin(substr(m.tcSizeF,5,4),'N')
  30225. ENDPROC
  30226. PROCEDURE create
  30227. lparameters tw,th
  30228. #if GDIPLUS_CHECK_PARAMS
  30229. if !(vartype(m.tw)='N' and vartype(m.th)='N')
  30230.     error 11 && Function argument
  30231.     return .F.
  30232. endif
  30233. #endif
  30234. This.W = m.tw
  30235. This.H = m.th
  30236. ENDPROC
  30237. PROCEDURE set
  30238. lparameters tw,th
  30239. #if GDIPLUS_CHECK_PARAMS
  30240. if !(vartype(m.tw)='N' and vartype(m.th)='N')
  30241.     error 11 && Function argument
  30242.     return .F.
  30243. endif
  30244. #endif
  30245. This.W = m.tw
  30246. This.H = m.th
  30247. ENDPROC
  30248. PROCEDURE clone
  30249. lparameters toOtherSize
  30250. #if GDIPLUS_CHECK_PARAMS
  30251. if !(vartype(m.toOtherSize)='O' ;
  30252.     and vartype(toOtherSize.W)='N' and vartype(toOtherSize.H)='N')
  30253.     error 11 && Function argument
  30254.     return .F.
  30255. endif
  30256. #endif
  30257. This.W = m.toOtherSize.W
  30258. This.H = m.toOtherSize.H
  30259. ENDPROC
  30260. PROCEDURE Init
  30261. lparameters tWorSize,th
  30262. if not dodefault()
  30263.     return .F.
  30264. endif
  30265. do case
  30266. case pcount()=1 and vartype(m.tWorSize)='O'
  30267.     * Passed an object - presumably an existing Size object
  30268.     This.Clone(m.tWorSize)
  30269. case pcount()=1 and vartype(m.tWorSize)='C'
  30270.     * Passed a string (structure)
  30271.     * Assume SizeF as this is preferred format
  30272.     This.gdipSizeF = m.tWorSize
  30273. case pcount()>=2
  30274.     * Separate components
  30275.     This.Create(m.tWorSize,m.th)
  30276. endcase
  30277. ENDPROC
  30278. _memberdata = 
  30279.      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>
  30280. Name = "gpfont"
  30281. GREEN
  30282. BLUE~
  30283. TNRGB
  30284. ARGBp
  30285. TNNEWVAL
  30286. ARGBp
  30287. TNNEWVAL
  30288. ARGBj
  30289. TNNEWVAL
  30290. ARGBp
  30291. TNNEWVAL
  30292. TNRED
  30293. TNGREEN
  30294. TNBLUE
  30295. TNALPHA
  30296. ARGBk
  30297. GPCOLOR
  30298. TOOTHERCOLOR
  30299. INTEGER
  30300. INTEGER
  30301. INTEGER
  30302. INTEGER
  30303. TNREDORARGB
  30304. TNGREEN
  30305. TNBLUE
  30306. TNALPHA
  30307. foxrgb_access,
  30308. foxrgb_assignf
  30309. red_access
  30310. red_assign&
  30311. green_access
  30312. green_assign
  30313. blue_accesse
  30314. blue_assign
  30315. alpha_access
  30316. alpha_assign9
  30317. clone
  30318. STRING
  30319. TCSIZE
  30320. STRING
  30321. TCSIZEF
  30322. TOOTHERSIZE
  30323. TWORSIZE
  30324. CLONE    
  30325. GDIPSIZEF
  30326. CREATE
  30327. gdipsize_access,
  30328. gdipsize_assignd
  30329. gdipsizef_access
  30330. gdipsizef_assignD
  30331. create
  30332. clone
  30333. GPBRUSH
  30334. GdipCloneBrush
  30335. GDIPlus.Dll
  30336. TOBRUSH
  30337. GDIPHANDLE
  30338. GDIPSTATUS
  30339. DESTROY
  30340. NHANDLE
  30341. GDIPCLONEBRUSH
  30342. GDIPLUS
  30343. GdipDeleteBrush
  30344. gdiplus.dll
  30345. GDIPHANDLE
  30346. GDIPOWNSTHISHANDLE
  30347. GDIPDELETEBRUSH
  30348. GDIPLUS
  30349. clone,
  30350. Destroyr
  30351. &_memberdata = 
  30352.      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>
  30353. Name = "gpbitmap"
  30354. jx = 0
  30355. y = 0
  30356. w = 0
  30357. h = 0
  30358. _memberdata = 
  30359.     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>
  30360. Name = "gprectangle"
  30361. x x-coordinate of upper-left corner of rectangle
  30362. y y-coordinate of upper-left corner of rectangle
  30363. w Width of rectangle
  30364. h Height of rectangle
  30365. gdiprect String representing the GDI+ Rect structure (4 x 32bit integers)
  30366. gdiprectf String representing the GDI+ RectF structure (4 x 32bit single-precision floats)
  30367. x2 X-Coordinate of bottom right corner of rectangle
  30368. y2 Y-Coordinate of bottom right corner of rectangle
  30369. gdippointf GDI+ PointF structure for the x,y position of this rectange
  30370. gdipsizef GDI+ SizeF structure for the width and height of this rectange
  30371. gppoint Origin of the rectange (x,y) as a GpPoint object
  30372. gpsize Width and Height of the rectangle as a GpSize object
  30373. gdipsize GDI+ Size (integers) structure for the width and height of this rectange
  30374. gdippoint GDI+ Point (integers) structure for the x,y position of this rectange
  30375. gdirect String containing Win32/GDI "RECT" structure (integers, x1,y1,x2,y2)
  30376. *gdiprect_access 
  30377. *gdiprect_assign 
  30378. *gdiprectf_access 
  30379. *gdiprectf_assign 
  30380. *create Set rectangle from individual coordinates
  30381. *x2_access 
  30382. *y2_access 
  30383. *set Set rectangle coordinates from individual components
  30384. *gdippointf_access 
  30385. *gdippointf_assign 
  30386. *gdipsizef_access 
  30387. *gdipsizef_assign 
  30388. *gppoint_access 
  30389. *gppoint_assign 
  30390. *gpsize_access 
  30391. *gpsize_assign 
  30392. *createfrompointsize Set rectangle from separate point and size objects
  30393. *gdipsize_access 
  30394. *gdipsize_assign 
  30395. *gdippoint_access 
  30396. *gdippoint_assign 
  30397. *gdirect_access 
  30398. *gdirect_assign 
  30399. *x2_assign 
  30400. *y2_assign 
  30401. STRING
  30402. LOGICAL
  30403. GdipLoadImageFromFileICM
  30404. gdiplus.dll
  30405. GdipLoadImageFromFile
  30406. gdiplus.dll
  30407. TCFILENAME
  30408. TLUSEEMBEDDEDCOLORMGMT
  30409. GDIPSTATUS
  30410. GDIPLOADIMAGEFROMFILEICM
  30411. GDIPLUS
  30412. DESTROY
  30413. NHANDLE    
  30414. SETHANDLE
  30415. GDIPLOADIMAGEFROMFILE
  30416. STRING
  30417. GDI+ object not created or associated
  30418. GdipSaveImageToFile
  30419. gdiplus.dll
  30420. GlobalFree
  30421. kernel32.dll
  30422. rvEncoderParams[1]b
  30423. TCFILENAME
  30424. TVCLSIDENCODER
  30425. RVENCODERPARAMS
  30426. GDIPHANDLE
  30427. GDIPSTATUS
  30428. LQCLSIDENCODER
  30429. STRINGTOGUID
  30430. GETENCODERCLSID
  30431. GDIPSAVEIMAGETOFILE
  30432. GDIPLUS
  30433. GLOBALFREE
  30434. KERNEL32
  30435. LNENCODERPARAMSPTR
  30436. GETENCODERPARAMSFROMARRAY
  30437. GETENCODERPARAMSFROMSTRING
  30438. INTEGER
  30439. INTEGER
  30440. GDI+ object not created or associated
  30441. GdipGetImageThumbnail
  30442. gdiplus.dll
  30443. gpimage.getthumbnailimage
  30444. GpImage
  30445. TNWIDTH
  30446. TNHEIGHT
  30447. GDIPHANDLE
  30448. GDIPSTATUS
  30449. GDIPGETIMAGETHUMBNAIL
  30450. GDIPLUS
  30451. LNNEWIMAGE
  30452. OBJFACTORYx
  30453. INTEGER
  30454. INTEGER
  30455. GlobalAlloc
  30456. kernel32.dll
  30457. GlobalFree
  30458. kernel32.dll
  30459. lstrlenW
  30460. kernel32.dllQ
  30461. __win32_lstrlenW_ptr
  30462. GdipGetImageEncodersSize
  30463. gdiplus.dll
  30464. GdipGetImageEncoders
  30465. gdiplus.dll
  30466. INTEGER
  30467. INTEGER
  30468. INTEGER
  30469. TVSEARCHVALUE
  30470. GDIPSTATUS
  30471. LNNUMENCODERS
  30472. LNBUFFERSIZE
  30473. GLOBALALLOC
  30474. KERNEL32
  30475. GLOBALFREE
  30476. LSTRLENW
  30477. __WIN32_LSTRLENW_PTR
  30478. GDIPGETIMAGEENCODERSSIZE
  30479. GDIPLUS
  30480. GDIPGETIMAGEENCODERS
  30481. LNBUFFERPTR
  30482. LNSTRINGPTR    
  30483. LIENCODER
  30484. LCFOUNDCLSID
  30485. LCUNICODEMIMETYPE
  30486. LCFORMATID
  30487. INTEGER
  30488. GDI+ object not created or associated
  30489. GdipGetImageBounds
  30490. gdiplus.dll
  30491. gpimage.getbounds
  30492. GpRectangle
  30493. TNUNIT
  30494. GDIPSTATUS
  30495. GDIPHANDLE
  30496. GDIPGETIMAGEBOUNDS
  30497. GDIPLUS
  30498. LCRECTF
  30499. OBJFACTORY
  30500. GDI+ object not created or associated
  30501. GdipImageRotateFlip
  30502. gdiplus.dll
  30503. TNROTATEFLIPTYPE
  30504. GDIPHANDLE
  30505. GDIPSTATUS
  30506. GDIPIMAGEROTATEFLIP
  30507. GDIPLUS
  30508. GDI+ object not created or associated
  30509. GdipGetImageFlags
  30510. gdiplus.dll
  30511. GDIPHANDLE
  30512. GDIPSTATUS
  30513. GDIPGETIMAGEFLAGS
  30514. GDIPLUS
  30515. NVALUE
  30516. Flags
  30517. NEWVAL
  30518. GDI+ object not created or associated
  30519. GdipGetImageHorizontalResolution
  30520. gdiplus.dll
  30521. GDIPHANDLE
  30522. GDIPSTATUS 
  30523. GDIPGETIMAGEHORIZONTALRESOLUTION
  30524. GDIPLUS
  30525. NVALUE.
  30526. HorizontalResolution
  30527. NEWVAL
  30528. GDI+ object not created or associated
  30529. GdipGetImageVerticalResolution
  30530. gdiplus.dll
  30531. GDIPHANDLE
  30532. GDIPSTATUS
  30533. GDIPGETIMAGEVERTICALRESOLUTION
  30534. GDIPLUS
  30535. NVALUE,
  30536. VerticalResolution
  30537. NEWVAL
  30538. GDI+ object not created or associated
  30539. GdipGetImageHeight
  30540. gdiplus.dll
  30541. GDIPHANDLE
  30542. GDIPSTATUS
  30543. GDIPGETIMAGEHEIGHT
  30544. GDIPLUS
  30545. NVALUE%
  30546. ImageHeight
  30547. NEWVAL
  30548. GDI+ object not created or associated
  30549. GdipGetImageWidth
  30550. gdiplus.dll
  30551. GDIPHANDLE
  30552. GDIPSTATUS
  30553. GDIPGETIMAGEWIDTH
  30554. GDIPLUS
  30555. NVALUE$
  30556. ImageWidth
  30557. NEWVAL
  30558. GDI+ object not created or associated
  30559. GdipGetImageRawFormat
  30560. gdiplus.dll
  30561. GDIPHANDLE
  30562. GDIPSTATUS
  30563. GDIPGETIMAGERAWFORMAT
  30564. GDIPLUS
  30565. SGUID#
  30566. RawFormat
  30567. NEWVAL
  30568. GDI+ object not created or associated
  30569. GdipGetImagePixelFormat
  30570. gdiplus.dll
  30571. GDIPHANDLE
  30572. GDIPSTATUS
  30573. GDIPGETIMAGEPIXELFORMAT
  30574. GDIPLUS
  30575. NVALUE%
  30576. PixelFormat
  30577. NEWVALi
  30578. INTEGER
  30579. INTEGER
  30580. GlobalAlloc
  30581. kernel32.dll
  30582. GlobalFree
  30583. kernel32.dll
  30584. lstrlenW
  30585. kernel32.dllQ
  30586. __win32_lstrlenW_ptr
  30587. GdipGetImageDecodersSize
  30588. gdiplus.dll
  30589. GdipGetImageDecoders
  30590. gdiplus.dll
  30591. INTEGER
  30592. INTEGER
  30593. INTEGER
  30594. TVSEARCHVALUE
  30595. GDIPSTATUS
  30596. LNNUMDECODERS
  30597. LNBUFFERSIZE
  30598. GLOBALALLOC
  30599. KERNEL32
  30600. GLOBALFREE
  30601. LSTRLENW
  30602. __WIN32_LSTRLENW_PTR
  30603. GDIPGETIMAGEDECODERSSIZE
  30604. GDIPLUS
  30605. GDIPGETIMAGEDECODERS
  30606. LNBUFFERPTR
  30607. LNSTRINGPTR    
  30608. LIDECODER
  30609. LCFOUNDCLSID
  30610. LCUNICODEMIMETYPE
  30611. LCFORMATIDB
  30612. GDI+ object not created or associated
  30613. GdipGetImageDimension
  30614. gdiplus.dll
  30615. gpimage.physicaldimension_access
  30616. GpSize
  30617. GDIPHANDLE
  30618. GDIPSTATUS
  30619. GDIPGETIMAGEDIMENSION
  30620. GDIPLUS
  30621. LNWIDTH
  30622. LNHEIGHT
  30623. OBJFACTORY+
  30624. PhysicalDimension
  30625. NEWVAL
  30626. Invalid encoder parameter string
  30627. Invalid encoder parameter name "
  30628. LQCLSIDENCODER
  30629. TCENCODERPARAMS
  30630. LNCOUNT
  30631. LAPARAMS
  30632. LNPOS
  30633. LCNAME
  30634. LCVALUE
  30635. LQGUID
  30636. LNTYPE    
  30637. LCSCRATCH
  30638. LIPARAM
  30639. GETENCODERPARAMINFO
  30640. GETENCODERPARAMSFROMARRAYw
  30641. raEncoderParams[1]b
  30642. Invalid encoder parameter name "
  30643. Invalid data type for encoder parameter name
  30644. Invalid encoder parameter value
  30645. GlobalAlloc
  30646. kernel32.dll
  30647. LQCLSIDENCODER
  30648. RAENCODERPARAMS
  30649. LNPARAMCOUNT
  30650. LAPARAM
  30651. LIPARAM
  30652. LCNAME    
  30653. LQPARAMID
  30654. LVVALUE
  30655. LNVALUE
  30656. LNBUFFERSIZE
  30657. LNBUFFERPTR
  30658. GETENCODERPARAMINFO
  30659. GLOBALALLOC
  30660. KERNEL32
  30661. _GDIPLUS_LOC_MALLOCFAIL
  30662. LNARRAYPTR
  30663. LNVALUEPTRI
  30664. QUALITY
  30665. TRANSFORMATION
  30666. LUMINANCETABLE
  30667. CHROMINANCETABLE
  30668. COMPRESSION
  30669. COLORDEPTH
  30670. SAVEFLAG
  30671. TCPARAMNAME
  30672. RQGUID
  30673. RNDATATYPE
  30674. GDI+ object not created or associated
  30675. GdipGetPropertyCount
  30676. gdiplus.dll
  30677. GDIPHANDLE
  30678. GDIPSTATUS
  30679. LNCOUNT
  30680. GDIPGETPROPERTYCOUNT
  30681. GDIPLUS
  30682. GDI+ object not created or associated
  30683. raPropIDList[1]b
  30684. GdipGetPropertyIdList
  30685. gdiplus.dll
  30686. RAPROPIDLIST
  30687. GDIPHANDLE
  30688. GDIPSTATUS
  30689. LNCOUNT
  30690. LCIDLIST
  30691. LNINDEX
  30692. GETPROPERTYCOUNT
  30693. GDIPGETPROPERTYIDLIST
  30694. GDIPLUS
  30695. INTEGER
  30696. GDI+ object not created or associated
  30697. GlobalAlloc
  30698. kernel32.dll
  30699. GlobalFree
  30700. kernel32.dll
  30701. lstrlenA
  30702. kernel32.dllQ
  30703. __win32_lstrlenA_ptr
  30704. GdipGetPropertyItemSize
  30705. gdiplus.dll
  30706. GdipGetPropertyItem
  30707. gdiplus.dll
  30708. INTEGER
  30709. INTEGER
  30710. INTEGER
  30711. Memory allocation failed
  30712. Unknown or invalid property tag type
  30713. TNPROPID
  30714. GDIPHANDLE
  30715. GDIPSTATUS
  30716. GLOBALALLOC
  30717. KERNEL32
  30718. GLOBALFREE
  30719. LSTRLENA
  30720. __WIN32_LSTRLENA_PTR
  30721. GDIPGETPROPERTYITEMSIZE
  30722. GDIPLUS
  30723. GDIPGETPROPERTYITEM
  30724. LNBUFFERSIZE
  30725. LNBUFFERPTR
  30726. LNSTRINGPTR
  30727. LNPROPERTYTAGTYPE
  30728. LNVALUELEN
  30729. LNVALUEPTR
  30730. LVRETURN
  30731. LNNUM
  30732. LNDEN
  30733. GPIMAGE
  30734. GdipCloneImage
  30735. GDIPlus.Dll
  30736. TOIMAGE
  30737. DESTROY
  30738. NHANDLE
  30739. GDIPHANDLE
  30740. GDIPSTATUS
  30741. GDIPCLONEIMAGE
  30742. GDIPLUS
  30743. GdipDisposeImage
  30744. GDIPlus.Dll
  30745. GDIPHANDLE
  30746. GDIPOWNSTHISHANDLE
  30747. GDIPDISPOSEIMAGE
  30748. GDIPLUS
  30749. TVPARAM1
  30750. TVPARAM2
  30751. GDIPSTATUS    
  30752. SETHANDLE
  30753. CREATEFROMFILE
  30754. createfromfile,
  30755. savetofile
  30756. getthumbnailimage
  30757. getencoderclsid
  30758. getbounds0
  30759. rotateflip
  30760. flags_accessi
  30761. flags_assign
  30762. horizontalresolution_access
  30763. horizontalresolution_assign"
  30764. verticalresolution_access\
  30765. verticalresolution_assign
  30766. imageheight_access
  30767. imageheight_assign 
  30768. imagewidth_accessQ
  30769. imagewidth_assign
  30770. rawformat_access
  30771. rawformat_assign
  30772. pixelformat_access,
  30773. pixelformat_assignl
  30774. getdecoderclsid
  30775. physicaldimension_access
  30776. physicaldimension_assign
  30777. getencoderparamsfromstring
  30778. getencoderparamsfromarray
  30779. getencoderparaminfo
  30780. getpropertycount
  30781. getpropertyidlist
  30782. getpropertyitem&6
  30783. clone
  30784. Destroy
  30785. NUMBER
  30786. NUMBER
  30787. GdipCreatePen1
  30788. GDIPlus.Dll
  30789. TVCOLOR
  30790. TNWIDTH
  30791. TNUNIT
  30792. DESTROY
  30793. NHANDLE
  30794. GDIPCREATEPEN1
  30795. GDIPLUS
  30796. GDIPSTATUS
  30797. ARGB    
  30798. SETHANDLEN
  30799. BRUSH
  30800. NUMBER
  30801. NUMBER
  30802. GdipCreatePen2
  30803. GDIPlus.Dll
  30804. TOBRUSH
  30805. TNWIDTH
  30806. TNUNIT
  30807. TOPEN
  30808. GDIPHANDLE
  30809. GDIPSTATUS
  30810. DESTROY
  30811. NHANDLE
  30812. GDIPCREATEPEN2
  30813. GDIPLUS
  30814. GETHANDLE    
  30815. SETHANDLE
  30816. GDI+ object not created or associated
  30817. GdipGetPenColor
  30818. gdiplus.dll
  30819. GDIPHANDLE
  30820. GDIPSTATUS
  30821. GDIPGETPENCOLOR
  30822. GDIPLUS
  30823. NARGB
  30824. GDI+ object not created or associated
  30825. GdipSetPenColor
  30826. gdiplus.dll
  30827. TVCOLOR
  30828. GDIPHANDLE
  30829. GDIPSTATUS
  30830. GDIPSETPENCOLOR
  30831. GDIPLUS
  30832. GDI+ object not created or associated
  30833. GdipGetPenWidth
  30834. gdiplus.dll
  30835. GDIPHANDLE
  30836. GDIPSTATUS
  30837. GDIPGETPENWIDTH
  30838. GDIPLUS
  30839. NWIDTH
  30840. GDI+ object not created or associated
  30841. GdipSetPenWidth
  30842. gdiplus.dll
  30843. TNNEWWIDTH
  30844. GDIPSTATUS
  30845. GDIPHANDLE
  30846. GDIPSETPENWIDTH
  30847. GDIPLUS
  30848. GDI+ object not created or associated
  30849. GdipGetPenFillType
  30850. gdiplus.dll
  30851. GDIPHANDLE
  30852. GDIPSTATUS
  30853. GDIPGETPENFILLTYPE
  30854. GDIPLUS
  30855. NTYPE!
  30856. PenType
  30857. VNEWVAL
  30858. GDI+ object not created or associated
  30859. GdipGetPenMode
  30860. gdiplus.dll
  30861. GDIPHANDLE
  30862. GDIPSTATUS
  30863. GDIPGETPENMODE
  30864. GDIPLUS
  30865. NTYPE
  30866. GDI+ object not created or associated
  30867. GdipSetPenMode
  30868. gdiplus.dll
  30869. TNVALUE
  30870. GDIPHANDLE
  30871. GDIPSTATUS
  30872. GDIPSETPENMODE
  30873. GDIPLUS
  30874. GDI+ object not created or associated
  30875. GdipGetPenMiterLimit
  30876. gdiplus.dll
  30877. GDIPHANDLE
  30878. GDIPSTATUS
  30879. GDIPGETPENMITERLIMIT
  30880. GDIPLUS
  30881. NLIMIT
  30882. GDI+ object not created or associated
  30883. GdipSetPenMiterLimit
  30884. gdiplus.dll
  30885. TNNEWVALUE
  30886. GDIPSTATUS
  30887. GDIPHANDLE
  30888. GDIPSETPENMITERLIMIT
  30889. GDIPLUS
  30890. GDI+ object not created or associated
  30891. GdipGetPenDashCap197819
  30892. gdiplus.dll
  30893. GDIPHANDLE
  30894. GDIPSTATUS
  30895. GDIPGETPENDASHCAP197819
  30896. GDIPLUS
  30897. NTYPE
  30898. GDI+ object not created or associated
  30899. GdipSetPenDashCap197819
  30900. gdiplus.dll
  30901. TNVALUE
  30902. GDIPHANDLE
  30903. GDIPSTATUS
  30904. GDIPSETPENDASHCAP197819
  30905. GDIPLUS
  30906. GDI+ object not created or associated
  30907. GdipGetPenLineJoin
  30908. gdiplus.dll
  30909. GDIPHANDLE
  30910. GDIPSTATUS
  30911. GDIPGETPENLINEJOIN
  30912. GDIPLUS
  30913. NTYPE
  30914. GDI+ object not created or associated
  30915. GdipSetPenLineJoin
  30916. gdiplus.dll
  30917. TNVALUE
  30918. GDIPHANDLE
  30919. GDIPSTATUS
  30920. GDIPSETPENLINEJOIN
  30921. GDIPLUS
  30922. GDI+ object not created or associated
  30923. GdipGetPenStartCap
  30924. gdiplus.dll
  30925. GDIPHANDLE
  30926. GDIPSTATUS
  30927. GDIPGETPENSTARTCAP
  30928. GDIPLUS
  30929. NTYPE
  30930. GDI+ object not created or associated
  30931. GdipSetPenStartCap
  30932. gdiplus.dll
  30933. TNVALUE
  30934. GDIPHANDLE
  30935. GDIPSTATUS
  30936. GDIPSETPENSTARTCAP
  30937. GDIPLUS
  30938. GDI+ object not created or associated
  30939. GdipGetPenEndCap
  30940. gdiplus.dll
  30941. GDIPHANDLE
  30942. GDIPSTATUS
  30943. GDIPGETPENENDCAP
  30944. GDIPLUS
  30945. NTYPE
  30946. GDI+ object not created or associated
  30947. GdipSetPenEndCap
  30948. gdiplus.dll
  30949. TNVALUE
  30950. GDIPHANDLE
  30951. GDIPSTATUS
  30952. GDIPSETPENENDCAP
  30953. GDIPLUS
  30954. GDI+ object not created or associated
  30955. GdipGetPenDashStyle
  30956. gdiplus.dll
  30957. GDIPHANDLE
  30958. GDIPSTATUS
  30959. GDIPGETPENDASHSTYLE
  30960. GDIPLUS
  30961. NTYPE
  30962. GDI+ object not created or associated
  30963. GdipSetPenDashStyle
  30964. gdiplus.dll
  30965. TNVALUE
  30966. GDIPHANDLE
  30967. GDIPSTATUS
  30968. GDIPSETPENDASHSTYLE
  30969. GDIPLUS
  30970. GDI+ object not created or associated
  30971. GdipGetPenDashOffset
  30972. gdiplus.dll
  30973. GDIPHANDLE
  30974. GDIPSTATUS
  30975. GDIPGETPENDASHOFFSET
  30976. GDIPLUS
  30977. NOFFSET
  30978. GDI+ object not created or associated
  30979. GdipSetPenDashOffset
  30980. gdiplus.dll
  30981. TNNEWVALUE
  30982. GDIPSTATUS
  30983. GDIPHANDLE
  30984. GDIPSETPENDASHOFFSET
  30985. GDIPLUS
  30986. GDI+ object not created or associated
  30987. GdipGetPenUnit
  30988. gdiplus.dll
  30989. GDIPHANDLE
  30990. GDIPSTATUS
  30991. GDIPGETPENUNIT
  30992. GDIPLUS
  30993. NTYPE
  30994. GDI+ object not created or associated
  30995. GdipSetPenUnit
  30996. gdiplus.dll
  30997. TNVALUE
  30998. GDIPHANDLE
  30999. GDIPSTATUS
  31000. GDIPSETPENUNIT
  31001. GDIPLUS
  31002. GPPEN
  31003. GdipClonePen
  31004. GDIPlus.Dll
  31005. TOPEN
  31006. DESTROY
  31007. NHANDLE
  31008. GDIPHANDLE
  31009. GDIPSTATUS
  31010. GDIPCLONEPEN
  31011. GDIPLUS
  31012. NUMBER
  31013. NUMBER
  31014. TVCOLOR
  31015. TNWIDTH
  31016. TNUNIT
  31017. CREATEx
  31018. GdipDeletePen
  31019. GDIPlus.Dll
  31020. GDIPHANDLE
  31021. GDIPOWNSTHISHANDLE
  31022. GDIPDELETEPEN
  31023. GDIPLUS
  31024. create,
  31025. createfrombrush
  31026. pencolor_access
  31027. pencolor_assign
  31028. penwidth_access:
  31029. penwidth_assignr
  31030. pentype_access
  31031. pentype_assign
  31032. alignment_access
  31033. alignment_assignI
  31034. miterlimit_access
  31035. miterlimit_assign
  31036. dashcap_access
  31037. dashcap_assign]
  31038. linejoin_access
  31039. linejoin_assign
  31040. startcap_access0
  31041. startcap_assigne
  31042. endcap_access
  31043. endcap_assign
  31044. dashstyle_access&
  31045. dashstyle_assign]
  31046. dashoffset_access
  31047. dashoffset_assign
  31048. penunit_access=
  31049. penunit_assignj
  31050. clone
  31051. Destroy
  31052. #PROCEDURE foxrgb_access
  31053. return rgb(This.Red,This.Green,This.Blue)
  31054. ENDPROC
  31055. PROCEDURE foxrgb_assign
  31056. LPARAMETERS tnRGB
  31057. #if GDIPLUS_CHECK_PARAMS
  31058. if !(vartype(m.tnRGB)=='N')
  31059.     error 11 && Function argument
  31060. endif
  31061. #endif
  31062. This.ARGB = bitor( 0xFF000000 ;
  31063.     , bitlshift(bitand(m.tnRGB,0xFF),16) ;
  31064.     , bitand(m.tnRGB,0x0000FF00) ;
  31065.     , bitrshift(bitand(m.tnRGB,0x00FF0000),16) )
  31066. ENDPROC
  31067. PROCEDURE red_access
  31068. RETURN bitand(bitrshift(This.ARGB,16),0xFF)
  31069. ENDPROC
  31070. PROCEDURE red_assign
  31071. LPARAMETERS tnNewVal
  31072. #if GDIPLUS_CHECK_PARAMS
  31073. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  31074.     error 11 && Function argument
  31075. endif
  31076. #endif
  31077. This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,16))
  31078. ENDPROC
  31079. PROCEDURE green_access
  31080. RETURN bitand(bitrshift(This.ARGB,8),0xFF)
  31081. ENDPROC
  31082. PROCEDURE green_assign
  31083. LPARAMETERS tnNewVal
  31084. #if GDIPLUS_CHECK_PARAMS
  31085. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  31086.     error 11 && Function argument
  31087. endif
  31088. #endif
  31089. This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,8))
  31090. ENDPROC
  31091. PROCEDURE blue_access
  31092. RETURN bitand(This.ARGB,0xFF)
  31093. ENDPROC
  31094. PROCEDURE blue_assign
  31095. LPARAMETERS tnNewVal
  31096. #if GDIPLUS_CHECK_PARAMS
  31097. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  31098.     error 11 && Function argument
  31099. endif
  31100. #endif
  31101. This.ARGB = bitor( bitand(This.ARGB,0xFFFFFF00), m.tnNewVal)
  31102. ENDPROC
  31103. PROCEDURE alpha_access
  31104. RETURN bitand(bitrshift(This.ARGB,24),0xFF)
  31105. ENDPROC
  31106. PROCEDURE alpha_assign
  31107. LPARAMETERS tnNewVal
  31108. #if GDIPLUS_CHECK_PARAMS
  31109. if !(vartype(m.tnNewVal)='N' and between(m.tnNewVal,0,255))
  31110.     error 11 && Function argument
  31111. endif
  31112. #endif
  31113. This.ARGB = bitor( bitand(This.ARGB,0xFF00FFFF), bitlshift(m.tnNewVal,24))
  31114. ENDPROC
  31115. PROCEDURE set
  31116. lparameters tnRed, tnGreen, tnBlue, tnAlpha
  31117. #if GDIPLUS_CHECK_PARAMS
  31118. if !(vartype(m.tnRed)='N' and between(m.tnRed,0,255) ;
  31119.     and vartype(m.tnGreen)='N' and between(m.tnGreen,0,255) ;
  31120.     and vartype(m.tnBlue)='N' and between(m.tnBlue,0,255) ;
  31121.     and vartype(m.tnAlpha)='L' or (vartype(m.tnAlpha)='N' and between(m.tnAlpha,0,255)))
  31122.     error 11 && Function argument
  31123. endif
  31124. #endif
  31125. This.ARGB = ;
  31126.     iif(vartype(m.tnAlpha)='N',0x1000000*m.tnAlpha,0xFF000000) ;
  31127.     + 0x10000*m.tnRed ;
  31128.     + 0x100 * m.tnGreen ;
  31129.     + m.tnBlue
  31130. ENDPROC
  31131. PROCEDURE clone
  31132. lparameters toOtherColor as GpColor
  31133. #if GDIPLUS_CHECK_PARAMS
  31134. if !(vartype(m.toOtherColor)='O' and pemstatus(toOtherColor,'argb',5))
  31135.     error 11 && Function argument
  31136.     return .F.
  31137. endif
  31138. #endif
  31139. This.ARGB = m.toOtherColor.ARGB
  31140. ENDPROC
  31141. PROCEDURE Init
  31142. lparameters tnRedOrARGB as Integer, tnGreen as Integer, tnBlue as Integer, tnAlpha as integer
  31143. #if GDIPLUS_CHECK_PARAMS
  31144. if !(inlist(pcount(),0,1,3,4))
  31145.     error 11 && Function argument
  31146.     return .F.
  31147. endif
  31148. #endif
  31149. if not dodefault()
  31150.     return .F.
  31151. endif
  31152. do case
  31153. case pcount()=1
  31154.     #if GDIPLUS_CHECK_PARAMS
  31155.     if !(vartype(m.tnRedOrARGB)='N')
  31156.         error 11 && Function argument
  31157.     endif
  31158.     #endif
  31159.     This.ARGB = int(m.tnRedOrARGB)
  31160. case pcount()>=3
  31161.     This.Set(tnRedOrARGB, tnGreen, tnBlue, m.tnAlpha )
  31162. endcase
  31163. ENDPROC
  31164. PROCEDURE create
  31165. lparameters tnStyle, tvForeColor, tvBackColor
  31166. * tnStyle must be HatchStyle constant
  31167. #if GDIPLUS_CHECK_PARAMS
  31168. if !(vartype(m.tnStyle)='N')
  31169.     error 11 && function argument
  31170.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31171.     return .F.
  31172. endif
  31173. #endif
  31174. this.Destroy()
  31175. local nHandle
  31176. nHandle = 0
  31177. Declare Integer GdipCreateHatchBrush In GDIPlus.Dll ;
  31178.     integer nHatchStyle, integer nForeColor, integer nBackColor, Integer @nBrush
  31179. This.gdipStatus = GdipCreateHatchBrush( ;
  31180.     m.tnStyle ;
  31181. ,    iif(vartype(m.tvForeColor)='O',m.tvForeColor.ARGB,iif(vartype(m.tvForeColor)='N',m.tvForeColor,0xFF000000)) ;
  31182. ,    iif(vartype(m.tvBackColor)='O',m.tvBackColor.ARGB,iif(vartype(m.tvBackColor)='N',m.tvBackColor,0xFFFFFFFF)) ;
  31183. ,    @nHandle)
  31184. This.SetHandle(m.nHandle,.T.)
  31185. return GDIPLUS_STATUS_OK == This.gdipStatus
  31186. ENDPROC
  31187. PROCEDURE foregroundcolor_access
  31188. #if GDIPLUS_CHECK_OBJECT
  31189. if This.gdipHandle==0
  31190.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31191.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31192.     return cast(null as I)
  31193. endif
  31194. #endif
  31195. declare integer GdipGetHatchForegroundColor in gdiplus.dll ;
  31196.     integer, integer @
  31197. local nARGB
  31198. nARGB = 0
  31199. This.gdipStatus = GdipGetHatchForegroundColor( This.gdipHandle, @nARGB )
  31200. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  31201. ENDPROC
  31202. PROCEDURE foregroundcolor_assign
  31203. LPARAMETERS tvColor
  31204. error 1743, 'ForegroundColor'
  31205. ENDPROC
  31206. PROCEDURE backgroundcolor_access
  31207. #if GDIPLUS_CHECK_OBJECT
  31208. if This.gdipHandle==0
  31209.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31210.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31211.     return cast(null as I)
  31212. endif
  31213. #endif
  31214. declare integer GdipGetHatchBackgroundColor in gdiplus.dll ;
  31215.     integer, integer @
  31216. local nARGB
  31217. nARGB = 0
  31218. This.gdipStatus = GdipGetHatchBackgroundColor( This.gdipHandle, @nARGB )
  31219. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  31220. ENDPROC
  31221. PROCEDURE backgroundcolor_assign
  31222. LPARAMETERS tvColor
  31223. error 1743, 'BackgroundColor'
  31224. ENDPROC
  31225. PROCEDURE hatchstyle_access
  31226. #if GDIPLUS_CHECK_OBJECT
  31227. if This.gdipHandle==0
  31228.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31229.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31230.     return cast(null as I)
  31231. endif
  31232. #endif
  31233. declare integer GdipGetHatchStyle in gdiplus.dll ;
  31234.     integer, integer @
  31235. local nHatchStyle
  31236. nHatchStyle = 0
  31237. This.gdipStatus = GdipGetHatchStyle( This.gdipHandle, @nHatchStyle )
  31238. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHatchStyle,cast(null as I))
  31239. ENDPROC
  31240. PROCEDURE hatchstyle_assign
  31241. LPARAMETERS vNewVal
  31242. error 1743, 'HatchStyle'
  31243. ENDPROC
  31244. PROCEDURE Init
  31245. lparameters tnStyle, tvForeColor, tvBackColor
  31246. if not dodefault()
  31247.     return .F.
  31248. endif
  31249. if pcount()>0
  31250.     return This.Create(m.tnStyle, m.tvForeColor, m.tvBackColor)
  31251. endif
  31252. ENDPROC
  31253. _flags Attribute flags for this image
  31254. horizontalresolution Horizontal resolution in pixels-per-inch
  31255. verticalresolution Vertical resolution in pixels-per-inch
  31256. imageheight Height of this image
  31257. imagewidth Width of this image
  31258. rawformat Get the format of this image (as a GUID)
  31259. pixelformat Pixel format - see GP_PIXELFORMAT constants
  31260. physicaldimension Get the width and height of this object (returned as a GpSize)
  31261. *createfromfile Create Image object from a file on disk
  31262. *savetofile Save image to a disk file, using specified encoder
  31263. *getthumbnailimage Create a thumbnail at the specified size, return as new GpImage object
  31264. *getencoderclsid Get the CLSID for the Encoder for a specific image format (eg "image/jpeg")
  31265. *getbounds Get a bounding rectangle in the specified units
  31266. *rotateflip Rotate, flip (or both) this image
  31267. *flags_access 
  31268. *flags_assign 
  31269. *horizontalresolution_access 
  31270. *horizontalresolution_assign 
  31271. *verticalresolution_access 
  31272. *verticalresolution_assign 
  31273. *imageheight_access 
  31274. *imageheight_assign 
  31275. *imagewidth_access 
  31276. *imagewidth_assign 
  31277. *rawformat_access 
  31278. *rawformat_assign 
  31279. *pixelformat_access 
  31280. *pixelformat_assign 
  31281. *getdecoderclsid Get the CLSID for the Decoder for a specific image format (eg "image/jpeg")
  31282. *physicaldimension_access 
  31283. *physicaldimension_assign 
  31284. *getencoderparamsfromstring Internal function, parse string into EncoderParameters array
  31285. *getencoderparamsfromarray Internal function, convert array into EncoderParameters array
  31286. *getencoderparaminfo Internal function, get inforrmation about an encoder parameter, given human-facing name
  31287. *getpropertycount Gets the number of properties (pieces of metadata) stored in this Image object
  31288. *getpropertyidlist Gets an array of the property identifiers used in the metadata of this Image object.
  31289. *getpropertyitem Gets a specified property item (piece of metadata) from this Image object
  31290. _memberdata = 
  31291.     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>
  31292. Name = "gpimage"
  31293. PROCEDURE create
  31294. lparameters tvColor, tnWidth as Number, tnUnit as Number
  31295. * tvColor may be ARGB or a Color object
  31296. this.Destroy()
  31297. local nHandle
  31298. nHandle = 0
  31299. Declare Integer GdipCreatePen1 In GDIPlus.Dll ;
  31300.     integer nColor, single fWidth,Integer nUnit, Integer @nPen
  31301. This.GdipStatus = GdipCreatePen1( ;
  31302.     icase(vartype(m.tvColor)='O',m.tvColor.ARGB,vartype(m.tvColor)='N',m.tvColor,0xFF000000) ;
  31303. ,    iif(vartype(m.tnWidth)='N',m.tnWidth,1.0) ;
  31304. ,    iif(vartype(m.tnUnit)='N',m.tnUnit,0) ;
  31305. ,    @nHandle)
  31306. This.SetHandle(m.nHandle,.T.)
  31307. return GDIPLUS_STATUS_OK == This.GdipStatus
  31308. ENDPROC
  31309. PROCEDURE createfrombrush
  31310. lparameters toBrush as Brush, tnWidth as Number, tnUnit as Number
  31311. #if GDIPLUS_CHECK_PARAMS
  31312. if !(vartype(m.toBrush)='O' and m.toPen.gdipHandle<>0)
  31313.     error 11 && Function argument
  31314.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31315.     return .F.
  31316. endif
  31317. #endif
  31318. this.Destroy()
  31319. local nHandle
  31320. nHandle = 0
  31321. Declare Integer GdipCreatePen2 In GDIPlus.Dll ;
  31322.     integer nBrush, single fWidth,Integer nUnit, Integer @nPen
  31323. This.GdipStatus = GdipCreatePen2( ;
  31324.     m.toBrush.GetHandle() ;
  31325. ,    iif(vartype(m.tnWidth)='N',m.tnWidth,1.0) ;
  31326. ,    iif(vartype(m.tnUnit)='N',m.tnUnit,0) ;
  31327. ,    @nHandle)
  31328. This.SetHandle(m.nHandle,.T.)
  31329. return GDIPLUS_STATUS_OK == This.GdipStatus
  31330. ENDPROC
  31331. PROCEDURE pencolor_access
  31332. #if GDIPLUS_CHECK_OBJECT
  31333. if This.gdipHandle==0
  31334.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31335.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31336.     return cast(null as I)
  31337. endif
  31338. #endif
  31339. declare Integer GdipGetPenColor in gdiplus.dll ;
  31340.     integer nPen, integer @ nARGB
  31341. local nARGB
  31342. nARGB = 0
  31343. This.gdipStatus = GdipGetPenColor( This.gdipHandle, @nARGB )
  31344. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31345. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nARGB,cast(null as I))
  31346. ENDPROC
  31347. PROCEDURE pencolor_assign
  31348. LPARAMETERS tvColor
  31349. #if GDIPLUS_CHECK_OBJECT
  31350. if This.gdipHandle==0
  31351.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31352.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31353.     return .F.
  31354. endif
  31355. #endif
  31356. #if GDIPLUS_CHECK_PARAMS
  31357. if !(vartype(m.tvColor)$'ON')
  31358.     error 11 && Function argument
  31359.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31360.     return .F.
  31361. endif
  31362. #endif
  31363. declare Integer GdipSetPenColor in gdiplus.dll ;
  31364.     integer nPen, integer nColor
  31365. This.gdipStatus = GdipSetPenColor( This.gdipHandle,iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor))
  31366. return GDIPLUS_STATUS_OK == This.gdipStatus
  31367. ENDPROC
  31368. PROCEDURE penwidth_access
  31369. #if GDIPLUS_CHECK_OBJECT
  31370. if This.gdipHandle==0
  31371.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31372.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31373.     return cast(null as B)
  31374. endif
  31375. #endif
  31376. declare Integer GdipGetPenWidth in gdiplus.dll ;
  31377.     integer nPen, single @ fWidth
  31378. local nWidth
  31379. nWidth = 0.0
  31380. This.gdipStatus = GdipGetPenWidth( This.gdipHandle, @nWidth )
  31381. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31382. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nWidth,cast(null as B))
  31383. ENDPROC
  31384. PROCEDURE penwidth_assign
  31385. LPARAMETERS tnNewWidth
  31386. #if GDIPLUS_CHECK_PARAMS
  31387. if !(vartype(m.tnNewWidth)='N')
  31388.     error 11 && Function argument
  31389.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31390.     return .F.
  31391. endif
  31392. #endif
  31393. #if GDIPLUS_CHECK_OBJECT
  31394. if This.gdipHandle==0
  31395.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31396.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31397.     return .F.
  31398. endif
  31399. #endif
  31400. declare Integer GdipSetPenWidth in gdiplus.dll ;
  31401.     integer nPen, single fWidth
  31402. This.gdipStatus = GdipSetPenWidth( This.gdipHandle,m.tnNewWidth)
  31403. return GDIPLUS_STATUS_OK == This.gdipStatus
  31404. ENDPROC
  31405. PROCEDURE pentype_access
  31406. #if GDIPLUS_CHECK_OBJECT
  31407. if This.gdipHandle==0
  31408.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31409.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31410.     return cast(null as I)
  31411. endif
  31412. #endif
  31413. declare Integer GdipGetPenFillType in gdiplus.dll ;
  31414.     integer nPen, integer @ nType
  31415. local nType
  31416. nType = 0
  31417. This.gdipStatus = GdipGetPenFillType( This.gdipHandle, @nType)
  31418. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31419. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31420. ENDPROC
  31421. PROCEDURE pentype_assign
  31422. LPARAMETERS vNewVal
  31423. error 1743, 'PenType'
  31424. ENDPROC
  31425. PROCEDURE alignment_access
  31426. #if GDIPLUS_CHECK_OBJECT
  31427. if This.gdipHandle==0
  31428.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31429.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31430.     return cast(null as I)
  31431. endif
  31432. #endif
  31433. declare Integer GdipGetPenMode in gdiplus.dll ;
  31434.     integer nPen, integer @ nType
  31435. local nType
  31436. nType = 0
  31437. This.gdipStatus = GdipGetPenMode( This.gdipHandle, @nType)
  31438. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31439. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31440. ENDPROC
  31441. PROCEDURE alignment_assign
  31442. LPARAMETERS tnValue
  31443. #if GDIPLUS_CHECK_OBJECT
  31444. if This.gdipHandle==0
  31445.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31446.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31447.     return .F.
  31448. endif
  31449. #endif
  31450. #if GDIPLUS_CHECK_PARAMS
  31451. if !(vartype(m.tnValue)='N')
  31452.     error 11 && Function argument
  31453.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31454.     return .F.
  31455. endif
  31456. #endif
  31457. declare Integer GdipSetPenMode in gdiplus.dll ;
  31458.     integer nPen, integer nValue
  31459. This.gdipStatus = GdipSetPenMode( This.gdipHandle,m.tnValue)
  31460. return GDIPLUS_STATUS_OK == This.gdipStatus
  31461. ENDPROC
  31462. PROCEDURE miterlimit_access
  31463. #if GDIPLUS_CHECK_OBJECT
  31464. if This.gdipHandle==0
  31465.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31466.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31467.     return cast(null as B)
  31468. endif
  31469. #endif
  31470. declare Integer GdipGetPenMiterLimit in gdiplus.dll ;
  31471.     integer nPen, single @ nLimit
  31472. local nLimit
  31473. nLimit = 0.0
  31474. This.gdipStatus = GdipGetPenMiterLimit( This.gdipHandle, @nLimit)
  31475. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31476. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nLimit,cast(null as B))
  31477. ENDPROC
  31478. PROCEDURE miterlimit_assign
  31479. LPARAMETERS tnNewValue
  31480. #if GDIPLUS_CHECK_PARAMS
  31481. if !(vartype(m.tnNewValue)='N')
  31482.     error 11 && Function argument
  31483.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31484.     return .F.
  31485. endif
  31486. #endif
  31487. #if GDIPLUS_CHECK_OBJECT
  31488. if This.gdipHandle==0
  31489.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31490.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31491.     return .F.
  31492. endif
  31493. #endif
  31494. declare Integer GdipSetPenMiterLimit in gdiplus.dll ;
  31495.     integer nPen, single nValue
  31496. This.gdipStatus = GdipSetPenMiterLimit( This.gdipHandle,m.tnNewValue)
  31497. return GDIPLUS_STATUS_OK == This.gdipStatus
  31498. ENDPROC
  31499. PROCEDURE dashcap_access
  31500. #if GDIPLUS_CHECK_OBJECT
  31501. if This.gdipHandle==0
  31502.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31503.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31504.     return cast(null as I)
  31505. endif
  31506. #endif
  31507. declare Integer GdipGetPenDashCap197819 in gdiplus.dll ;
  31508.     integer nPen, integer @ nType
  31509. local nType
  31510. nType = 0
  31511. This.gdipStatus = GdipGetPenDashCap197819( This.gdipHandle, @nType)
  31512. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31513. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31514. ENDPROC
  31515. PROCEDURE dashcap_assign
  31516. LPARAMETERS tnValue
  31517. #if GDIPLUS_CHECK_OBJECT
  31518. if This.gdipHandle==0
  31519.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31520.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31521.     return .F.
  31522. endif
  31523. #endif
  31524. #if GDIPLUS_CHECK_PARAMS
  31525. if !(vartype(m.tnValue)='N')
  31526.     error 11 && Function argument
  31527.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31528.     return .F.
  31529. endif
  31530. #endif
  31531. declare Integer GdipSetPenDashCap197819 in gdiplus.dll ;
  31532.     integer nPen, integer nValue
  31533. This.gdipStatus = GdipSetPenDashCap197819( This.gdipHandle,m.tnValue)
  31534. return GDIPLUS_STATUS_OK == This.gdipStatus
  31535. ENDPROC
  31536. PROCEDURE linejoin_access
  31537. #if GDIPLUS_CHECK_OBJECT
  31538. if This.gdipHandle==0
  31539.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31540.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31541.     return cast(null as I)
  31542. endif
  31543. #endif
  31544. declare Integer GdipGetPenLineJoin in gdiplus.dll ;
  31545.     integer nPen, integer @ nType
  31546. local nType
  31547. nType = 0
  31548. This.gdipStatus = GdipGetPenLineJoin( This.gdipHandle, @nType)
  31549. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31550. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31551. ENDPROC
  31552. PROCEDURE linejoin_assign
  31553. LPARAMETERS tnValue
  31554. #if GDIPLUS_CHECK_OBJECT
  31555. if This.gdipHandle==0
  31556.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31557.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31558.     return .F.
  31559. endif
  31560. #endif
  31561. #if GDIPLUS_CHECK_PARAMS
  31562. if !(vartype(m.tnValue)='N')
  31563.     error 11 && Function argument
  31564.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31565.     return .F.
  31566. endif
  31567. #endif
  31568. declare Integer GdipSetPenLineJoin in gdiplus.dll ;
  31569.     integer nPen, integer nValue
  31570. This.gdipStatus = GdipSetPenLineJoin( This.gdipHandle,m.tnValue)
  31571. return GDIPLUS_STATUS_OK == This.gdipStatus
  31572. ENDPROC
  31573. PROCEDURE startcap_access
  31574. #if GDIPLUS_CHECK_OBJECT
  31575. if This.gdipHandle==0
  31576.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31577.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31578.     return cast(null as I)
  31579. endif
  31580. #endif
  31581. declare Integer GdipGetPenStartCap in gdiplus.dll ;
  31582.     integer nPen, integer @ nType
  31583. local nType
  31584. nType = 0
  31585. This.gdipStatus = GdipGetPenStartCap( This.gdipHandle, @nType)
  31586. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31587. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31588. ENDPROC
  31589. PROCEDURE startcap_assign
  31590. LPARAMETERS tnValue
  31591. #if GDIPLUS_CHECK_OBJECT
  31592. if This.gdipHandle==0
  31593.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31594.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31595.     return .F.
  31596. endif
  31597. #endif
  31598. #if GDIPLUS_CHECK_PARAMS
  31599. if !(vartype(m.tnValue)='N')
  31600.     error 11 && Function argument
  31601.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31602.     return .F.
  31603. endif
  31604. #endif
  31605. declare Integer GdipSetPenStartCap in gdiplus.dll ;
  31606.     integer nPen, integer nValue
  31607. This.gdipStatus = GdipSetPenStartCap( This.gdipHandle,m.tnValue)
  31608. return GDIPLUS_STATUS_OK == This.gdipStatus
  31609. ENDPROC
  31610. PROCEDURE endcap_access
  31611. #if GDIPLUS_CHECK_OBJECT
  31612. if This.gdipHandle==0
  31613.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31614.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31615.     return cast(null as I)
  31616. endif
  31617. #endif
  31618. declare Integer GdipGetPenEndCap in gdiplus.dll ;
  31619.     integer nPen, integer @ nType
  31620. local nType
  31621. nType = 0
  31622. This.gdipStatus = GdipGetPenEndCap( This.gdipHandle, @nType)
  31623. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31624. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31625. ENDPROC
  31626. PROCEDURE endcap_assign
  31627. LPARAMETERS tnValue
  31628. #if GDIPLUS_CHECK_OBJECT
  31629. if This.gdipHandle==0
  31630.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31631.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31632.     return .F.
  31633. endif
  31634. #endif
  31635. #if GDIPLUS_CHECK_PARAMS
  31636. if !(vartype(m.tnValue)='N')
  31637.     error 11 && Function argument
  31638.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31639.     return .F.
  31640. endif
  31641. #endif
  31642. declare Integer GdipSetPenEndCap in gdiplus.dll ;
  31643.     integer nPen, integer nValue
  31644. This.gdipStatus = GdipSetPenEndCap( This.gdipHandle,m.tnValue)
  31645. return GDIPLUS_STATUS_OK == This.gdipStatus
  31646. ENDPROC
  31647. PROCEDURE dashstyle_access
  31648. #if GDIPLUS_CHECK_OBJECT
  31649. if This.gdipHandle==0
  31650.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31651.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31652.     return cast(null as I)
  31653. endif
  31654. #endif
  31655. declare Integer GdipGetPenDashStyle in gdiplus.dll ;
  31656.     integer nPen, integer @ nType
  31657. local nType
  31658. nType = 0
  31659. This.gdipStatus = GdipGetPenDashStyle( This.gdipHandle, @nType)
  31660. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31661. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31662. ENDPROC
  31663. PROCEDURE dashstyle_assign
  31664. LPARAMETERS tnValue
  31665. #if GDIPLUS_CHECK_OBJECT
  31666. if This.gdipHandle==0
  31667.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31668.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31669.     return .F.
  31670. endif
  31671. #endif
  31672. #if GDIPLUS_CHECK_PARAMS
  31673. if !(vartype(m.tnValue)='N')
  31674.     error 11 && Function argument
  31675.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31676.     return .F.
  31677. endif
  31678. #endif
  31679. declare Integer GdipSetPenDashStyle in gdiplus.dll ;
  31680.     integer nPen, integer nValue
  31681. This.gdipStatus = GdipSetPenDashStyle( This.gdipHandle,m.tnValue)
  31682. return GDIPLUS_STATUS_OK == This.gdipStatus
  31683. ENDPROC
  31684. PROCEDURE dashoffset_access
  31685. #if GDIPLUS_CHECK_OBJECT
  31686. if This.gdipHandle==0
  31687.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31688.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31689.     return cast(null as B)
  31690. endif
  31691. #endif
  31692. declare Integer GdipGetPenDashOffset in gdiplus.dll ;
  31693.     integer nPen, single @ nType
  31694. local nOffset
  31695. nOffset = 0.0
  31696. This.gdipStatus = GdipGetPenDashOffset( This.gdipHandle, @nOffset)
  31697. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31698. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nOffset,cast(null as B))
  31699. ENDPROC
  31700. PROCEDURE dashoffset_assign
  31701. LPARAMETERS tnNewValue
  31702. #if GDIPLUS_CHECK_PARAMS
  31703. if !(vartype(m.tnNewValue)='N')
  31704.     error 11 && Function argument
  31705.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31706.     return .F.
  31707. endif
  31708. #endif
  31709. #if GDIPLUS_CHECK_OBJECT
  31710. if This.gdipHandle==0
  31711.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31712.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31713.     return .F.
  31714. endif
  31715. #endif
  31716. declare Integer GdipSetPenDashOffset in gdiplus.dll ;
  31717.     integer nPen, single nValue
  31718. This.gdipStatus = GdipSetPenDashOffset( This.gdipHandle,m.tnNewValue)
  31719. return GDIPLUS_STATUS_OK == This.gdipStatus
  31720. ENDPROC
  31721. PROCEDURE penunit_access
  31722. #if GDIPLUS_CHECK_OBJECT
  31723. if This.gdipHandle==0
  31724.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31725.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31726.     return cast(null as I)
  31727. endif
  31728. #endif
  31729. declare Integer GdipGetPenUnit in gdiplus.dll ;
  31730.     integer nPen, integer @ nType
  31731. local nType
  31732. nType = 0
  31733. This.gdipStatus = GdipGetPenUnit( This.gdipHandle, @nType)
  31734. * if !(GDIPLUS_STATUS_OK==This.gdipStatus) then error?
  31735. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nType,cast(null as I))
  31736. ENDPROC
  31737. PROCEDURE penunit_assign
  31738. LPARAMETERS tnValue
  31739. #if GDIPLUS_CHECK_OBJECT
  31740. if This.gdipHandle==0
  31741.     error _GDIPLUS_NOGDIPOBJECT_LOC
  31742.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  31743.     return .F.
  31744. endif
  31745. #endif
  31746. #if GDIPLUS_CHECK_PARAMS
  31747. if !(vartype(m.tnValue)='N')
  31748.     error 11 && Function argument
  31749.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31750.     return .F.
  31751. endif
  31752. #endif
  31753. declare Integer GdipSetPenUnit in gdiplus.dll ;
  31754.     integer nPen, integer nValue
  31755. This.gdipStatus = GdipSetPenUnit( This.gdipHandle,m.tnValue)
  31756. return GDIPLUS_STATUS_OK == This.gdipStatus
  31757. ENDPROC
  31758. PROCEDURE clone
  31759. lparameters toPen as GpPen
  31760. this.Destroy()
  31761. local nHandle
  31762. nHandle = 0
  31763. #if GDIPLUS_CHECK_PARAMS
  31764. if !(vartype(m.toPen)='O' and m.toPen.gdipHandle<>0)
  31765.     error 11 && Function argument
  31766.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31767.     return .F.
  31768. endif
  31769. #endif
  31770. Declare Integer GdipClonePen In GDIPlus.Dll ;
  31771.     integer nPen, integer @nClonePen
  31772. This.GdipStatus = GdipClonePen( ;
  31773.     m.toPen.gdipHandle ;
  31774. ,    @nHandle)
  31775. this.gdipHandle= m.nHandle
  31776. return GDIPLUS_STATUS_OK == This.GdipStatus
  31777. ENDPROC
  31778. PROCEDURE Init
  31779. lparameters tvColor, tnWidth as Number, tnUnit as Number
  31780. if not dodefault()
  31781.     return .F.
  31782. endif
  31783. if pcount()>0
  31784.     return This.Create(m.tvColor,m.tnWidth,m.tnUnit)
  31785. endif
  31786. ENDPROC
  31787. PROCEDURE Destroy
  31788. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  31789.     Declare Integer GdipDeletePen In GDIPlus.Dll ;
  31790.         integer nPen
  31791.     GdipDeletePen(This.GdipHandle)
  31792.     This.GdipHandle=0
  31793.     This.gdipOwnsThisHandle=.F.
  31794. endif
  31795. ENDPROC
  31796. GPGRAPHICS
  31797. INTEGER
  31798. INTEGER
  31799. GdipCreateBitmapFromGraphics
  31800. gdiplus.dll
  31801. TOGRAPHICS
  31802. NWIDTH
  31803. NHEIGHT
  31804. GDIPSTATUS
  31805. GDIPCREATEBITMAPFROMGRAPHICS
  31806. GDIPLUS
  31807. DESTROY
  31808. NHANDLE    
  31809. GETHANDLE    
  31810. SETHANDLEM
  31811. INTEGER
  31812. INTEGER
  31813. INTEGER
  31814. GdipCreateBitmapFromScan0
  31815. gdiplus.dll
  31816. TNWIDTH
  31817. TNHEIGHT
  31818. TNPIXELFORMAT
  31819. GDIPSTATUS
  31820. GDIPCREATEBITMAPFROMSCAN0
  31821. GDIPLUS
  31822. DESTROY
  31823. NHANDLE    
  31824. SETHANDLE{
  31825. INTEGER
  31826. INTEGER
  31827. GDI+ object not created or associated
  31828. GdipBitmapSetPixel
  31829. gdiplus.dll
  31830. TVCOLOR
  31831. GDIPSTATUS
  31832. GDIPHANDLE
  31833. GDIPBITMAPSETPIXEL
  31834. GDIPLUS
  31835. ARGBR
  31836. INTEGER
  31837. INTEGER
  31838. GDI+ object not created or associated
  31839. GdipBitmapGetPixel
  31840. gdiplus.dll
  31841. GDIPSTATUS
  31842. GDIPHANDLE
  31843. GDIPBITMAPGETPIXEL
  31844. GDIPLUS
  31845. NARGB
  31846. STRING
  31847. LOGICAL
  31848. GdipCreateBitmapFromFileICM
  31849. gdiplus.dll
  31850. GdipCreateBitmapFromFile
  31851. gdiplus.dll
  31852. TCFILENAME
  31853. TLUSEEMBEDDEDCOLORMGMT
  31854. GDIPSTATUS
  31855. GDIPCREATEBITMAPFROMFILEICM
  31856. GDIPLUS
  31857. DESTROY
  31858. NHANDLE    
  31859. SETHANDLE
  31860. GDIPCREATEBITMAPFROMFILE
  31861. TVPARAM1
  31862. TVPARAM2
  31863. TVPARAM3
  31864. CREATE
  31865. NUMBER
  31866. NUMBER
  31867. GDI+ object not created or associated
  31868. GdipBitmapSetResolution
  31869. gdiplus.dll
  31870. TNDPIX
  31871. TNDPIY
  31872. GDIPSTATUS
  31873. GDIPHANDLE
  31874. GDIPBITMAPSETRESOLUTION
  31875. GDIPLUS
  31876. createfromgraphics,
  31877. create
  31878. setpixel
  31879. getpixel
  31880. createfromfileQ
  31881. setresolution
  31882. TCPOINT
  31883. TCPOINTF
  31884. NUMBER
  31885. NUMBER
  31886. TXORPOINT
  31887. CLONE
  31888. GDIPPOINTF
  31889. CREATE
  31890. GPPOINT
  31891. TOOTHERPOINT
  31892. gdippoint_access,
  31893. gdippoint_assignd
  31894. gdippointf_access
  31895. gdippointf_assign;
  31896. create
  31897. clone
  31898. 7PROCEDURE createfromgraphics
  31899. lparameters toGraphics as GpGraphics, nWidth as integer, nHeight as integer
  31900. #if GDIPLUS_CHECK_PARAMS
  31901. if !(vartype(toGraphics)$'ON' and vartype(m.nWidth)='N' and vartype(m.nHeight)='N')
  31902.     error 11 && Function argument
  31903.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31904.     return .F.
  31905. endif
  31906. #endif
  31907. declare integer GdipCreateBitmapFromGraphics in gdiplus.dll ;
  31908.     integer nWidth, integer nHeight, integer nGraphics, integer @ nImage
  31909. this.Destroy()
  31910. local nHandle
  31911. nHandle = 0
  31912. This.gdipStatus = GdipCreateBitmapFromGraphics( ;
  31913.     m.nWidth, m.nHeight ;
  31914.     , iif(vartype(m.toGraphics)='O',m.toGraphics.GetHandle(),m.toGraphics) ;
  31915. ,    @nHandle)
  31916. this.SetHandle(m.nHandle,.T.)
  31917. return GDIPLUS_STATUS_OK == This.gdipStatus
  31918. ENDPROC
  31919. PROCEDURE create
  31920. LPARAMETERS tnWidth as Integer, tnHeight as Integer, tnPixelFormat as Integer
  31921. #if GDIPLUS_CHECK_PARAMS
  31922. if !(vartype(tnWidth)='N' AND vartype(tnHeight)='N' AND vartype(tnPixelFormat )$'LN')
  31923.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31924.     return .F.
  31925. endif
  31926. #endif
  31927. declare integer GdipCreateBitmapFromScan0 in gdiplus.dll ;
  31928.     integer nWidth, integer nHeight, integer nStride;
  31929.     , integer nPixelFormat ;
  31930.     , string @ cScan0, integer @ nImage
  31931. this.Destroy()
  31932. local nHandle
  31933. nHandle = 0
  31934. This.gdipStatus = GdipCreateBitmapFromScan0( ;
  31935.     m.tnWidth, m.tnHeight, 0 ;
  31936.     , iif(vartype(m.tnPixelFormat)='N',m.tnPixelFormat,GDIPLUS_PIXELFORMAT_32bppARGB) ;
  31937.     , 0 ;
  31938.     ,    @nHandle)
  31939. this.SetHandle(m.nHandle,.T.)
  31940. return GDIPLUS_STATUS_OK == This.gdipStatus
  31941. ENDPROC
  31942. PROCEDURE setpixel
  31943. lparameters tX as integer, tY as integer, tvColor
  31944. #if GDIPLUS_CHECK_PARAMS
  31945. if !(vartype(m.tx)='N' and vartype(m.ty)='N' and ;
  31946.  (vartype(m.tvColor)='N' or (vartype(m.tvColor)='O' and pemstatus(m.tvColor,'argb',5))))
  31947.     error 11
  31948.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31949.     return .F.
  31950. endif
  31951.  #endif
  31952.  #if GDIPLUS_CHECK_OBJECT
  31953.  if This.gdipHandle==0
  31954.      error _GDIPLUS_NOGDIPOBJECT_LOC
  31955.  endif
  31956.  #endif
  31957.  declare integer GdipBitmapSetPixel in gdiplus.dll ;
  31958.      integer nBitmap, integer x, integer y, integer nARGB
  31959.  This.gdipStatus = GdipBitmapSetPixel( ;
  31960.      This.gdipHandle, m.tx, m.ty ;
  31961.      , iif(vartype(m.tvColor)='N',m.tvColor,m.tvColor.argb) ;
  31962.  return GDIPLUS_STATUS_OK == This.gdipStatus
  31963. ENDPROC
  31964. PROCEDURE getpixel
  31965. lparameters tX as integer, tY as integer
  31966. #if GDIPLUS_CHECK_PARAMS
  31967. if !(vartype(m.tx)='N' and vartype(m.ty)='N')
  31968.     error 11 && function argument
  31969.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31970.     return cast(null as I)
  31971.  endif
  31972.  #endif
  31973.  #if GDIPLUS_CHECK_OBJECT
  31974.  if This.gdipHandle==0
  31975.      error _GDIPLUS_NOGDIPOBJECT_LOC
  31976.  endif
  31977.  #endif
  31978.  declare integer GdipBitmapGetPixel in gdiplus.dll ;
  31979.      integer nBitmap, integer x, integer y, integer @ nARGB
  31980.  local nARGB
  31981.  nARGB = 0
  31982.  This.gdipStatus = GdipBitmapGetPixel( ;
  31983.      This.gdipHandle, m.tx, m.ty, @nARGB )
  31984.  return iif(GDIPLUS_STATUS_OK == This.gdipStatus,m.nARGB,cast(null as I))
  31985. ENDPROC
  31986. PROCEDURE createfromfile
  31987. lparameters tcFilename as String, tlUseEmbeddedColorMgmt as Logical
  31988. #if GDIPLUS_CHECK_PARAMS
  31989. if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename) and vartype(m.tlUseEmbeddedColorMgmt)='L')
  31990.     error 11
  31991.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  31992.     return .F.
  31993. endif
  31994. #endif
  31995. if m.tlUseEmbeddedColorMgmt
  31996.     declare integer GdipCreateBitmapFromFileICM in gdiplus.dll ;
  31997.         string wFilename, integer @ nImage
  31998.     this.Destroy()
  31999.     local nHandle
  32000.     nHandle = 0
  32001.     This.gdipStatus = GdipCreateBitmapFromFileICM( ;
  32002.         strconv(m.tcFilename+chr(0),5) ;
  32003.     ,    @nHandle)
  32004.     this.SetHandle(m.nHandle,.T.)
  32005.     return GDIPLUS_STATUS_OK == This.gdipStatus
  32006.     declare integer GdipCreateBitmapFromFile in gdiplus.dll ;
  32007.         string wFilename, integer @ nImage
  32008.     this.Destroy()
  32009.     local nHandle
  32010.     nHandle = 0
  32011.     This.gdipStatus = GdipCreateBitmapFromFile( ;
  32012.         strconv(m.tcFilename+chr(0),5) ;
  32013.     ,    @nHandle)
  32014.     this.SetHandle(m.nHandle,.T.)
  32015.     return GDIPLUS_STATUS_OK == This.gdipStatus
  32016. endif
  32017. ENDPROC
  32018. PROCEDURE Init
  32019. lparameters tvParam1, tvParam2, tvParam3
  32020. if vartype(m.tvParam1)+vartype(m.tvParam2)='NN'
  32021.     * Width and height
  32022.     if not dodefault()    && Bypasses 
  32023.         return .F.
  32024.     endif
  32025.     return This.Create( m.tvParam1, m.tvParam2, m.tvParam3 )
  32026.     return dodefault(m.tvParam1,m.tvParam2)
  32027. endif
  32028. ENDPROC
  32029. PROCEDURE setresolution
  32030. lparameters tnDPIX as number, tnDPIY as number
  32031. #if GDIPLUS_CHECK_PARAMS
  32032. if !(vartype(m.tnDPIX )='N' and vartype(m.tnDPIY )='N')
  32033.     error 11
  32034.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32035.     return .F.
  32036. endif
  32037. #endif
  32038. #if GDIPLUS_CHECK_OBJECT
  32039. if This.gdipHandle==0
  32040.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32041. endif
  32042. #endif
  32043. declare integer GdipBitmapSetResolution in gdiplus.dll ;
  32044.      integer nBitmap, single dpix, single dpiy
  32045. This.gdipStatus = GdipBitmapSetResolution ( ;
  32046.      This.gdipHandle, m.tnDPIX , m.tnDPIY ;
  32047. return GDIPLUS_STATUS_OK == This.gdipStatus
  32048. ENDPROC
  32049. OPROCEDURE create
  32050. lparameters ;
  32051.     tvFontNameOrFamily ;    && Font name or Fontfamily (created separately)
  32052.     , tnSize as Number ;            && size in units (default points)
  32053.     , tnStyle as integer ;            && see GDIPLUS_FontStyle_xxx values (default Normal)
  32054.     , tnUnit as integer                && see GDIPLUS_Unit_xxx values (default points)
  32055. #if GDIPLUS_CHECK_PARAMS
  32056. if !((vartype(m.tvFontNameOrFamily )='C' ;
  32057.     or (vartype(m.tvFontNameOrFamily )='O' and m.tvFontNameOrFamily.GetHandle()<>0)) ;
  32058. and vartype(m.tnSize)='N')
  32059.     error 11 && Function argument
  32060.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32061.     return .F.
  32062. endif
  32063. #endif
  32064. local lnStyle as Integer, lnUnit as integer, lnHandle as integer ;
  32065.     , loFamily as GpFontFamily, lnFamily as integer
  32066. lnStyle = evl(m.tnStyle,GDIPLUS_FontStyle_Regular)
  32067. lnUnit = evl(m.tnUnit,GDIPLUS_Unit_World)
  32068. lnHandle = 0
  32069. if vartype(m.tvFontnameOrFamily)='O'
  32070.     lnFamily = m.tvFontNameOrFamily.GetHandle()
  32071.     * Must create ourselves
  32072.     loFamily = This.ObjFactory('gpfont.create', GDIPLUS_CLASS_FONTFAMILY, @tvFontNameOrFamily)
  32073.     lnFamily =iif(vartype(m.loFamily)='O',m.loFamily.GetHandle(),0)
  32074. endif
  32075. this.Destroy()
  32076. Declare Integer GdipCreateFont In GDIPlus.Dll ;
  32077.     integer nFontFamily, single fSize, integer nStyle, integer nUnit, integer @nHandle
  32078. if 0!=m.lnFamily
  32079.     * Try creating font
  32080.     This.gdipStatus = GdipCreateFont( m.lnFamily, m.tnSize,m.lnStyle,m.lnUnit,@lnHandle)
  32081.     if GDIPLUS_STATUS_OK==This.gdipStatus
  32082.         * That worked
  32083.         This.SetHandle(m.lnHandle,.T.)
  32084.         return .T.
  32085.     endif
  32086. endif
  32087. * If here, either font family is invalid or font creation failed
  32088. * Try from Generic family
  32089. lnFamily = 0
  32090. declare integer GdipGetGenericFontFamilySansSerif in gdiplus.dll integer @
  32091. GdipGetGenericFontFamilySansSerif( @lnFamily )
  32092. This.gdipStatus = GdipCreateFont( m.lnFamily, m.tnSize,m.lnStyle,m.lnUnit,@lnHandle)
  32093. This.SetHandle(m.lnHandle,.T.)
  32094. return GDIPLUS_STATUS_OK == This.GdipStatus
  32095. ENDPROC
  32096. PROCEDURE style_access
  32097. #if GDIPLUS_CHECK_OBJECT
  32098. if This.gdipHandle==0
  32099.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32100.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32101.     return cast(null as I)
  32102. endif
  32103. #endif
  32104. declare integer GdipGetFontStyle in gdiplus.dll ;
  32105.     integer nFont, integer @
  32106. local nStyle
  32107. nStyle= 0
  32108. This.gdipStatus = GdipGetFontStyle( This.gdipHandle, @nStyle)
  32109. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nStyle,cast(null as I))
  32110. ENDPROC
  32111. PROCEDURE style_assign
  32112. LPARAMETERS vNewVal
  32113. error 1743, 'Style'
  32114. ENDPROC
  32115. PROCEDURE unit_access
  32116. #if GDIPLUS_CHECK_OBJECT
  32117. if This.gdipHandle==0
  32118.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32119.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32120.     return cast(null as I)
  32121. endif
  32122. #endif
  32123. declare integer GdipGetFontUnit in gdiplus.dll ;
  32124.     integer nFont, integer @
  32125. local nUnit
  32126. nUnit = 0
  32127. This.gdipStatus = GdipGetFontUnit( This.gdipHandle, @nUnit)
  32128. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nUnit,cast(null as I))
  32129. ENDPROC
  32130. PROCEDURE unit_assign
  32131. LPARAMETERS vNewVal
  32132. error 1743, 'Unit'
  32133. ENDPROC
  32134. PROCEDURE getheight
  32135. lparameters tvGraphics
  32136. local lnGraphics
  32137. do case
  32138. case vartype(m.tvGraphics)='N'
  32139.     lnGraphics = m.tvGraphics
  32140. case vartype(m.tvGraphics)='O'
  32141.     lnGraphics = m.tvGraphics.GetHandle()
  32142. otherwise
  32143.     error 11
  32144.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32145.     return cast(null as B)
  32146. endcase
  32147. #if GDIPLUS_CHECK_PARAMS
  32148. if 0==m.lnGraphics
  32149.     error 11 && Function argument
  32150.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32151.     return cast(null as B)
  32152. endif
  32153. #endif
  32154. declare integer GdipGetFontHeight in gdiplus.dll ;
  32155.     integer nFont, integer nGraphics, single @ fHeight
  32156. local nHeight
  32157. nHeight = 0.0
  32158. This.gdipStatus = GdipGetFontHeight(This.gdipHandle,m.lnGraphics,@nHeight)
  32159. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHeight,cast(null as B))
  32160. ENDPROC
  32161. PROCEDURE fontname_access
  32162. #if GDIPLUS_CHECK_OBJECT
  32163. if This.gdipHandle==0
  32164.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32165.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32166.     return cast(null as C)
  32167. endif
  32168. #endif
  32169. declare integer GdipGetFamily in gdiplus.dll ;
  32170.     integer nFont, integer @ nFamily
  32171. declare integer GdipGetFamilyName in gdiplus.dll ;
  32172.     integer nFamily, string @ cUnicodeName, integer nLangID
  32173. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
  32174. local nFamily as Number, cUnicodeName as String
  32175. nFamily = 0
  32176. cUnicodeName= replicate(chr(0), 64 )    && 64=LF_FACESIZE*2
  32177. This.gdipStatus = GdipGetFamily( This.gdipHandle, @nFamily ) && LANG_NEUTRAL
  32178. if (GDIPLUS_STATUS_OK!=This.gdipStatus)
  32179.     return cast(null as C)
  32180. endif
  32181. This.gdipStatus = GdipGetFamilyName( m.nFamily, @cUnicodeName, 0x00 ) && LANG_NEUTRAL
  32182. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32183.      , strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
  32184.      , cast(null as C) )
  32185. ENDPROC
  32186. PROCEDURE fontname_assign
  32187. LPARAMETERS vNewVal
  32188. error 1743,'FontName'
  32189. ENDPROC
  32190. PROCEDURE size_access
  32191. #if GDIPLUS_CHECK_OBJECT
  32192. if This.gdipHandle==0
  32193.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32194.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32195.     return cast(null as B)
  32196. endif
  32197. #endif
  32198. declare integer GdipGetFontSize in gdiplus.dll ;
  32199.     integer nFont, single  @
  32200. local nSize
  32201. nSize= 0.0
  32202. This.gdipStatus = GdipGetFontSize( This.gdipHandle, @nSize)
  32203. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nSize,cast(null as B))
  32204. ENDPROC
  32205. PROCEDURE size_assign
  32206. LPARAMETERS vNewVal
  32207. error 1743, 'Size'
  32208. ENDPROC
  32209. PROCEDURE getheightgivendpi
  32210. lparameters tnDPI as Number
  32211. #if GDIPLUS_CHECK_OBJECT
  32212. if This.gdipHandle==0
  32213.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32214.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32215.     return cast(null as B)
  32216. endif
  32217. #endif
  32218. #if GDIPLUS_CHECK_PARAMS
  32219. if vartype(m.tnDPI)!='N'
  32220.     error 11 && Function argument
  32221. endif
  32222. #endif
  32223. declare integer GdipGetFontHeightGivenDPI in gdiplus.dll ;
  32224.     integer nFont, single nDPI, single @ fHeight
  32225. local nHeight
  32226. nHeight = 0.0
  32227. This.gdipStatus = GdipGetFontHeight(This.gdipHandle,m.tnDPI,@nHeight)
  32228. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHeight,cast(null as B))
  32229. ENDPROC
  32230. PROCEDURE Init
  32231. lparameters ;
  32232.     tvFontNameOrFamily ;    && Font name, or Fontfamily (created separately)
  32233.     , tnSize as Number ;            && size in units (default points)
  32234.     , tnStyle as integer ;            && see GDIPLUS_FontStyle_xxx values (default Normal)
  32235.     , tnUnit as integer                && see GDIPLUS_Unit_xxx values (default points)
  32236. if not dodefault()
  32237.     return .F.
  32238. endif
  32239. if pcount()>0
  32240.     return This.Create(m.tvFontNameOrFamily,m.tnSize,m.tnStyle,m.tnUnit)
  32241. endif
  32242. return .T.
  32243. ENDPROC
  32244. PROCEDURE Destroy
  32245. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  32246.     Declare Integer GdipDeleteFont In GDIPlus.Dll ;
  32247.         integer nFont
  32248.     GdipDeleteFont(This.GdipHandle)
  32249.     This.GdipHandle=0
  32250.     This.gdipOwnsThisHandle=.F.
  32251. endif
  32252. ENDPROC
  32253. PROCEDURE clone
  32254. lparameters toFont as GpFont
  32255. this.Destroy()
  32256. local nHandle
  32257. nHandle = 0
  32258. #if GDIPLUS_CHECK_PARAMS
  32259. if !(vartype(m.toFont)='O' and m.toFont.gdipHandle<>0)
  32260.     error 11 && Function argument
  32261.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32262.     return .F.
  32263. endif
  32264. #endif
  32265. Declare Integer GdipCloneFont In GDIPlus.Dll ;
  32266.     integer nOriginal, integer @nClone
  32267. This.GdipStatus = GdipCloneFont( ;
  32268.     m.toFont.gdipHandle ;
  32269. ,    @nHandle)
  32270. this.gdipHandle= m.nHandle
  32271. This.gdipOwnsThisHandle = .T.
  32272. return GDIPLUS_STATUS_OK == This.gdipStatus
  32273. ENDPROC
  32274. NUMBER
  32275. INTEGER
  32276. INTEGER
  32277. INTEGER
  32278. INTEGER
  32279. INTEGER
  32280. GPFONTFAMILY
  32281. INTEGER
  32282. gpfont.create
  32283. GpFontFamily
  32284. GdipCreateFont
  32285. GDIPlus.Dll
  32286. GdipGetGenericFontFamilySansSerif
  32287. gdiplus.dll
  32288. TVFONTNAMEORFAMILY
  32289. TNSIZE
  32290. TNSTYLE
  32291. TNUNIT    
  32292. GETHANDLE
  32293. GDIPSTATUS
  32294. LNSTYLE
  32295. LNUNIT
  32296. LNHANDLE
  32297. LOFAMILY
  32298. LNFAMILY
  32299. OBJFACTORY
  32300. DESTROY
  32301. GDIPCREATEFONT
  32302. GDIPLUS
  32303. SETHANDLE!
  32304. GDIPGETGENERICFONTFAMILYSANSSERIF
  32305. GDI+ object not created or associated
  32306. GdipGetFontStyle
  32307. gdiplus.dll
  32308. GDIPHANDLE
  32309. GDIPSTATUS
  32310. GDIPGETFONTSTYLE
  32311. GDIPLUS
  32312. NSTYLE
  32313. Style
  32314. VNEWVAL
  32315. GDI+ object not created or associated
  32316. GdipGetFontUnit
  32317. gdiplus.dll
  32318. GDIPHANDLE
  32319. GDIPSTATUS
  32320. GDIPGETFONTUNIT
  32321. GDIPLUS
  32322. NUNIT
  32323. VNEWVALr
  32324. GdipGetFontHeight
  32325. gdiplus.dll
  32326. TVGRAPHICS
  32327. LNGRAPHICS    
  32328. GETHANDLE
  32329. GDIPSTATUS
  32330. GDIPGETFONTHEIGHT
  32331. GDIPLUS
  32332. NHEIGHT
  32333. GDIPHANDLE
  32334. GDI+ object not created or associated
  32335. GdipGetFamily
  32336. gdiplus.dll
  32337. GdipGetFamilyName
  32338. gdiplus.dll
  32339. lstrlenW
  32340. kernel32.dllQ
  32341. __win32_lstrlenW
  32342. NUMBER
  32343. STRING
  32344. GDIPHANDLE
  32345. GDIPSTATUS
  32346. GDIPGETFAMILY
  32347. GDIPLUS
  32348. GDIPGETFAMILYNAME
  32349. LSTRLENW
  32350. KERNEL32
  32351. __WIN32_LSTRLENW
  32352. NFAMILY
  32353. CUNICODENAME"
  32354. FontName
  32355. VNEWVAL
  32356. GDI+ object not created or associated
  32357. GdipGetFontSize
  32358. gdiplus.dll
  32359. GDIPHANDLE
  32360. GDIPSTATUS
  32361. GDIPGETFONTSIZE
  32362. GDIPLUS
  32363. NSIZE
  32364. VNEWVAL6
  32365. NUMBER
  32366. GDI+ object not created or associated
  32367. GdipGetFontHeightGivenDPI
  32368. gdiplus.dll
  32369. TNDPI
  32370. GDIPHANDLE
  32371. GDIPSTATUS
  32372. GDIPGETFONTHEIGHTGIVENDPI
  32373. GDIPLUS
  32374. NHEIGHT
  32375. GDIPGETFONTHEIGHT
  32376. NUMBER
  32377. INTEGER
  32378. INTEGER
  32379. TVFONTNAMEORFAMILY
  32380. TNSIZE
  32381. TNSTYLE
  32382. TNUNIT
  32383. CREATEy
  32384. GdipDeleteFont
  32385. GDIPlus.Dll
  32386. GDIPHANDLE
  32387. GDIPOWNSTHISHANDLE
  32388. GDIPDELETEFONT
  32389. GDIPLUS
  32390. GPFONT
  32391. GdipCloneFont
  32392. GDIPlus.Dll
  32393. TOFONT
  32394. DESTROY
  32395. NHANDLE
  32396. GDIPHANDLE
  32397. GDIPSTATUS
  32398. GDIPCLONEFONT
  32399. GDIPLUS
  32400. GDIPOWNSTHISHANDLE
  32401. create,
  32402. style_access*
  32403. style_assign\
  32404. unit_access
  32405. unit_assign
  32406. getheight
  32407. fontname_access
  32408. fontname_assign"
  32409. size_accessQ
  32410. size_assign
  32411. getheightgivendpi
  32412. InitW
  32413. Destroy&
  32414. clone
  32415. GdipCreateSolidFill
  32416. GDIPlus.Dll
  32417. TVCOLOR
  32418. GDIPSTATUS
  32419. DESTROY
  32420. NHANDLE
  32421. GDIPCREATESOLIDFILL
  32422. GDIPLUS
  32423. ARGB    
  32424. SETHANDLE
  32425. GDI+ object not created or associated
  32426. GdipGetSolidFillColor
  32427. gdiplus.dll
  32428. GDIPHANDLE
  32429. GDIPSTATUS
  32430. GDIPGETSOLIDFILLCOLOR
  32431. GDIPLUS
  32432. NARGB
  32433. GDI+ object not created or associated
  32434. GdipSetSolidFillColor
  32435. gdiplus.dll
  32436. TVCOLOR
  32437. GDIPHANDLE
  32438. GDIPSTATUS
  32439. GDIPSETSOLIDFILLCOLOR
  32440. GDIPLUS
  32441. ARGBK
  32442. TVCOLOR
  32443. CREATE
  32444. create,
  32445. brushcolor_access
  32446. brushcolor_assign
  32447. InitQ
  32448. PROCEDURE create
  32449. lparameters tcName as String
  32450. this.Destroy()
  32451. local nHandle
  32452. nHandle = 0
  32453. Declare Integer GdipCreateFontFamilyFromName In GDIPlus.Dll ;
  32454.     string cUnicodeName, integer nFontCollection ,integer @nHandle
  32455. This.gdipStatus = GdipCreateFontFamilyFromName ( ;
  32456.     strconv(m.tcName,5)+chr(0) ;
  32457.     , This.gdipFontCollectionHandle ;
  32458.     , @nHandle )
  32459. This.SetHandle(m.nHandle,.T.)
  32460. return GDIPLUS_STATUS_OK == This.GdipStatus
  32461. ENDPROC
  32462. PROCEDURE getgenericmonospace
  32463. this.Destroy()
  32464. local nHandle
  32465. nHandle = 0
  32466. Declare Integer GdipGetGenericFontFamilyMonospace In GDIPlus.Dll ;
  32467.     integer @nHandle
  32468. This.gdipStatus = GdipGetGenericFontFamilyMonospace(@nHandle )
  32469. This.SetHandle(m.nHandle,.F.)
  32470. return GDIPLUS_STATUS_OK == This.GdipStatus
  32471. ENDPROC
  32472. PROCEDURE getgenericserif
  32473. this.Destroy()
  32474. local nHandle
  32475. nHandle = 0
  32476. Declare Integer GdipGetGenericFontFamilySerif In GDIPlus.Dll ;
  32477.     integer @nHandle
  32478. This.gdipStatus = GdipGetGenericFontFamilySerif(@nHandle )
  32479. This.SetHandle(m.nHandle,.F.)
  32480. return GDIPLUS_STATUS_OK == This.GdipStatus
  32481. ENDPROC
  32482. PROCEDURE getgenericsansserif
  32483. this.Destroy()
  32484. local nHandle
  32485. nHandle = 0
  32486. Declare Integer GdipGetGenericFontFamilySansSerif In GDIPlus.Dll ;
  32487.     integer @nHandle
  32488. This.gdipStatus = GdipGetGenericFontFamilySansSerif(@nHandle )
  32489. This.SetHandle(m.nHandle,.F.)
  32490. return GDIPLUS_STATUS_OK == This.GdipStatus
  32491. ENDPROC
  32492. PROCEDURE isstyleavailable
  32493. lparameters tnFontStyle as integer
  32494. #if GDIPLUS_CHECK_OBJECT
  32495. if This.gdipHandle==0
  32496.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32497.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32498.     return .F.
  32499. endif
  32500. #endif
  32501. #if GDIPLUS_CHECK_PARAMS
  32502. if !(vartype(m.tnFontStyle)='N')
  32503.     error 11 && Function argument
  32504.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32505.     return .F.
  32506. endif
  32507. #endif
  32508. declare integer GdipIsStyleAvailable in gdiplus.dll ;
  32509.     integer nFontFamily, integer nStyle, integer @bIsAvailable
  32510. local nAvailable
  32511. nAvailable = 0    && default to FALSE
  32512. This.gdipStatus = GdipIsStyleAvailable( This.gdipHandle, m.tnFontStyle, @nAvailable )
  32513. * Convert integer to .T./.F.
  32514. return (m.nAvailable<>0)
  32515. ENDPROC
  32516. PROCEDURE fontname_access
  32517. #if GDIPLUS_CHECK_OBJECT
  32518. if This.gdipHandle==0
  32519.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32520.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32521.     return cast(null as C)
  32522. endif
  32523. #endif
  32524. declare integer GdipGetFamilyName in gdiplus.dll ;
  32525.     integer nFamily, string @ cUnicodeName, integer nLangID
  32526. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
  32527. local cUnicodeName as String
  32528. cUnicodeName= replicate(chr(0), 64 )    && 64=LF_FACESIZE*2
  32529. This.gdipStatus = GdipGetFamilyName( This.gdipHandle, @cUnicodeName, 0x00 ) && 0x00=LANG_NEUTRAL
  32530. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32531.      , strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
  32532.      , cast(null as C) )
  32533. ENDPROC
  32534. PROCEDURE fontname_assign
  32535. LPARAMETERS vNewVal
  32536. error 1743, 'FontName'
  32537. ENDPROC
  32538. PROCEDURE getcellascent
  32539. lparameters tnStyle as integer
  32540. #if GDIPLUS_CHECK_PARAMS
  32541. if !(vartype(m.tnStyle)$'LN')
  32542.     error 11 && Function argument
  32543.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32544.     return cast(null as I)
  32545. endif
  32546. #endif
  32547. #if GDIPLUS_CHECK_OBJECT
  32548. if This.gdipHandle==0
  32549.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32550.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32551.     return cast(null as I)
  32552. endif
  32553. #endif
  32554. declare integer GdipGetCellAscent in gdiplus.dll ;
  32555.     integer nFamily, integer nStyle, integer @ nValue
  32556. local nValue as Number
  32557. nValue = 0
  32558. This.gdipStatus = GdipGetCellAscent( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  32559. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32560.      , m.nValue ;
  32561.      , cast(null as I) )
  32562. ENDPROC
  32563. PROCEDURE getemheight
  32564. lparameters tnStyle as integer
  32565. #if GDIPLUS_CHECK_PARAMS
  32566. if !(vartype(m.tnStyle)$'LN')
  32567.     error 11 && Function argument
  32568.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32569.     return cast(null as I)
  32570. endif
  32571. #endif
  32572. #if GDIPLUS_CHECK_OBJECT
  32573. if This.gdipHandle==0
  32574.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32575.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32576.     return cast(null as I)
  32577. endif
  32578. #endif
  32579. declare integer GdipGetEmHeight in gdiplus.dll ;
  32580.     integer nFamily, integer nStyle, integer @ nValue
  32581. local nValue as Number
  32582. nValue = 0
  32583. This.gdipStatus = GdipGetEmHeight( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  32584. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32585.      , m.nValue ;
  32586.      , cast(null as I) )
  32587. ENDPROC
  32588. PROCEDURE getcelldescent
  32589. lparameters tnStyle as integer
  32590. #if GDIPLUS_CHECK_PARAMS
  32591. if !(vartype(m.tnStyle)$'LN')
  32592.     error 11 && Function argument
  32593.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32594.     return cast(null as I)
  32595. endif
  32596. #endif
  32597. #if GDIPLUS_CHECK_OBJECT
  32598. if This.gdipHandle==0
  32599.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32600.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32601.     return cast(null as I)
  32602. endif
  32603. #endif
  32604. declare integer GdipGetCellDescent in gdiplus.dll ;
  32605.     integer nFamily, integer nStyle, integer @ nValue
  32606. local nValue as Number
  32607. nValue = 0
  32608. This.gdipStatus = GdipGetCellDescent( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  32609. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32610.      , m.nValue ;
  32611.      , cast(null as I) )
  32612. ENDPROC
  32613. PROCEDURE getlinespacing
  32614. lparameters tnStyle as integer
  32615. #if GDIPLUS_CHECK_PARAMS
  32616. if !(vartype(m.tnStyle)$'LN')
  32617.     error 11 && Function argument
  32618.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32619.     return cast(null as I)
  32620. endif
  32621. #endif
  32622. #if GDIPLUS_CHECK_OBJECT
  32623. if This.gdipHandle==0
  32624.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32625.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32626.     return cast(null as I)
  32627. endif
  32628. #endif
  32629. declare integer GdipGetLineSpacing in gdiplus.dll ;
  32630.     integer nFamily, integer nStyle, integer @ nValue
  32631. local nValue as Number
  32632. nValue = 0
  32633. This.gdipStatus = GdipGetLineSpacing( This.gdipHandle, evl(m.tnStyle,0), @nValue)
  32634. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32635.      , m.nValue ;
  32636.      , cast(null as I) )
  32637. ENDPROC
  32638. PROCEDURE getname
  32639. lparameters tnLangID
  32640. #if GDIPLUS_CHECK_PARAMS
  32641. if !(vartype(m.tnLangID)$'LN')
  32642.     error 11 && Function argument
  32643.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32644.     return cast(null as C)
  32645. endif
  32646. #endif
  32647. #if GDIPLUS_CHECK_OBJECT
  32648. if This.gdipHandle==0
  32649.     error _GDIPLUS_NOGDIPOBJECT_LOC
  32650.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  32651.     return cast(null as C)
  32652. endif
  32653. #endif
  32654. declare integer GdipGetFamilyName in gdiplus.dll ;
  32655.     integer nFamily, string @ cUnicodeName, integer nLangID
  32656. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW string
  32657. local cUnicodeName as String
  32658. cUnicodeName= replicate(chr(0), 64 )    && 64=LF_FACESIZE*2
  32659. This.gdipStatus = GdipGetFamilyName( This.gdipHandle, @cUnicodeName, evl(m.tnLangID,0x00) ) && LANG_NEUTRAL
  32660. return iif(GDIPLUS_STATUS_OK==This.gdipStatus ;
  32661.      , strconv( left(m.cUnicodeName,__win32_lstrlenW(m.cUnicodeName)*2),6) ;
  32662.      , cast(null as C) )
  32663. ENDPROC
  32664. PROCEDURE Init
  32665. lparameters tcName
  32666. * Get the Installed Font collection
  32667. if not dodefault()
  32668.     return .F.
  32669. endif
  32670. * This class cannot handle Private Font collections on its own: if you want
  32671. * that, you will need to extend it (and manage the lifetime of the
  32672. * PrivateFontCollection object
  32673. * Is this necessary? 
  32674. * declare integer GdipNewInstalledFontCollection in gdiplus.dll integer @
  32675. * For now, this seems to work:
  32676. This.gdipFontCollectionHandle = 0 
  32677. if pcount()>=1
  32678.     return This.Create( m.tcName )
  32679. endif
  32680. return .T.
  32681. ENDPROC
  32682. PROCEDURE Destroy
  32683. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  32684.     Declare Integer GdipDeleteFontFamily In GDIPlus.Dll ;
  32685.         integer nFontFamily
  32686.     GdipDeleteFontFamily(This.GdipHandle)
  32687.     This.GdipHandle=0
  32688.     This.gdipOwnsThisHandle=.F.
  32689. endif
  32690. ENDPROC
  32691. PROCEDURE clone
  32692. lparameters toFontFamily as GpFontFamily
  32693. this.Destroy()
  32694. local nHandle
  32695. nHandle = 0
  32696. #if GDIPLUS_CHECK_PARAMS
  32697. if !(vartype(m.toFontFamily)='O' and m.toFontFamily.gdipHandle<>0)
  32698.     error 11 && Function argument
  32699.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  32700.     return .F.
  32701. endif
  32702. #endif
  32703. Declare Integer GdipCloneFontFamily In GDIPlus.Dll ;
  32704.     integer nOriginal, integer @nClone
  32705. This.GdipStatus = GdipCloneFontFamily( ;
  32706.     m.toFontFamily.gdipHandle ;
  32707. ,    @nHandle)
  32708. this.gdipHandle= m.nHandle
  32709. This.gdipOwnsThisHandle = .T.
  32710. return GDIPLUS_STATUS_OK == This.gdipStatus
  32711. ENDPROC
  32712. PROCEDURE clone
  32713. lparameters toOtherObject
  32714. * Not implemented in this class, see derived classes
  32715. ENDPROC
  32716. PROCEDURE guidtostring
  32717. lparameters tqGUID
  32718. #if GDIPLUS_CHECK_PARAMS
  32719. * Require 16-byte string or varbinary
  32720. if !(vartype(m.tqGUID)$'CQ' and len(m.tqGUID)=16)
  32721.     error 11 && function argument
  32722.     return cast(null as C)
  32723. endif
  32724. #endif
  32725. local lcUnicodeString, lnResult
  32726. lcUnicodeString = replicate(chr(0),80)    && Should be big enough for anything
  32727. * Note - this is Unicode
  32728. declare integer StringFromGUID2 in ole32.dll ;
  32729.     string @cCLSID, string @cUnicodeString, integer nLen
  32730. lnResult = StringFromGUID2( m.tqGUID, @lcUnicodeString, 40 )
  32731. if m.lnResult == 0
  32732.     error _GDIPLUS_INTERNALBUFTOOSMALL_LOC
  32733.     return cast(null as C)
  32734.     return strconv(left(m.lcUnicodeString,(m.lnResult-1)*2),6)
  32735. endif
  32736. ENDPROC
  32737. PROCEDURE stringtoguid
  32738. lparameters lcString as String
  32739. #if GDIPLUS_CHECK_PARAMS
  32740. if !(vartype(m.lcString)='C')
  32741.     error 11 && function argument
  32742.     return cast(null as Q) && Function argument
  32743. endif
  32744. #endif
  32745. local lcCLSID, lnResult
  32746. lcCLSID = replicate(chr(0),16)
  32747. declare integer CLSIDFromString in ole32.dll ;
  32748.     string cString, string @cCLSID
  32749. lnResult = CLSIDFromString( strconv(m.lcString,5), @lcCLSID )
  32750. if m.lnResult == 0
  32751.     return cast(m.lcCLSID as Q(16))
  32752.     error _GDIPLUS_STRINGTOGUID_LOC
  32753.     return cast(null as Q)
  32754. endif
  32755. ENDPROC
  32756. PROCEDURE makegdipsizef
  32757. lparameters tw as number,th as number
  32758. #if GDIPLUS_CHECK_PARAMS
  32759. if !(vartype(m.tw)+vartype(m.th)=='NN')
  32760.     error 11 && function argument
  32761.     return cast(null as C)
  32762. endif
  32763. #endif
  32764. return ;
  32765.     bintoc(m.tW,'F') + bintoc(m.tH,'F')
  32766. ENDPROC
  32767. PROCEDURE makegdiprectf
  32768. lparameters tx as number,ty as number,tw as number,th as number
  32769. #if GDIPLUS_CHECK_PARAMS 
  32770. if ! vartype(m.tx)+vartype(m.ty)+vartype(m.tw)+vartype(m.th)=='NNNN'
  32771.     error 11 && function argument
  32772.     return cast(null as C)
  32773. endif
  32774. #endif
  32775. return ;
  32776.     bintoc(m.tX,'F') + bintoc(m.tY,'F') ;
  32777.     + bintoc(m.tW,'F') + bintoc(m.tH,'F')
  32778. ENDPROC
  32779. PROCEDURE makegdiparrayf
  32780. lparameters taArray as array, tnCols as integer, tnFirstCol as integer
  32781. external array taArray
  32782. #if GDIPLUS_CHECK_PARAMS
  32783. if !(type('m.taArray[1,2]')='N')    && Must be 2-D array
  32784.     error 11 && function argument
  32785.     return cast(null as C)
  32786. endif
  32787. #endif
  32788. local lcStruct, lnRows, lnRow, lnCol, lnFirstCol, lnColsMinusOne
  32789. lnRows = alen(taArray,1)
  32790. lnFirstCol = evl(m.tnFirstCol,1)
  32791. lnColsMinusOne= iif(empty(m.tnCols), alen(taArray,2)-m.lnFirstCol, m.tnCols-1 )
  32792. #if GDIPLUS_CHECK_PARAMS
  32793. if !(between(m.lnFirstCol,1,alen(taArray,2)) and between(m.lnColsMinusOne,0,alen(taArray,2)-m.lnFirstCol))
  32794.     error 11 && function argument
  32795.     return cast(null as C)
  32796. endif
  32797. #endif
  32798. lcStruct = ''
  32799. for lnRow = 1 to m.lnRows
  32800.     for lnCol = m.lnFirstCol to m.lnFirstCol+m.lnColsMinusOne
  32801.         lcStruct = m.lcStruct + bintoc(taArray[m.lnRow,m.lnCol],'F')
  32802.     endfor
  32803. endfor
  32804. assert len(m.lcStruct) == m.lnRows*4*(m.lnColsMinusOne+1)
  32805. return m.lcStruct
  32806. * Determine length from the result
  32807. ENDPROC
  32808. PROCEDURE makegdiparrayffromcursor
  32809. lparameters tcAlias as string, tnCols as Integer ;
  32810.     , tcExpr1 as string, tcExpr2 as string, tcExpr3 as string, tcExpr4 as String ;
  32811.     , tcExpr5 as string, tcExpr6 as string, tcExpr7 as string, tcExpr8 as string
  32812. #if GDIPLUS_CHECK_PARAMS
  32813. if !(vartype(m.tcAlias)='C' and vartype(m.tnCols)='N' and between(m.tnCols,1,8))
  32814.     error 11 && function argument
  32815.     return cast(null as C)
  32816. endif
  32817. if !used(m.tcAlias)
  32818.     error 13, m.tcAlias    && Alias not found
  32819.     return cast(null as C)
  32820. endif
  32821. #endif
  32822. local lcStruct, lnCol, lnSaveArea, lnSaveRecno, laExpr[m.tnCols]
  32823. lnSaveArea = select()
  32824. select (m.tcAlias)
  32825. lnSaveRecno = recno()
  32826. * Check expressions
  32827. for lnCol = 1 to m.tnCols
  32828.     laExpr[m.lnCol] = evaluate("m.tcExpr"+ltrim(str(m.lnCol)))
  32829.     #if GDIPLUS_CHECK_PARAMS
  32830.     if vartype(laExpr[m.lnCol])!='C'
  32831.         error 11 && function argument
  32832.         return cast(null as C)
  32833.     endif
  32834.     #endif
  32835. endfor
  32836. lcStruct = ''
  32837.     for lnCol = 1 to m.tnCols
  32838.         lcStruct = m.lcStruct + bintoc(evaluate(laExpr[m.lnCol]),'F')
  32839.     endfor
  32840. endscan
  32841. if m.lnSaveRecno<=reccount()
  32842.     go (m.lnSaveRecno)
  32843. endif
  32844. select (m.lnSaveArea)
  32845. return m.lcStruct
  32846. ENDPROC
  32847. PROCEDURE makegdippointf
  32848. lparameters tx as number,ty as number
  32849. #if GDIPLUS_CHECK_PARAMS
  32850. if ! vartype(m.tx)+vartype(m.ty)=='NN'
  32851.     error 11 && function argument
  32852.     return cast(null as C)
  32853. endif
  32854. #endif
  32855. return ;
  32856.     bintoc(m.tX,'F') + bintoc(m.tY,'F')
  32857. ENDPROC
  32858. PROCEDURE allowmodalmessages_assign
  32859. lparameters vNewVal
  32860. #if GDIPLUS_CHECK_PARAMS
  32861. if vartype(m.vNewVal)='L'
  32862. #endif
  32863.     This.AllowModalMessages = m.vNewVal
  32864. #if GDIPLUS_CHECK_PARAMS
  32865.     error 11 && func arg
  32866. endif
  32867. #endif
  32868. ENDPROC
  32869. PROCEDURE quietonerror_assign
  32870. lparameters vNewVal
  32871. #if GDIPLUS_CHECK_PARAMS
  32872. if vartype(m.vNewVal)='L'
  32873. #endif
  32874.     This.QuietOnError = m.vNewVal
  32875. #if GDIPLUS_CHECK_PARAMS
  32876.     error 11 && func arg
  32877. endif
  32878. #endif
  32879. ENDPROC
  32880. PROCEDURE ignoreerrors_assign
  32881. lparameters vNewVal
  32882. #if GDIPLUS_CHECK_PARAMS
  32883. if vartype(m.vNewVal)='L'
  32884. #endif
  32885.     This.IgnoreErrors = m.vNewVal
  32886. #if GDIPLUS_CHECK_PARAMS
  32887.     error 11 && func arg
  32888. endif
  32889. #endif
  32890. ENDPROC
  32891. PROCEDURE clearerrors
  32892. This.hadError = .F.
  32893. This.LastErrorMessage = ''
  32894. ENDPROC
  32895. PROCEDURE geterrorstatus
  32896. return This.hadError
  32897. ENDPROC
  32898. PROCEDURE getlasterrormessage
  32899. return This.LastErrorMessage
  32900. ENDPROC
  32901. PROCEDURE appname_assign
  32902. lparameters vNewVal
  32903. #if GDIPLUS_CHECK_PARAMS
  32904. if vartype(m.vNewVal)='C'
  32905. #endif
  32906.     This.AppName = m.vNewVal
  32907. #if GDIPLUS_CHECK_PARAMS
  32908.     error 11 && func arg
  32909. endif
  32910. #endif
  32911. ENDPROC
  32912. PROCEDURE objfactory
  32913. lparameters tcContext, tcClassName ;
  32914.     , p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
  32915. * Class name is one of _gdiplus.vcx base classes, or you could extend it yourself
  32916. * context is where it is called from, in the form 'class.method'
  32917. #if GDIPLUS_CHECK_PARAMS
  32918. if !(vartype(m.tcContext)+vartype(m.tcClassName )=='CC')
  32919.     error 11 && function argument
  32920.     return cast(null as O) && Function argument
  32921. endif
  32922. #endif
  32923. * Base implementation - always use same class library as header file
  32924. local lcClassLibrary,lcModule
  32925. lcClassLibrary = GDIPLUS_CLASS_LIBRARY
  32926. lcModule = ''
  32927. * Allow modifications to class chosen. Note arguments cannot be changed
  32928. This.ObjFactoryHook( tcContext, @tcClassName, @lcClassLibrary, @lcModule )
  32929. * Most common cases in _GDIPLUS.VCX are 1 and 2 args so do those pcounts() first
  32930. do case
  32931. case pcount()==3
  32932.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1)
  32933. case pcount()==4
  32934.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2)
  32935. case pcount()==2
  32936.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule)
  32937. case pcount()==5
  32938.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3)
  32939. case pcount()==6
  32940.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4)
  32941. case pcount()==7
  32942.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5)
  32943. case pcount()==8
  32944.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p,@p3,@p4,@p5,@p6)
  32945. case pcount()==9
  32946.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7)
  32947. case pcount()==10
  32948.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8)
  32949. case pcount()==11
  32950.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9)
  32951. case pcount()==12
  32952.     return newobject(m.tcClassName,m.lcClassLibrary,m.lcModule,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10)
  32953. endcase
  32954. error 11 && Function argument
  32955. return cast(null as O)
  32956. ENDPROC
  32957. PROCEDURE objfactoryhook
  32958. lparameters tcContext, rcClassName, rcClassLibrary, rcModule
  32959. * No special behaviour in base class
  32960. ENDPROC
  32961. PROCEDURE Error
  32962. LPARAMETERS nError as integer, cMethod as string, nLine as Integer
  32963. local lcMessage, lcCodeLine
  32964. lcMessage = message()
  32965. lcCodeLine = message(1)
  32966. This.HadError = .T.
  32967. if This.IgnoreErrors or _vfp.StartMode>0
  32968.     return .F.
  32969. endif
  32970. local lcOnError, lcErrorMsg
  32971. lcOnError = alltrim(on("error"))
  32972. if not empty(m.lcOnError)
  32973.     lcOnError= ;
  32974.         strtran( ;
  32975.         strtran( ;
  32976.         strtran( ;
  32977.         strtran( ;
  32978.         strtran( ;
  32979.         m.lcOnError,'error()',"m.nError",1,-1,1) ;
  32980.         ,'program()',"m.cMethod",1,-1,1) ;
  32981.         ,'lineno()',"m.nLine",1,-1,1) ;
  32982.         ,'message()',"m.lcMessage",1,-1,1) ;
  32983.         ,'message(1)',"m.lcCodeLine",1,-1,1) 
  32984.     &lcOnError
  32985.     return
  32986. endif
  32987. lcErrorMsg = ;
  32988.     m.lcMessage ;
  32989.     +chr(13)+chr(13) ;
  32990.     + This.Name ;
  32991.     + chr(13) + _GDIPLUS_ERRNOLABEL_LOC + ltrim(str(m.nError)) ;
  32992.     + chr(13) + _GDIPLUS_ERRPROCLABEL_LOC + m.cMethod ;
  32993.     + chr(13) + _GDIPLUS_ERRLINELABEL_LOC + ltrim(str(m.nLine)) ;
  32994.     + chr(13) + m.lcCodeLine
  32995. This.LastErrorMessage = m.lcErrorMsg
  32996. do case
  32997. case This.QuietOnError
  32998.     * Do nothing
  32999. case This.AllowModalMessages
  33000.     messagebox( m.lcErrorMsg,16, This.AppName )
  33001. otherwise
  33002.     wait window (m.lcErrorMsg) nowait
  33003. endcase
  33004. #if GDIPLUS_ERRHANDLER_RETHROW
  33005.     if m.nError = 1098
  33006.         error m.lcMessage
  33007.     else
  33008.         * Note, this loses the additional parameter
  33009.         error m.nError
  33010.     endif
  33011. #endif    
  33012. ENDPROC
  33013. PROCEDURE Init
  33014. #ifdef GDIPLUS_ERRHANDLER_ALLOWMODAL
  33015.     This.AllowModalMessages = GDIPLUS_ERRHANDLER_ALLOWMODAL
  33016. #endif
  33017. #ifdef GDIPLUS_ERRHANDLER_QUIET
  33018.     This.QuietOnError = GDIPLUS_ERRHANDLER_QUIET
  33019. #endif
  33020. #ifdef GDIPLUS_ERRHANDLER_IGNOREERRORS
  33021.     This.IgnoreErrors = GDIPLUS_ERRHANDLER_IGNOREERRORS
  33022. #endif
  33023. #ifdef GDIPLUS_ERRHANDLER_APPNAME
  33024.     This.AppName = GDIPLUS_ERRHANDLER_APPNAME
  33025. #endif
  33026. return dodefault()    
  33027. ENDPROC
  33028. PROCEDURE alignment_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 GdipGetStringFormatAlign in gdiplus.dll ;
  33037.     integer nGraphics, integer @
  33038. local nAlignment
  33039. nAlignment = cast(null as I) && predefined error value
  33040. This.gdipStatus = GdipGetStringFormatAlign( This.gdipHandle, @nAlignment)
  33041. return m.nAlignment
  33042. ENDPROC
  33043. PROCEDURE alignment_assign
  33044. LPARAMETERS tnAlignment
  33045. #if GDIPLUS_CHECK_PARAMS
  33046. if !(vartype(m.tnAlignment)='N')
  33047.     error 11 && Function argument
  33048.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33049.     return .F.
  33050. endif
  33051. #endif
  33052. #if GDIPLUS_CHECK_OBJECT
  33053. if This.gdipHandle==0
  33054.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33055.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33056.     return .F.
  33057. endif
  33058. if !This.gdipOwnsThisHandle
  33059.     error _GDIPLUS_GDIPNOTOWNED_LOC
  33060.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33061.     return .F.
  33062. endif
  33063. #endif
  33064. declare integer GdipSetStringFormatAlign in gdiplus.dll ;
  33065.     integer nGraphics, integer
  33066. This.gdipStatus = GdipSetStringFormatAlign( This.gdipHandle,m.tnAlignment)
  33067. return GDIPLUS_STATUS_OK == This.gdipStatus
  33068. ENDPROC
  33069. PROCEDURE formatflags_access
  33070. #if GDIPLUS_CHECK_OBJECT
  33071. if This.gdipHandle==0
  33072.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33073.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33074.     return cast(null as I)
  33075. endif
  33076. #endif
  33077. declare integer GdipGetStringFormatFlags in gdiplus.dll ;
  33078.     integer nGraphics, integer @
  33079. local nFlags
  33080. nFlags = 0
  33081. This.gdipStatus = GdipGetStringFormatFlags( This.gdipHandle, @nFlags)
  33082. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nFlags,cast(null as I))
  33083. ENDPROC
  33084. PROCEDURE formatflags_assign
  33085. LPARAMETERS tnFlags
  33086. #if GDIPLUS_CHECK_PARAMS
  33087. if !(vartype(m.tnFlags)='N')
  33088.     error 11 && Function argument
  33089.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33090.     return .F.
  33091. endif
  33092. #endif
  33093. #if GDIPLUS_CHECK_OBJECT
  33094. if This.gdipHandle==0
  33095.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33096.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33097.     return .F.
  33098. endif
  33099. if !This.gdipOwnsThisHandle
  33100.     error _GDIPLUS_GDIPNOTOWNED_LOC
  33101.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33102.     return .F.
  33103. endif
  33104. #endif
  33105. declare integer GdipSetStringFormatFlags in gdiplus.dll ;
  33106.     integer nGraphics, integer
  33107. This.gdipStatus = GdipSetStringFormatFlags( This.gdipHandle,m.tnFlags)
  33108. return GDIPLUS_STATUS_OK == This.gdipStatus
  33109. ENDPROC
  33110. PROCEDURE hotkeyprefix_access
  33111. #if GDIPLUS_CHECK_OBJECT
  33112. if This.gdipHandle==0
  33113.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33114.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33115.     return cast(null as I)
  33116. endif
  33117. #endif
  33118. declare integer GdipGetStringFormatHotkeyPrefix in gdiplus.dll ;
  33119.     integer nGraphics, integer @
  33120. local nPrefix
  33121. nPrefix = 0
  33122. This.gdipStatus = GdipGetStringFormatHotkeyPrefix( This.gdipHandle, @nPrefix)
  33123. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nPrefix,cast(null as I))
  33124. ENDPROC
  33125. PROCEDURE hotkeyprefix_assign
  33126. LPARAMETERS tnPrefix
  33127. #if GDIPLUS_CHECK_PARAMS
  33128. if !(vartype(m.tnPrefix)='N')
  33129.     error 11 && Function argument
  33130.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33131.     return .F.
  33132. endif
  33133. #endif
  33134. #if GDIPLUS_CHECK_OBJECT
  33135. if This.gdipHandle==0
  33136.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33137.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33138.     return .F.
  33139. endif
  33140. if !This.gdipOwnsThisHandle
  33141.     error _GDIPLUS_GDIPNOTOWNED_LOC
  33142.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33143.     return .F.
  33144. endif
  33145. #endif
  33146. declare integer GdipSetStringFormatHotkeyPrefix in gdiplus.dll ;
  33147.     integer nGraphics, integer
  33148. This.gdipStatus = GdipSetStringFormatHotkeyPrefix( This.gdipHandle,m.tnPrefix)
  33149. return GDIPLUS_STATUS_OK == This.gdipStatus
  33150. ENDPROC
  33151. PROCEDURE linealignment_access
  33152. #if GDIPLUS_CHECK_OBJECT
  33153. if This.gdipHandle==0
  33154.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33155.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33156.     return cast(null as I)
  33157. endif
  33158. #endif
  33159. declare integer GdipGetStringFormatLineAlign in gdiplus.dll ;
  33160.     integer nGraphics, integer @
  33161. local nAlignment
  33162. nAlignment = 0
  33163. This.gdipStatus = GdipGetStringFormatLineAlign( This.gdipHandle, @nAlignment)
  33164. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nAlignment,cast(null as I))
  33165. ENDPROC
  33166. PROCEDURE linealignment_assign
  33167. LPARAMETERS tnAlignment
  33168. #if GDIPLUS_CHECK_PARAMS
  33169. if !(vartype(m.tnAlignment)='N')
  33170.     error 11 && Function argument
  33171.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33172.     return .F.
  33173. endif
  33174. #endif
  33175. #if GDIPLUS_CHECK_OBJECT
  33176. if This.gdipHandle==0
  33177.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33178.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33179.     return .F.
  33180. endif
  33181. if !This.gdipOwnsThisHandle
  33182.     error _GDIPLUS_GDIPNOTOWNED_LOC
  33183.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33184.     return .F.
  33185. endif
  33186. #endif
  33187. declare integer GdipSetStringFormatLineAlign in gdiplus.dll ;
  33188.     integer nGraphics, integer
  33189. This.gdipStatus = GdipSetStringFormatLineAlign( This.gdipHandle,m.tnAlignment)
  33190. return GDIPLUS_STATUS_OK == This.gdipStatus
  33191. ENDPROC
  33192. PROCEDURE trimming_access
  33193. #if GDIPLUS_CHECK_OBJECT
  33194. if This.gdipHandle==0
  33195.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33196.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33197.     return cast(null as I)
  33198. endif
  33199. #endif
  33200. declare integer GdipGetStringFormatTrimming in gdiplus.dll ;
  33201.     integer nGraphics, integer @
  33202. local nMode
  33203. nMode = 0
  33204. This.gdipStatus = GdipGetStringFormatTrimming( This.gdipHandle, @nMode)
  33205. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  33206. ENDPROC
  33207. PROCEDURE trimming_assign
  33208. LPARAMETERS tnMode
  33209. #if GDIPLUS_CHECK_PARAMS
  33210. if !(vartype(m.tnMode)='N')
  33211.     error 11 && Function argument
  33212.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33213.     return .F.
  33214. endif
  33215. #endif
  33216. #if GDIPLUS_CHECK_OBJECT
  33217. if This.gdipHandle==0
  33218.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33219.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33220.     return .F.
  33221. endif
  33222. if !This.gdipOwnsThisHandle
  33223.     error _GDIPLUS_GDIPNOTOWNED_LOC
  33224.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33225.     return .F.
  33226. endif
  33227. #endif
  33228. declare integer GdipSetStringFormatTrimming in gdiplus.dll ;
  33229.     integer nGraphics, integer
  33230. This.gdipStatus = GdipSetStringFormatTrimming( This.gdipHandle,m.tnMode)
  33231. return GDIPLUS_STATUS_OK == This.gdipStatus
  33232. ENDPROC
  33233. PROCEDURE getgenericdefault
  33234. lparameters tlMakeClone
  33235. this.Destroy()
  33236. local nHandle
  33237. nHandle = 0
  33238. Declare Integer GdipStringFormatGetGenericDefault In GDIPlus.Dll ;
  33239.     integer @nHandle
  33240. This.gdipStatus = GdipStringFormatGetGenericDefault (@nHandle )
  33241. if This.gdipStatus <> GDIPLUS_STATUS_OK
  33242.     return .F.
  33243. endif
  33244. if m.tlMakeClone
  33245.     Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
  33246.         integer nOriginal, integer @nClone
  33247.     This.GdipStatus = GdipCloneStringFormat( ;
  33248.         (m.nHandle) ;
  33249.     ,    @nHandle)
  33250.     if GDIPLUS_STATUS_OK == This.GdipStatus
  33251.         This.SetHandle(m.nHandle,.T.)
  33252.     endif
  33253.     This.SetHandle(m.nHandle,.F.)
  33254. endif
  33255. return GDIPLUS_STATUS_OK == This.GdipStatus
  33256. ENDPROC
  33257. PROCEDURE getgenerictypographic
  33258. lparameters tlMakeClone
  33259. this.Destroy()
  33260. local nHandle
  33261. nHandle = 0
  33262. Declare Integer GdipStringFormatGetGenericTypographic In GDIPlus.Dll ;
  33263.     integer @nHandle
  33264. This.gdipStatus = GdipStringFormatGetGenericTypographic(@nHandle )
  33265. if This.gdipStatus <> GDIPLUS_STATUS_OK
  33266.     return .F.
  33267. endif
  33268. if m.tlMakeClone
  33269.     Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
  33270.         integer nOriginal, integer @nClone
  33271.         
  33272.     This.GdipStatus = GdipCloneStringFormat( ;
  33273.         (m.nHandle) ;
  33274.     ,    @nHandle)
  33275.     if GDIPLUS_STATUS_OK == This.GdipStatus
  33276.         This.SetHandle(m.nHandle,.T.)
  33277.     endif
  33278.     This.SetHandle(m.nHandle,.F.)
  33279. endif
  33280. return GDIPLUS_STATUS_OK == This.GdipStatus
  33281. ENDPROC
  33282. PROCEDURE create
  33283. lparameters tnFlags, tnLangID
  33284. this.Destroy()
  33285. local nHandle
  33286. nHandle = 0
  33287. Declare Integer GdipCreateStringFormat In GDIPlus.Dll ;
  33288.     integer,integer,integer @nHandle
  33289. This.gdipStatus = GdipCreateStringFormat ( ;
  33290.     evl(tnFlags,0) ;
  33291.     , evl(m.tnLangID,0) ;
  33292.     , @nHandle )
  33293. This.SetHandle(m.nHandle,.T.)
  33294. return GDIPLUS_STATUS_OK == This.GdipStatus
  33295. ENDPROC
  33296. PROCEDURE clone
  33297. lparameters toStringFormat as GpStringFormat
  33298. this.Destroy()
  33299. local nHandle
  33300. nHandle = 0
  33301. #if GDIPLUS_CHECK_PARAMS
  33302. if !(vartype(m.toStringFormat)='O' and m.toStringFormat.gdipHandle<>0)
  33303.     error 11 && Function argument
  33304.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33305.     return .F.
  33306. endif
  33307. #endif
  33308. Declare Integer GdipCloneStringFormat In GDIPlus.Dll ;
  33309.     integer nOriginal, integer @nClone
  33310. This.GdipStatus = GdipCloneStringFormat( ;
  33311.     m.toStringFormat.gdipHandle ;
  33312. ,    @nHandle)
  33313. this.gdipHandle= m.nHandle
  33314. This.gdipOwnsThisHandle = .T.
  33315. return GDIPLUS_STATUS_OK == This.GdipStatus
  33316. ENDPROC
  33317. PROCEDURE Destroy
  33318. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  33319.     Declare Integer GdipDeleteStringFormat In GDIPlus.Dll ;
  33320.         integer nStringFormat
  33321.     GdipDeleteStringFormat(This.GdipHandle)
  33322.     This.GdipHandle=0
  33323.     This.gdipOwnsThisHandle=.F.
  33324. endif
  33325. ENDPROC
  33326. PROCEDURE Init
  33327. lparameters tnFlags, tnLangID
  33328. if not dodefault()
  33329.     return .F.
  33330. endif
  33331. if pcount()>0
  33332.     return This.Create(m.tnFlags,m.tnLangID)
  33333. endif
  33334. ENDPROC
  33335. w>PROCEDURE createfromfile
  33336. lparameters tcFilename as String, tlUseEmbeddedColorMgmt as Logical
  33337. #if GDIPLUS_CHECK_PARAMS
  33338. if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename) and vartype(m.tlUseEmbeddedColorMgmt)='L')
  33339.     error 11 && function argument
  33340.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33341.     return .F.
  33342. endif
  33343. #endif
  33344. if m.tlUseEmbeddedColorMgmt
  33345.     declare integer GdipLoadImageFromFileICM in gdiplus.dll ;
  33346.         string wFilename, integer @ nImage
  33347.     this.Destroy()
  33348.     local nHandle
  33349.     nHandle = 0
  33350.     This.gdipStatus = GdipLoadImageFromFileICM( ;
  33351.         strconv(m.tcFilename+chr(0),5) ;
  33352.     ,    @nHandle)
  33353.     this.SetHandle(m.nHandle,.T.)
  33354.     return GDIPLUS_STATUS_OK == This.gdipStatus
  33355.     declare integer GdipLoadImageFromFile in gdiplus.dll ;
  33356.         string wFilename, integer @ nImage
  33357.     this.Destroy()
  33358.     local nHandle
  33359.     nHandle = 0
  33360.     This.gdipStatus = GdipLoadImageFromFile( ;
  33361.         strconv(m.tcFilename+chr(0),5) ;
  33362.     ,    @nHandle)
  33363.     this.SetHandle(m.nHandle,.T.)
  33364.     return GDIPLUS_STATUS_OK == This.gdipStatus
  33365. endif
  33366. ENDPROC
  33367. PROCEDURE savetofile
  33368. lparameters tcFilename as String, tvCLSIDEncoder, rvEncoderParams
  33369. #if GDIPLUS_CHECK_OBJECT
  33370. if This.gdipHandle==0
  33371.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33372.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33373.     return .F.
  33374. endif
  33375. #endif
  33376. #if GDIPLUS_CHECK_PARAMS
  33377. if !(vartype(m.tcFilename)='C' and !empty(m.tcFilename))
  33378.     error 11 && Function argument
  33379. endif
  33380. #endif
  33381. local lqCLSIDEncoder
  33382. * Encoder may be varbinary, or string
  33383. do case
  33384. case vartype(m.tvCLSIDEncoder)=='Q'
  33385.     lqCLSIDEncoder = m.tvCLSIDEncoder
  33386. case vartype(m.tvCLSIDEncoder)=='C'
  33387.     if left(m.tvCLSIDEncoder,1)=='{'
  33388.         lqCLSIDEncoder = This.StringToGUID( m.tvCLSIDEncoder)
  33389.     else
  33390.         lqCLSIDEncoder = This.GetEncoderCLSID(m.tvCLSIDEncoder)
  33391.     endif
  33392. otherwise
  33393.     error 11
  33394. endcase
  33395. declare integer GdipSaveImageToFile in gdiplus.dll ;
  33396.     integer nImage, string wFilename, string qEncoder, integer  nEncoderParamsPtr
  33397. declare integer GlobalFree in kernel32.dll integer nHandle
  33398. local lnEncoderParamsPtr
  33399. do case
  33400. case type("rvEncoderParams[1]")!='U'
  33401.     lnEncoderParamsPtr = This.getEncoderParamsFromArray( m.lqCLSIDEncoder, @rvEncoderParams )
  33402. case vartype(m.rvEncoderParams)=='C'
  33403.     lnEncoderParamsPtr = This.getEncoderParamsFromString( m.lqCLSIDEncoder, @rvEncoderParams )
  33404. case vartype(m.rvEncoderParams)=='L' and !m.rvEncoderParams
  33405.     lnEncoderParamsPtr = 0
  33406. otherwise
  33407.     error 11    && function argument
  33408.     return .F.
  33409. endcase
  33410. This.gdipStatus = GdipSaveImageToFile ( ;
  33411.     This.gdipHandle ;
  33412. ,    strconv(m.tcFilename,5)+chr(0) ;
  33413. ,    m.lqCLSIDEncoder ;
  33414. ,    m.lnEncoderParamsPtr ) 
  33415. if m.lnEncoderParamsPtr!=0
  33416.     GlobalFree(m.lnEncoderParamsPtr)
  33417. endif
  33418. return GDIPLUS_STATUS_OK == This.gdipStatus
  33419. ENDPROC
  33420. PROCEDURE getthumbnailimage
  33421. lparameters tnWidth as Integer, tnHeight as Integer
  33422. #if GDIPLUS_CHECK_OBJECT
  33423. if This.gdipHandle==0
  33424.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33425.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33426.     return null
  33427. endif
  33428. #endif
  33429. #if GDIPLUS_CHECK_PARAMS
  33430. if !(vartype(m.tnWidth)='N' and vartype(m.tnHeight)='N')
  33431.     error 11 && function argument
  33432.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33433.     return .F.
  33434. endif
  33435. #endif
  33436. declare integer GdipGetImageThumbnail in gdiplus.dll ;
  33437.     integer nSrcImage, integer nWidth, integer nHeight, integer @nNewImage,integer,integer
  33438. local lnNewImage
  33439. lnNewImage = 0
  33440. This.gdipStatus = GdipGetImageThumbnail( ;
  33441.     This.gdipHandle ;
  33442.     , m.tnWidth, m.tnHeight, @lnNewImage, 0, 0 )
  33443. if GDIPLUS_STATUS_OK == This.gdipStatus
  33444.     return This.ObjFactory('gpimage.getthumbnailimage', GDIPLUS_CLASS_IMAGE,m.lnNewImage)
  33445. else    
  33446.     return null
  33447. endif    
  33448. ENDPROC
  33449. PROCEDURE getencoderclsid
  33450. lparameters tvSearchValue
  33451. * When passed varbinary, search on Image format GUID
  33452. * When passed char, search on mime type
  33453. #if GDIPLUS_CHECK_PARAMS
  33454. if !(vartype(m.tvSearchValue)='C' or (vartype(m.tvSearchValue)='Q' and len(m.tvSearchValue)=16))
  33455.     error 11 && function argument
  33456.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33457.     return cast(null as Q)
  33458. endif
  33459. #endif
  33460. local lnNumEncoders as Integer, lnBufferSize as integer
  33461. lnNumEncoders = 0
  33462. lnBufferSize = 0
  33463. * The buffer is self-referencing: it starts with an array of ImageCodecInfo
  33464. * followed by the text strings, and the array contains pointers to the text strings
  33465. * To avoid the danger, however slight, of VFP moving this memory around, I allocate
  33466. * Memory using GlobalAlloc.
  33467. * eg on my system, sizeof(ImageCodecInfo)=76, num encoders=5, but lnBufferSize=1040
  33468. * object is 1040 bytes
  33469. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  33470. declare integer GlobalFree in kernel32.dll integer nHandle
  33471. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW_ptr integer
  33472. declare integer GdipGetImageEncodersSize in gdiplus.dll ;
  33473.     integer @numEncoders, integer @ nsize
  33474. declare integer GdipGetImageEncoders in gdiplus.dll ;
  33475.     integer numEncoders, integer nsize, integer nBufferPtr
  33476. This.gdipStatus = GdipGetImageEncodersSize( @lnNumEncoders, @lnBufferSize )
  33477. if GDIPLUS_STATUS_OK != This.gdipStatus
  33478.     return cast(null as Q)
  33479. endif
  33480. local lnBufferPtr as Integer, lnStringPtr as integer, liEncoder as integer
  33481. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  33482. * Be careful from now on to deallocate this memory
  33483. * TRY ..CATCH would be smart?
  33484. This.gdipStatus = GdipGetImageEncoders( m.lnNumEncoders, m.lnBufferSize, m.lnBufferPtr )
  33485. if GDIPLUS_STATUS_OK != This.gdipStatus
  33486.     GlobalFree( m.lnBufferPtr )
  33487.     return cast(null as Q)
  33488. endif
  33489. local lcFoundCLSID
  33490. lcFoundCLSID = null
  33491. do case
  33492. case vartype(m.tvSearchValue)='C'    && Search on mime type
  33493.     local lcUnicodeMimeType
  33494.     lcUnicodeMimeType = strconv(m.tvSearchValue,5)
  33495.     for liEncoder = 0 to m.lnNumEncoders-1
  33496.         lnStringPtr = ctobin( sys(2600,m.lnBufferPtr+m.liEncoder*76+48,4),'RS')
  33497.         if m.lcUnicodeMimeType == sys(2600,lnStringPtr,__win32_lstrlenW_ptr(m.lnStringPtr)*2 )
  33498.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liEncoder*76,16)
  33499.             exit
  33500.         endif
  33501.     endfor
  33502. case vartype(m.tvSearchValue)='Q'    && Search on Image format GUID
  33503.     local lcFormatID
  33504.     lcFormatID = cast(m.tvSearchValue as C(16))
  33505.     for liEncoder = 0 to m.lnNumEncoders-1
  33506.         if m.tvSearchValue == cast( sys(2600,m.lnBufferPtr+m.liEncoder*76+16,16) as Q(16) )
  33507.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liEncoder*76,16)
  33508.             exit
  33509.         endif
  33510.     endfor
  33511. otherwise
  33512.     error 11 && function argument
  33513.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33514.     return cast(null as Q)
  33515. endcase    
  33516. GlobalFree( m.lnBufferPtr )
  33517. return cast( m.lcFoundCLSID as Q(16) )
  33518. ENDPROC
  33519. PROCEDURE getbounds
  33520. lparameters tnUnit as integer
  33521. #if GDIPLUS_CHECK_PARAMS
  33522. if !(vartype(m.tnUnit)='N')
  33523.     error 11 && function argument
  33524.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33525.     return null
  33526. endif
  33527. #endif
  33528. #if GDIPLUS_CHECK_OBJECT
  33529. if This.gdipHandle==0
  33530.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33531.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33532.     return null
  33533. endif
  33534. #endif
  33535. declare integer GdipGetImageBounds in gdiplus.dll ;
  33536.     integer nGraphics, string @ pRectF, integer @nUnit
  33537. local lcRectF
  33538. lcRectF = replicate(chr(0),16)
  33539. This.gdipStatus = GdipGetImageBounds( This.gdipHandle, @lcRectF, @tnUnit )
  33540. if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
  33541.     return This.ObjFactory( 'gpimage.getbounds', GDIPLUS_CLASS_RECT,@lcRectF)
  33542.     return null
  33543. endif
  33544. ENDPROC
  33545. PROCEDURE rotateflip
  33546. lparameters tnRotateFlipType
  33547. #if GDIPLUS_CHECK_OBJECT
  33548. if This.gdipHandle==0
  33549.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33550.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33551.     return .F.
  33552. endif
  33553. #endif
  33554. #if GDIPLUS_CHECK_PARAMS
  33555. if !(vartype(m.tnRotateFlipType)='N')
  33556.     error 11 && function argument
  33557.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33558.     return .F.
  33559. endif
  33560. #endif
  33561. declare integer GdipImageRotateFlip in gdiplus.dll ;
  33562.     integer nImage, integer nMode
  33563. This.gdipStatus = GdipImageRotateFlip( This.gdipHandle, m.tnRotateFlipType )
  33564. return (GDIPLUS_STATUS_OK == This.gdipStatus)
  33565. ENDPROC
  33566. PROCEDURE flags_access
  33567. #if GDIPLUS_CHECK_OBJECT
  33568. if This.gdipHandle==0
  33569.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33570.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33571.     return cast(null as I)
  33572. endif
  33573. #endif
  33574. declare Integer GdipGetImageFlags in gdiplus.dll ;
  33575.     integer nImage, integer @ nValue
  33576. local nValue
  33577. nValue = 0
  33578. This.gdipStatus = GdipGetImageFlags( This.gdipHandle, @nValue)
  33579. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  33580. ENDPROC
  33581. PROCEDURE flags_assign
  33582. lparameters newVal
  33583. error 1743, "Flags"
  33584. ENDPROC
  33585. PROCEDURE horizontalresolution_access
  33586. #if GDIPLUS_CHECK_OBJECT
  33587. if This.gdipHandle==0
  33588.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33589.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33590.     return cast(null as B)
  33591. endif
  33592. #endif
  33593. declare Integer GdipGetImageHorizontalResolution in gdiplus.dll ;
  33594.     integer nImage, single @ nValue
  33595. local nValue
  33596. nValue = 0.0
  33597. This.gdipStatus = GdipGetImageHorizontalResolution( This.gdipHandle, @nValue)
  33598. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as B))
  33599. ENDPROC
  33600. PROCEDURE horizontalresolution_assign
  33601. lparameters newVal
  33602. error 1743, "HorizontalResolution"
  33603. ENDPROC
  33604. PROCEDURE verticalresolution_access
  33605. #if GDIPLUS_CHECK_OBJECT
  33606. if This.gdipHandle==0
  33607.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33608.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33609.     return cast(null as B)
  33610. endif
  33611. #endif
  33612. declare Integer GdipGetImageVerticalResolution in gdiplus.dll ;
  33613.     integer nImage, single @ nValue
  33614. local nValue
  33615. nValue = 0.0
  33616. This.gdipStatus = GdipGetImageVerticalResolution( This.gdipHandle, @nValue)
  33617. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as B))
  33618. ENDPROC
  33619. PROCEDURE verticalresolution_assign
  33620. lparameters newVal
  33621. error 1743, "VerticalResolution"
  33622. ENDPROC
  33623. PROCEDURE imageheight_access
  33624. #if GDIPLUS_CHECK_OBJECT
  33625. if This.gdipHandle==0
  33626.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33627.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33628.     return cast(null as I)
  33629. endif
  33630. #endif
  33631. declare Integer GdipGetImageHeight in gdiplus.dll ;
  33632.     integer nImage, integer @ nValue
  33633. local nValue
  33634. nValue = 0
  33635. This.gdipStatus = GdipGetImageHeight( This.gdipHandle, @nValue)
  33636. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  33637. ENDPROC
  33638. PROCEDURE imageheight_assign
  33639. lparameters newVal
  33640. error 1743, "ImageHeight"
  33641. ENDPROC
  33642. PROCEDURE imagewidth_access
  33643. #if GDIPLUS_CHECK_OBJECT
  33644. if This.gdipHandle==0
  33645.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33646.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33647.     return cast(null as I)
  33648. endif
  33649. #endif
  33650. declare Integer GdipGetImageWidth in gdiplus.dll ;
  33651.     integer nPen, integer @ nValue
  33652. local nValue
  33653. nValue = 0
  33654. This.gdipStatus = GdipGetImageWidth( This.gdipHandle, @nValue)
  33655. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  33656. ENDPROC
  33657. PROCEDURE imagewidth_assign
  33658. lparameters newVal
  33659. error 1743, "ImageWidth"
  33660. ENDPROC
  33661. PROCEDURE rawformat_access
  33662. #if GDIPLUS_CHECK_OBJECT
  33663. if This.gdipHandle==0
  33664.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33665.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33666.     return cast(null as Q(16))
  33667. endif
  33668. #endif
  33669. declare Integer GdipGetImageRawFormat in gdiplus.dll ;
  33670.     integer nImage, string @ sGUID
  33671. local sGUID
  33672. sGUID = replicate(chr(0),16)
  33673. This.gdipStatus = GdipGetImageRawFormat( This.gdipHandle, @sGUID)
  33674. return cast(iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.sGUID,null) as Q(16))
  33675. ENDPROC
  33676. PROCEDURE rawformat_assign
  33677. lparameters newVal
  33678. error 1743, "RawFormat"
  33679. ENDPROC
  33680. PROCEDURE pixelformat_access
  33681. #if GDIPLUS_CHECK_OBJECT
  33682. if This.gdipHandle==0
  33683.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33684.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33685.     return cast(null as I)
  33686. endif
  33687. #endif
  33688. declare Integer GdipGetImagePixelFormat in gdiplus.dll ;
  33689.     integer nPen, integer @ nValue
  33690. local nValue
  33691. nValue = 0
  33692. This.gdipStatus = GdipGetImagePixelFormat( This.gdipHandle, @nValue)
  33693. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  33694. ENDPROC
  33695. PROCEDURE pixelformat_assign
  33696. lparameters newVal
  33697. error 1743, "PixelFormat"
  33698. ENDPROC
  33699. PROCEDURE getdecoderclsid
  33700. lparameters tvSearchValue
  33701. * When passed varbinary, search on Image format GUID
  33702. * When passed char, search on mime type
  33703. #if GDIPLUS_CHECK_PARAMS
  33704. if !(vartype(m.tvSearchValue)='C' or (vartype(m.tvSearchValue)='Q' and len(m.tvSearchValue)=16))
  33705.     error 11 && function argument
  33706.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33707.     return cast(null as Q)
  33708. endif
  33709. #endif
  33710. local lnNumDecoders as Integer, lnBufferSize as integer
  33711. lnNumDecoders = 0
  33712. lnBufferSize = 0
  33713. * The buffer is self-referencing: it starts with an array of ImageCodecInfo
  33714. * followed by the text strings, and the array contains pointers to the text strings
  33715. * To avoid the danger, however slight, of VFP moving this memory around, I allocate
  33716. * Memory using GlobalAlloc.
  33717. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  33718. declare integer GlobalFree in kernel32.dll integer nHandle
  33719. declare integer lstrlenW in kernel32.dll as __win32_lstrlenW_ptr integer
  33720. declare integer GdipGetImageDecodersSize in gdiplus.dll ;
  33721.     integer @numDecoders, integer @ nsize
  33722. declare integer GdipGetImageDecoders in gdiplus.dll ;
  33723.     integer numDecoders, integer nsize, integer nBufferPtr
  33724. This.gdipStatus = GdipGetImageDecodersSize( @lnNumDecoders, @lnBufferSize )
  33725. if GDIPLUS_STATUS_OK != This.gdipStatus
  33726.     return cast(null as Q)
  33727. endif
  33728. local lnBufferPtr as Integer, lnStringPtr as integer, liDecoder as integer
  33729. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  33730. * Be careful from now on to deallocate this memory
  33731. * TRY ..CATCH would be smart?
  33732. This.gdipStatus = GdipGetImageDecoders( m.lnNumDecoders, m.lnBufferSize, m.lnBufferPtr )
  33733. if GDIPLUS_STATUS_OK != This.gdipStatus
  33734.     GlobalFree( m.lnBufferPtr )
  33735.     return cast(null as Q)
  33736. endif
  33737. local lcFoundCLSID
  33738. lcFoundCLSID = null
  33739. do case
  33740. case vartype(m.tvSearchValue)='C'    && Search on mime type
  33741.     local lcUnicodeMimeType
  33742.     lcUnicodeMimeType = strconv(m.tvSearchValue,5)
  33743.     for liDecoder = 0 to m.lnNumDecoders-1
  33744.         lnStringPtr = ctobin(sys(2600,m.lnBufferPtr+m.liDecoder*76+48,4),'RS')
  33745.         if m.lcUnicodeMimeType == sys(2600,lnStringPtr,__win32_lstrlenW_ptr(m.lnStringPtr)*2 )
  33746.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liDecoder*76,16)
  33747.             exit
  33748.         endif
  33749.     endfor
  33750. case vartype(m.tvSearchValue)='Q'    && Search on Image format GUID
  33751.     local lcFormatID
  33752.     lcFormatID = cast(m.tvSearchValue as C(16))
  33753.     for liDecoder = 0 to m.lnNumDecoders-1
  33754.         if m.tvSearchValue == cast( sys(2600,m.lnBufferPtr+m.liDecoder*76+16,16) as Q(16) )
  33755.             lcFoundCLSID = sys(2600,m.lnBufferPtr+m.liDecoder*76,16)
  33756.             exit
  33757.         endif
  33758.     endfor
  33759. otherwise
  33760.     error 11 && function argument
  33761.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  33762.     * No return here - must still free memory, see below!
  33763. endcase    
  33764. GlobalFree( m.lnBufferPtr )
  33765. return cast( m.lcFoundCLSID as Q(16) )
  33766. ENDPROC
  33767. PROCEDURE physicaldimension_access
  33768. #if GDIPLUS_CHECK_OBJECT
  33769. if This.gdipHandle==0
  33770.     error _GDIPLUS_NOGDIPOBJECT_LOC
  33771.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  33772.     return null
  33773. endif
  33774. #endif
  33775. declare integer GdipGetImageDimension in gdiplus.dll ;
  33776.     integer nGraphics, single @, single @
  33777. local lnWidth, lnHeight
  33778. store 0.0 to lnWidth, lnHeight
  33779. This.gdipStatus = GdipGetImageDimension ( This.gdipHandle, @lnWidth, @lnHeight )
  33780. if This.gdipStatus==GDIPLUS_STATUS_OK
  33781.     return This.ObjFactory('gpimage.physicaldimension_access',GDIPLUS_CLASS_SIZE, m.lnWidth, m.lnHeight)
  33782.     return null
  33783. endif
  33784. ENDPROC
  33785. PROCEDURE physicaldimension_assign
  33786. lparameters newVal
  33787. error 1743, "PhysicalDimension"
  33788. ENDPROC
  33789. PROCEDURE getencoderparamsfromstring
  33790. lparameters lqCLSIDEncoder, tcEncoderParams
  33791. * Internal function, parse string into EncoderParameters array
  33792. * return global memory handle (pointer)
  33793. * Input is a string of the format "param1=value1, param2=value2, ..."
  33794. * This is more limited than the array version in that
  33795. *    - it only understands string parameter names
  33796. *    - it only understands those parameters it knows about
  33797. *    - data type is only the kind this class implements
  33798. *    - cannot include commas in values
  33799. * but it is easier to use for the more common cases
  33800. #if GDIPLUS_CHECK_PARAMS
  33801. if !(vartype(m.tcEncoderParams)=='C')
  33802.     error 11 && Function argument
  33803. endif
  33804. #endif
  33805. * Short circui
  33806. if empty(m.tcEncoderParams)
  33807.     return 0    && nothing to do
  33808. endif
  33809. local lnCount
  33810. lnCount= occurs(",",m.tcEncoderParams)+1
  33811. local laParams[m.lnCount,3], lnPos,lcName, lcValue, lqGUID, lnType, lcScratch,liParam
  33812. lcScratch = m.tcEncoderParams
  33813. for liParam = 1 to m.lnCount
  33814.     * Find name
  33815.     lnPos = at('=',m.lcScratch)
  33816.     if m.lnPos = 0
  33817.         * Invalid
  33818.         error _GDIPLUS_BADENCODERPARAMSTRING_LOC
  33819.         return 0
  33820.     endif
  33821.     lcName = alltrim(left(m.lcScratch,m.lnPos-1))
  33822.     lcScratch = substr(m.lcScratch,m.lnPos+1)
  33823.     lnPos = at(',',m.lcScratch)
  33824.     if m.lnPos = 0
  33825.         lcValue = alltrim(m.lcScratch)
  33826.         lcScratch = ''
  33827.     else
  33828.         lcValue = alltrim(left(m.lcScratch,m.lnPos-1))
  33829.         lcScratch = substr(m.lcScratch,m.lnPos+1)
  33830.     endif    
  33831.     * Now look it up
  33832.     if not This.getEncoderParamInfo( m.lcName, @lqGUID, @lnType )
  33833.         error _GDIPLUS_BADENCODERPARAMNAME_LOC
  33834.         return 0
  33835.     endif
  33836.     laParams[m.liParam,1] = m.lqGUID
  33837.     laParams[m.liParam,2] = m.lnType
  33838.     do case
  33839.     case inlist(m.lnType ;
  33840.         ,GDIPLUS_ValueDataType_Byte,GDIPLUS_ValueDataType_Short,GDIPLUS_ValueDataType_Long )
  33841.         laParams[m.liParam,3] = val(m.lcValue)
  33842.     * rationals?
  33843.     otherwise
  33844.         laParams[m.liParam,3] = m.lcValue
  33845.     endcase
  33846. endfor
  33847. return This.getEncoderParamsFromArray( m.lqCLSIDEncoder, @laParams )
  33848. ENDPROC
  33849. PROCEDURE getencoderparamsfromarray
  33850. lparameters lqCLSIDEncoder, raEncoderParams
  33851. * Internal function, convert array into EncoderParameters array
  33852. * return global memory handle (pointer)
  33853. external array raEncoderParams
  33854. #if GDIPLUS_CHECK_PARAMS
  33855. if !(type( "raEncoderParams[1]")!='U' and alen(raEncoderParams,2) >= 3)
  33856.     error 11 && Function argument
  33857. endif
  33858. #endif
  33859. * Input is a 3-column array, where
  33860. *    array[i,1] = GUID (varbinary) or name (string) of parameter
  33861. *    array[i,2] = data type (se GDIPLUS_ValueDataType_xxx constants)
  33862. *    array[i,3] = value 
  33863. * Need to build an array of EncoderParameter objects
  33864. * Each item is:
  33865. * arraycol    Offset    Size    Description
  33866. * 1            0        16        GUID of the parameter, see GDIPLUS_ENCODER_xxx constants
  33867. * 2            16        4        Number of values
  33868. * 3            20        4        Data type - see 
  33869. * -            24        4        Pointer to buffer
  33870. * 4            n/a                value
  33871. * Build local array of parameters
  33872. local lnParamCount
  33873. lnParamCount = alen(raEncoderParams,1)
  33874. local laParam[m.lnParamCount,4], liParam, lcName, lqParamID,lvValue,lnValue, lnBufferSize, lnBufferPtr
  33875. lnBufferSize = 4 + 28 * m.lnParamCount    && 4=sizeof(ULONG), 28=sizeof(EncoderParameter)
  33876. for liParam = 1 to m.lnParamCount
  33877.     lqParamID = null    && initialise
  33878.     * Check input
  33879.     * Name -> GUID
  33880.     do case
  33881.     case vartype( raEncoderParams[m.liParam,1])=='C'
  33882.         * Look it up
  33883.         lcName = raEncoderParams[m.liParam,1]    && to save having two error messages (ouch)
  33884.         if not This.getEncoderParamInfo( m.lcName, @lqParamID )
  33885.             error _GDIPLUS_BADENCODERPARAMNAME_LOC
  33886.             return 0
  33887.         endif
  33888.         laParam[m.liParam,1] = m.lqParamID
  33889.     case vartype( raEncoderParams[m.liParam,1])=='Q' and len(raEncoderParams[m.liParam,1])=16
  33890.         laParam[m.liParam,1] = raEncoderParams[m.liParam,1]
  33891.     otherwise
  33892.         error _GDIPLUS_BADENCODERPARAMNAMETYPE_LOC
  33893.     endcase
  33894.     * Data type and value
  33895.     laParam[m.liParam,2]=1    && default value
  33896.     laParam[m.liParam,3]=raEncoderParams[m.liParam,2]
  33897.     lvValue = raEncoderParams[m.liParam,3]
  33898.     lnValue = icase( vartype(raEncoderParams[m.liParam,3])$'NY',raEncoderParams[m.liParam,3] ;
  33899.                     ,vartype(raEncoderParams[m.liParam,3])='C',val(raEncoderParams[m.liParam,3]) ;
  33900.                     ,null)
  33901.     local llOK    
  33902.     llOK = .F. && only set to .T. if works
  33903.     do case
  33904.     case GDIPLUS_ValueDataType_Byte = laParam[m.liParam,3]
  33905.         if vartype(m.lvValue)$'NC'
  33906.             laParam[m.liParam,4] = chr(m.lnValue)
  33907.             llOK = .T.
  33908.         endif
  33909.     case GDIPLUS_ValueDataType_Short= laParam[m.liParam,3]
  33910.         if vartype(m.lvValue)$'NC'
  33911.             laParam[m.liParam,4] = chr(m.lnValue%256)+chr(m.lnValue/256)
  33912.             llOK = .T.
  33913.         endif
  33914.     case GDIPLUS_ValueDataType_Long = laParam[m.liParam,3]
  33915.         if vartype(m.lvValue)$'NC'
  33916.             laParam[m.liParam,4] = bintoc(m.lnValue,'4RS')
  33917.             llOK = .T.
  33918.         endif
  33919.     case GDIPLUS_ValueDataType_Rational = laParam[m.liParam,3]
  33920.         * must be expressed as a string in the form "num/den"
  33921.         if vartype(m.lvValue)=='C' and '/' $ m.lvValue
  33922.             laParam[m.liParam,4] = ;
  33923.                 bintoc(val(strextract(m.lnValue,'','/')),'4RS') ;
  33924.                 + bintoc(val(strextract(m.lnValue,'/','')),'4RS')
  33925.             llOK = .T.
  33926.         endif
  33927.     case GDIPLUS_ValueDataType_LongRange = laParam[m.liParam,3]
  33928.         * must be expressed as a string in the form "low-high"
  33929.         if vartype(m.lvValue)=='C' and '-' $ m.lvValue
  33930.             laParam[m.liParam,4] = ;
  33931.                 bintoc(val(strextract(m.lnValue,'','-')),'4RS') ;
  33932.                 + bintoc(val(strextract(m.lnValue,'-','')),'4RS')
  33933.             llOK = .T.
  33934.         endif
  33935.     case GDIPLUS_ValueDataType_ASCII = laParam[m.liParam,3]
  33936.         if vartype(m.lvValue)=='C'
  33937.             laParam[m.liParam,4] = m.lvValue + chr(0)
  33938.             * laParam[m.liParam,2]= len(laParam[m.liParam,4]) ?
  33939.             llOK = .T.
  33940.         endif
  33941.     case GDIPLUS_ValueDataType_Undefined = laParam[m.liParam,3]
  33942.         if vartype(m.lvValue)$'CQ'
  33943.             laParam[m.liParam,4] = m.lvValue
  33944.             laParam[m.liParam,2]= len(m.lvValue)
  33945.             llOK = .T.
  33946.         endif
  33947.     * Don't support rational range or pointer
  33948.     * otherwise llOK already false
  33949.     endcase
  33950.     if ! m.llOK
  33951.         error _GDIPLUS_BADENCODERPARAMVALUE_LOC
  33952.         return 0
  33953.     endif
  33954.     lnBufferSize = m.lnBufferSize + len(laParam[m.liParam,4])
  33955. endfor
  33956. * OK, allocate array and go for it.
  33957. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  33958. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  33959. if 0==m.lnBufferPtr
  33960.     * Memory allocation error
  33961.     error _GDIPLUS_LOC_MALLOCFAIL
  33962.     return null
  33963. endif
  33964. local lnArrayPtr, lnValuePtr
  33965. lnArrayPtr = m.lnBufferPtr + 4
  33966. lnValuePtr = m.lnArrayPtr  + 28*m.lnParamCount
  33967. * parameter count:
  33968. sys(2600,m.lnBufferPtr ,4, bintoc(m.lnParamCount,'4RS'))
  33969. for liParam = 1 to m.lnParamCount
  33970.     sys(2600,m.lnArrayPtr,28, ;
  33971.         laParam[m.liParam,1];
  33972.         + bintoc(laParam[m.liParam,2],'4RS') ;
  33973.         + bintoc(laParam[m.liParam,3],'4RS') ;
  33974.         + bintoc(m.lnValuePtr,'4RS') ;    
  33975.     sys(2600,m.lnValuePtr,len(laParam[m.liParam,4]),laParam[m.liParam,4])
  33976.     lnArrayPtr = m.lnArrayPtr + 28
  33977.     lnValuePtr = m.lnValuePtr + len(laParam[m.liParam,4])
  33978. endfor
  33979. return m.lnBufferPtr
  33980. ENDPROC
  33981. PROCEDURE getencoderparaminfo
  33982. lparameters tcParamName, rqGUID, rnDataType
  33983. do case
  33984. case upper(m.tcParamName) == 'QUALITY'
  33985.     * Supported by: JPEG
  33986.     rqGUID = GDIPLUS_ENCODER_Quality
  33987.     rnDataType = GDIPLUS_ValueDataType_Long
  33988. case upper(m.tcParamName) == 'TRANSFORMATION'
  33989.     * Supported by: JPEG
  33990.     rqGUID = GDIPLUS_ENCODER_Transformation
  33991.     rnDataType = GDIPLUS_ValueDataType_Long
  33992. case upper(m.tcParamName) == 'LUMINANCETABLE'
  33993.     * Supported by: JPEG
  33994.     rqGUID = GDIPLUS_ENCODER_LuminanceTable
  33995.     rnDataType = GDIPLUS_ValueDataType_Short && array of ...
  33996. case upper(m.tcParamName) == 'CHROMINANCETABLE'
  33997.     * Supported by: JPEG
  33998.     rqGUID = GDIPLUS_ENCODER_ChrominanceTable
  33999.     rnDataType = GDIPLUS_ValueDataType_Short && array of ...
  34000. case upper(m.tcParamName) == 'COMPRESSION'
  34001.     * Supported by: TIFF
  34002.     rqGUID = GDIPLUS_ENCODER_Compression
  34003.     rnDataType = GDIPLUS_ValueDataType_Long
  34004. case upper(m.tcParamName) == 'COLORDEPTH'
  34005.     * Supported by: TIFF
  34006.     rqGUID = GDIPLUS_ENCODER_ColorDepth
  34007.     rnDataType = GDIPLUS_ValueDataType_Long
  34008. case upper(m.tcParamName) == 'SAVEFLAG'
  34009.     * Supported by: TIFF
  34010.     rqGUID = GDIPLUS_ENCODER_SaveFlag
  34011.     rnDataType = GDIPLUS_ValueDataType_Long
  34012. * These are defined by GDI+ but not supported by any of the standard encoders
  34013. *case upper(m.tcParamName) == 'COMPRESSION'
  34014. *case upper(m.tcParamName) == 'SCANMETHOD'
  34015. *case upper(m.tcParamName) == 'VERSION'
  34016. *case upper(m.tcParamName) == 'RENDERMETHOD'
  34017. otherwise
  34018.     return .F.
  34019. endcase
  34020. return .T.
  34021. ENDPROC
  34022. PROCEDURE getpropertycount
  34023. #if GDIPLUS_CHECK_OBJECT
  34024. if This.gdipHandle==0
  34025.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34026.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34027.     return cast(null as I)
  34028. endif
  34029. #endif
  34030. local lnCount
  34031. store 0 to lnCount
  34032. declare integer GdipGetPropertyCount in gdiplus.dll ;
  34033.     integer nImage, integer @nCount
  34034. This.gdipStatus = GdipGetPropertyCount( This.gdipHandle, @lnCount)
  34035. return iif(GDIPLUS_STATUS_OK==This.gdipStatus,m.lnCount,cast(null as I))
  34036. ENDPROC
  34037. PROCEDURE getpropertyidlist
  34038. lparameters raPropIDList
  34039. #if GDIPLUS_CHECK_OBJECT
  34040. if This.gdipHandle==0
  34041.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34042.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34043.     return cast(null as I)
  34044. endif
  34045. #endif
  34046. #if GDIPLUS_CHECK_PARAMS
  34047. if !(type("raPropIDList[1]")!='U')
  34048.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34049.     error 11 && Function argument
  34050.     return cast(null as I)
  34051. endif
  34052. #endif
  34053. local lnCount, lcIdList, lnIndex
  34054. lnCount = This.GetPropertyCount()
  34055. if isnull(m.lnCount) or m.lnCount<1
  34056.     return m.lnCount
  34057. endif
  34058. declare integer GdipGetPropertyIdList in gdiplus.dll ;
  34059.     integer nImage, integer nCount, string @ list
  34060. lcIdList = replicate( chr(0), 4*m.lnCount )
  34061. This.gdipStatus = GdipGetPropertyIdList( This.gdipHandle, lnCount, @lcIdList )
  34062. * Now convert to the array
  34063. dimension raPropIDList[m.lnCount]
  34064. for lnIndex = 1 to m.lnCount
  34065.     raPropIDList[m.lnIndex] = ctobin(substr(m.lcIdList,m.lnIndex*4-3,4),'RS')
  34066. endfor
  34067. return m.lnCount
  34068. ENDPROC
  34069. PROCEDURE getpropertyitem
  34070. lparameters tnPropID as Integer
  34071. #if GDIPLUS_CHECK_OBJECT
  34072. if This.gdipHandle==0
  34073.     error _GDIPLUS_NOGDIPOBJECT_LOC
  34074.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  34075.     return cast(null as I)
  34076. endif
  34077. #endif
  34078. #if GDIPLUS_CHECK_PARAMS
  34079. if !(vartype(m.tnPropID)='N')
  34080.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34081.     error 11 && Function argument
  34082.     return cast(null as I)
  34083. endif
  34084. #endif
  34085. declare integer GlobalAlloc in kernel32.dll integer nFlags, integer nSize
  34086. declare integer GlobalFree in kernel32.dll integer nHandle
  34087. declare integer lstrlenA in kernel32.dll as __win32_lstrlenA_ptr integer
  34088. declare integer GdipGetPropertyItemSize in gdiplus.dll ;
  34089.     integer nImage, integer nPropID, integer @ nBufSize
  34090. declare integer GdipGetPropertyItem in gdiplus.dll ;
  34091.     integer nImage, integer nPropID, integer nBufSize, integer nBufferPtr
  34092. local lnBufferSize as integer, lnBufferPtr as Integer, lnStringPtr as integer
  34093. lnBufferSize = 0
  34094. This.gdipStatus = GdipGetPropertyItemSize( This.gdipHandle, m.tnPropID, @lnBufferSize )
  34095. if GDIPLUS_STATUS_OK != This.gdipStatus
  34096.     return null
  34097. endif
  34098. lnBufferPtr = GlobalAlloc( 0x0040, m.lnBufferSize ) && 0x40=GMEM_FIXED|GMEM_ZEROINIT
  34099. if 0==m.lnBufferPtr
  34100.     * Memory allocation error
  34101.     error _GDIPLUS_MALLOCFAIL_LOC
  34102.     return null
  34103. endif
  34104. This.gdipStatus = GdipGetPropertyItem( This.gdipHandle, m.tnPropID, m.lnBufferSize, m.lnBufferPtr )
  34105. if GDIPLUS_STATUS_OK != This.gdipStatus
  34106.     GlobalFree( m.lnBufferPtr )
  34107.     return null
  34108. endif
  34109. * Now decode the parameter
  34110. * PropertyItem
  34111. * Offset    Size    Description
  34112. *   0         4         ID (32 bit int)
  34113. *    4         4        Length of value 
  34114. *    8         4        Data type - GP_PROPERTYTAGTYPE_xxx
  34115. *  12         4        Pointer to value
  34116. *  16 (probably)    The value itself
  34117. local lnPropertyTagType, lnValueLen, lnValuePtr, lvReturn
  34118. lnPropertyTagType = ctobin(sys(2600,m.lnBufferPtr+8,4),'RS')
  34119. lnValueLen = ctobin(sys(2600,m.lnBufferPtr+4,4),'RS')
  34120. lnValuePtr = ctobin(sys(2600,m.lnBufferPtr+12,4),'RS')
  34121. do case
  34122. case inlist(m.lnPropertyTagType,0,6,7,8)    && nothing or undefined
  34123.     lvReturn = null    && warning: this is also error value
  34124. case 1 == m.lnPropertyTagType    && Byte
  34125.     lvReturn = asc( sys(2600,m.lnValuePtr,1))
  34126. case 2 == m.lnPropertyTagType    && ASCII string (_not_ unicode)
  34127.     * trim null byte off end, but only if there! (It *should* be, but..)
  34128.     lvReturn = strextract(sys(2600,m.lnValuePtr,m.lnValueLen),'',chr(0),1,2)
  34129. case 3 == m.lnPropertyTagType    && Short (16 bit)
  34130.     lvReturn = asc(sys(2600,m.lnValuePtr,1))+256*asc(sys(2600,m.lnValuePtr+1,1))
  34131. case 4 == m.lnPropertyTagType    && Long (32 bit)
  34132.     lvReturn = ctobin(sys(2600,m.lnValuePtr,4),'RS')
  34133. case 5 == m.lnPropertyTagType    && Rational(two 32 bit)
  34134.     * return as string
  34135.     lvReturn = ltrim(str( ctobin(sys(2600,m.lnValuePtr,4),'RS') )) ;
  34136.         + '/' ;
  34137.         + ltrim(str( ctobin(sys(2600,m.lnValuePtr+4,4),'RS') ))
  34138. case 9 == m.lnPropertyTagType    && signed Long (32 bit)
  34139.     lvReturn = ctobin(sys(2600,m.lnValuePtr,4),'RS')
  34140.     if m.lvReturn>0x7FFFFFFF
  34141.         lvReturn = m.lvReturn - 0x100000000
  34142.     endif
  34143. case 10 == m.lnPropertyTagType    && signed rational a/b
  34144.     local lnNum, lnDen
  34145.     lnNum = ctobin(sys(2600,m.lnValuePtr,4),'RS')
  34146.     lnDen = ctobin(sys(2600,m.lnValuePtr+4,4),'RS')
  34147.     if m.lnNum >0x7FFFFFFF
  34148.         lnNum = m.lnNum - 0x100000000
  34149.     endif
  34150.     if m.lnDen >0x7FFFFFFF
  34151.         lnDen = m.lnDen - 0x100000000
  34152.     endif
  34153.     lvReturn = ltrim(str(m.lnNum)) +'/'+ltrim(str(m.lnDen))
  34154. otherwise
  34155.     GlobalFree( m.lnBufferPtr )
  34156.     error _GDIPLUS_BADPROPERTYTAGTYPE_LOC
  34157.     return null
  34158. endcase
  34159. GlobalFree( m.lnBufferPtr )
  34160. return m.lvReturn
  34161. ENDPROC
  34162. PROCEDURE clone
  34163. lparameters toImage as GpImage
  34164. this.Destroy()
  34165. local nHandle
  34166. nHandle = 0
  34167. #if GDIPLUS_CHECK_PARAMS
  34168. if !(vartype(m.toImage)='O' and m.toImage.gdipHandle<>0)
  34169.     error 11 && function argument
  34170.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34171.     return .F.
  34172. endif
  34173. #endif
  34174. Declare Integer GdipCloneImage In GDIPlus.Dll ;
  34175.     integer nImage, integer @nCloneImage
  34176. This.GdipStatus = GdipCloneImage( ;
  34177.     m.toImage.gdipHandle ;
  34178. ,    @nHandle)
  34179. this.gdipHandle= m.nHandle
  34180. return GDIPLUS_STATUS_OK == This.GdipStatus
  34181. ENDPROC
  34182. PROCEDURE Destroy
  34183. if This.GdipHandle!=0 and This.gdipOwnsThisHandle
  34184.     Declare Integer GdipDisposeImage In GDIPlus.Dll ;
  34185.         integer nImage
  34186.     GdipDisposeImage(This.GdipHandle)
  34187.     This.GdipHandle=0
  34188.     This.gdipOwnsThisHandle = .F.
  34189. endif
  34190. ENDPROC
  34191. PROCEDURE Init
  34192. lparameters tvParam1, tvParam2
  34193. if not dodefault()
  34194.     return .F.
  34195. endif
  34196. do case
  34197. case vartype(m.tvParam1) = 'N'
  34198.     * Handle
  34199.     #if GDIPLUS_CHECK_PARAMS
  34200.     if !(vartype(m.tvParam2)='L')
  34201.         error 11 && function argument
  34202.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34203.         return .F.
  34204.     endif
  34205.     #endif
  34206.     This.SetHandle(m.tvParam1,m.tvParam2)
  34207. case vartype(m.tvParam1) = 'C'
  34208.     * Filename, no second param
  34209.     #if GDIPLUS_CHECK_PARAMS
  34210.     if !(vartype(m.tvParam2)='L')
  34211.         error 11 && function argument
  34212.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34213.         return .F.
  34214.     endif
  34215.     #endif
  34216.     return This.CreateFromFile( m.tvParam1, m.tvParam2 )
  34217. case vartype(m.tvParam1)='L'
  34218.     * Do nothing
  34219. otherwise
  34220.     error 11 && function argument
  34221.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  34222.     return .F.
  34223. endcase
  34224. return .T.
  34225. ENDPROC
  34226. 6PROCEDURE gdiprect_access
  34227. * Convert object into 4 x 4-byte integers
  34228. * Modify bintoc() output into little-endian with normal sign bit
  34229. return ;
  34230.     bintoc(This.X,'4RS')+bintoc(This.Y,'4RS')+bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
  34231. ENDPROC
  34232. PROCEDURE gdiprect_assign
  34233. LPARAMETERS tcRect
  34234. #if GDIPLUS_CHECK_PARAMS
  34235. if !(vartype(m.tcRect)='C' and len(m.tcRect)=16)
  34236.     error 11 && Function argument
  34237.     return .F.
  34238. endif
  34239. #endif
  34240. This.X = ctobin(substr(m.tcRect,1,4),'RS')
  34241. This.Y = ctobin(substr(m.tcRect,5,4),'RS')
  34242. This.W = ctobin(substr(m.tcRect,9,4),'RS')
  34243. This.H = ctobin(substr(m.tcRect,13,4),'RS')
  34244. ENDPROC
  34245. PROCEDURE gdiprectf_access
  34246. return ;
  34247.     bintoc(This.X,'F') + bintoc(This.Y,'F') ;
  34248.     + bintoc(This.W,'F') + bintoc(This.H,'F')
  34249. ENDPROC
  34250. PROCEDURE gdiprectf_assign
  34251. LPARAMETERS tcRectF
  34252. #if GDIPLUS_CHECK_PARAMS
  34253. if !(vartype(m.tcRectF)='C' and len(m.tcRectF)=16)
  34254.     error 11 && Function argument
  34255.     return .F.
  34256. endif
  34257. #endif
  34258. * Unpack structure
  34259. This.X = ctobin(substr(m.tcRectF,1,4),'N')
  34260. This.Y = ctobin(substr(m.tcRectF,5,4),'N')
  34261. This.W = ctobin(substr(m.tcRectF,9,4),'N')
  34262. This.H = ctobin(substr(m.tcRectF,13,4),'N')
  34263. ENDPROC
  34264. PROCEDURE create
  34265. lparameters tx,ty,tw,th
  34266. #if GDIPLUS_CHECK_PARAMS
  34267. if !(vartype(m.tx)='N' and vartype(m.ty)='N' ;
  34268.     and vartype(m.tw)$'LN' and vartype(m.th)$'LN')
  34269.     error 11 && Function argument
  34270.     return .F.
  34271. endif
  34272. #endif
  34273. This.X = m.tx
  34274. This.Y = m.ty
  34275. This.W = evl(m.tw,0)
  34276. This.H = evl(m.th,0)
  34277. ENDPROC
  34278. PROCEDURE x2_access
  34279. RETURN THIS.x+This.w
  34280. ENDPROC
  34281. PROCEDURE y2_access
  34282. RETURN THIS.y+This.h
  34283. ENDPROC
  34284. PROCEDURE set
  34285. lparameters tx as Number,ty as Number,tw as Number,th as Number
  34286. #if GDIPLUS_CHECK_PARAMS
  34287. if !(vartype(m.tx)='N' and vartype(m.ty)='N' ;
  34288.     and vartype(m.tw)$'LN' and vartype(m.th)$'LN')
  34289.     error 11 && Function argument
  34290.     return .F.
  34291. endif
  34292. #endif
  34293. This.X = m.tx
  34294. This.Y = m.ty
  34295. This.W = evl(m.tw,0)
  34296. This.H = evl(m.th,0)
  34297. ENDPROC
  34298. PROCEDURE gdippointf_access
  34299. * Convert object into 2 x 4-byte integers
  34300. * Modify bintoc() output into little-endian with normal sign bit
  34301. return ;
  34302.     bintoc(This.X,'F')+bintoc(This.Y,'F')
  34303. ENDPROC
  34304. PROCEDURE gdippointf_assign
  34305. LPARAMETERS tcPointF
  34306. #if GDIPLUS_CHECK_PARAMS
  34307. if !(vartype(m.tcPointF)='C' and len(m.tcPointF)=8)
  34308.     error 11 && Function argument
  34309.     return .F.
  34310. endif
  34311. #endif
  34312. * Unpack structure
  34313. This.X = ctobin(substr(m.tcRectF,1,4),'N')
  34314. This.Y = ctobin(substr(m.tcRectF,5,4),'N')
  34315. ENDPROC
  34316. PROCEDURE gdipsizef_access
  34317. * Convert object into 2 x 4-byte integers
  34318. * Modify bintoc() output into little-endian with normal sign bit
  34319. return ;
  34320.     bintoc(This.W,'F')+bintoc(This.H,'F')
  34321. ENDPROC
  34322. PROCEDURE gdipsizef_assign
  34323. LPARAMETERS tcSizeF
  34324. #if GDIPLUS_CHECK_PARAMS
  34325. if !(vartype(m.tcSizeF)='C' and len(m.tcSizeF)=8)
  34326.     error 11 && Function argument
  34327.     return .F.
  34328. endif
  34329. #endif
  34330. * Unpack structure
  34331. This.W = ctobin(substr(m.tcSizeF,1,4),'N')
  34332. This.H = ctobin(substr(m.tcSizeF,5,4),'N')
  34333. ENDPROC
  34334. PROCEDURE gppoint_access
  34335. RETURN This.ObjFactory( 'gprectange.gppoint_access', GDIPLUS_CLASS_POINT,This.X,This.Y)
  34336. ENDPROC
  34337. PROCEDURE gppoint_assign
  34338. LPARAMETERS toPoint
  34339. #if GDIPLUS_CHECK_PARAMS
  34340. if !(vartype(m.toPoint)='O' and pemstatus(m.toPoint,'X',5))
  34341.     error 11 && Function argument
  34342.     return .F.
  34343. endif
  34344. #endif
  34345. This.X = m.toPoint.X
  34346. This.Y = m.toPoint.Y
  34347. ENDPROC
  34348. PROCEDURE gpsize_access
  34349. RETURN This.ObjFactory( 'gprectange.gpsize_access', GDIPLUS_CLASS_SIZE,This.W,This.H)
  34350. ENDPROC
  34351. PROCEDURE gpsize_assign
  34352. LPARAMETERS toSize
  34353. #if GDIPLUS_CHECK_PARAMS
  34354. if !(vartype(m.toSize)='O' and pemstatus(m.toSize,'W',5))
  34355.     error 11 && Function argument
  34356.     return .F.
  34357. endif
  34358. #endif
  34359. This.W = m.toSize.W
  34360. This.H = m.toSize.H
  34361. ENDPROC
  34362. PROCEDURE createfrompointsize
  34363. lparameters toPoint as GpPoint, toSize as GpSize
  34364. do case
  34365. case empty(m.toPoint)
  34366.     * point not passed, (0,0) origin
  34367.     This.X = 0
  34368.     This.Y = 0
  34369. case vartype(m.toPoint)='O'
  34370.     This.GpPoint = m.toPoint
  34371. case vartype(m.toPoint)='C'
  34372.     * Assume PointF
  34373.     This.gdipPointF = m.toPoint
  34374. otherwise
  34375.     error 11
  34376.     return .F.
  34377. endcase
  34378. do case
  34379. case empty(m.toSize)
  34380.     * size not passed, (0,0) size
  34381.     This.W = 0
  34382.     This.H = 0
  34383. case vartype(m.toSize)='O'
  34384.     This.GpSize = m.toSize
  34385. case vartype(m.toSize)='C'
  34386.     * Assume SizeF
  34387.     This.gdipSizeF = m.toSize
  34388. otherwise
  34389.     error 11
  34390.     return .F.
  34391. endcase
  34392. ENDPROC
  34393. PROCEDURE gdipsize_access
  34394. * Return size as 2 x 32-bit integers
  34395. * Modify bintoc() output into little-endian with normal sign bit
  34396. return ;
  34397.     bintoc(This.W,'4RS')+bintoc(This.H,'4RS')
  34398. ENDPROC
  34399. PROCEDURE gdipsize_assign
  34400. LPARAMETERS tcSize as String
  34401. #if GDIPLUS_CHECK_PARAMS
  34402. if !(vartype(m.tcSize)='C' and len(m.tcSize)=8)
  34403.     error 11 && Function argument
  34404.     return .F.
  34405. endif
  34406. #endif
  34407. This.W = ctobin(substr(m.tcSize,1,4),'RS')
  34408. This.H = ctobin(substr(m.tcSize,5,4),'RS')
  34409. ENDPROC
  34410. PROCEDURE gdippoint_access
  34411. * Return size as 2 x 32-bit integers
  34412. * Modify bintoc() output into little-endian with normal sign bit
  34413. return ;
  34414.     bintoc(This.X,'4RS')+bintoc(This.Y,'4RS')
  34415. ENDPROC
  34416. PROCEDURE gdippoint_assign
  34417. LPARAMETERS tcPoint as String
  34418. #if GDIPLUS_CHECK_PARAMS
  34419. if !(vartype(m.tcPoint)='C' and len(m.tcPoint)=8)
  34420.     error 11 && Function argument
  34421.     return .F.
  34422. endif
  34423. #endif
  34424. This.X = ctobin(substr(m.tcPoint,1,4),'RS')
  34425. This.Y = ctobin(substr(m.tcPoint,5,4),'RS')
  34426. ENDPROC
  34427. PROCEDURE gdirect_access
  34428. * Convert object into 4 x 4-byte integers
  34429. * Modify bintoc() output into little-endian with normal sign bit
  34430. return ;
  34431.     bintoc(This.X,'4RS')+bintoc(This.Y,'4RS') ;
  34432.     + bintoc(This.X2,'4RS')+bintoc(This.Y2,'4RS')
  34433. ENDPROC
  34434. PROCEDURE gdirect_assign
  34435. LPARAMETERS tcRect as string
  34436. #if GDIPLUS_CHECK_PARAMS
  34437. if !(vartype(m.tcRect)='C' and len(m.tcRect)=16)
  34438.     error 11 && Function argument
  34439.     return .F.
  34440. endif
  34441. #endif
  34442. This.X = ctobin(substr(m.tcRect,1,4),'RS')
  34443. This.Y = ctobin(substr(m.tcRect,5,4),'RS')
  34444. This.X2 = ctobin(substr(m.tcRect,9,4),'RS')
  34445. This.Y2 = ctobin(substr(m.tcRect,13,4),'RS')
  34446. ENDPROC
  34447. PROCEDURE x2_assign
  34448. LPARAMETERS vNewVal
  34449. This.w = m.vNewVal - This.x
  34450. ENDPROC
  34451. PROCEDURE y2_assign
  34452. LPARAMETERS vNewVal
  34453. This.h = m.vNewVal - This.y
  34454. ENDPROC
  34455. PROCEDURE clone
  34456. lparameters toOtherRect
  34457. do case
  34458. case vartype(m.toOtherRect)='O'
  34459.     #if GDIPLUS_CHECK_PARAMS
  34460.     if !(vartype(toOtherRect.X)='N' and vartype(toOtherRect.Y)='N' ;
  34461.         and vartype(toOtherRect.W)='N' and vartype(toOtherRect.H)='N')
  34462.         error 11 && Function argument
  34463.         return .F.
  34464.     endif
  34465.     #endif
  34466.     This.X = m.toOtherRect.X
  34467.     This.Y = m.toOtherRect.Y
  34468.     This.W = m.toOtherRect.W
  34469.     This.H = m.toOtherRect.H
  34470. case vartype(m.toOtherRect)='C'
  34471.     #if GDIPLUS_CHECK_PARAMS
  34472.     if !(len(m.toOtherRect)=16)
  34473.         error 11 && Function argument
  34474.         return .F.
  34475.     endif
  34476.     #endif
  34477.     * Assume RectF
  34478.     This.gdipRectF = m.toOtherRect
  34479. otherwise
  34480.     error 11
  34481.     return .F.
  34482. endcase
  34483. ENDPROC
  34484. PROCEDURE Init
  34485. lparameters tXorRectorPoint,tYorSize,tw,th
  34486. if not dodefault()
  34487.     return .F.
  34488. endif
  34489. do case
  34490. case pcount()=0
  34491.     * empty constructor - rectangle will be empty
  34492. case pcount()=1 and vartype(m.tXorRectorPoint)='O'
  34493.     * Passed an object - presumably an existing Rect object
  34494.     This.Clone(m.tXorRectorPoint)
  34495. case pcount()=1 and vartype(m.tXorRectorPoint)='C'
  34496.     * Passed a string (structure)
  34497.     * Rect or RectF? Assume RectF as this is preferred format
  34498.     This.gdipRectF = m.tXorRectorPoint
  34499. case pcount()=2 and vartype(m.tXorRectorPoint)$'OC' and vartype(m.tYorSize)$'OC' 
  34500.     * Passed separate point and size objects?
  34501.     This.CreateFromPointSize(m.tXorRectorPoint, m.tYorSize)
  34502. case pcount()>=4 ;
  34503.     and vartype(m.tXorRectorPoint)='N' and vartype(m.tYorSize)='N' ;
  34504.     and vartype(m.tw)='N' and vartype(m.th)='N'
  34505.     * Separate components
  34506.     This.Create(m.tXorRectorPoint,m.tYorSize,m.tw,m.th)
  34507. otherwise
  34508.     error 11
  34509.     return .F.
  34510. endcase
  34511. ENDPROC
  34512. GDI+ object not created or associated
  34513. GdipGetDpiX
  34514. gdiplus.dll
  34515. GDIPHANDLE
  34516. GDIPSTATUS
  34517. GDIPGETDPIX
  34518. GDIPLUS
  34519. VNEWVAL
  34520. GDI+ object not created or associated
  34521. GdipGetDpiY
  34522. gdiplus.dll
  34523. GDIPHANDLE
  34524. GDIPSTATUS
  34525. GDIPGETDPIY
  34526. GDIPLUS
  34527. VNEWVALW
  34528. GPPEN
  34529. GDI+ object not created or associated
  34530. ONNNN
  34531. GdipDrawLine
  34532. gdiplus.dll
  34533. TOPEN
  34534. GDIPHANDLE
  34535. GDIPSTATUS
  34536. GDIPDRAWLINE
  34537. GDIPLUS
  34538. GETHANDLE_
  34539. GDI+ object not created or associated
  34540. GdipDrawRectangle
  34541. gdiplus.dll
  34542. TOPEN
  34543. TXORRECT
  34544. GDIPHANDLE
  34545. GDIPSTATUS
  34546. GDIPDRAWRECTANGLE
  34547. GDIPLUS
  34548. GETHANDLE
  34549. GDI+ object not created or associated
  34550. gdipRectF
  34551. gdipPointF
  34552. GdipDrawString
  34553. gdiplus.dll
  34554. TCANSISTRING
  34555. TOFONT
  34556. TVRECTPOINT
  34557. TOSTRINGFORMAT
  34558. TOBRUSH
  34559. GDIPHANDLE
  34560. GDIPSTATUS
  34561. LCRECT    
  34562. GDIPRECTF
  34563. GDIPPOINTF
  34564. GDIPDRAWSTRING
  34565. GDIPLUS
  34566. GETHANDLEW
  34567. GDI+ object not created or associated
  34568. gdipRectF
  34569. gdipPointF
  34570. GdipDrawString
  34571. gdiplus.dll
  34572. TCUNICODESTRING
  34573. TOFONT
  34574. TVRECTPOINT
  34575. TOSTRINGFORMAT
  34576. TOBRUSH
  34577. GDIPHANDLE
  34578. GDIPSTATUS
  34579. LCRECT    
  34580. GDIPRECTF
  34581. GDIPPOINTF
  34582. GDIPDRAWSTRING
  34583. GDIPLUS
  34584. GETHANDLE
  34585. GDI+ object not created or associated
  34586. NNNNN
  34587. NNLLL
  34588. GdipDrawPie
  34589. gdiplus.dll
  34590. TOPEN
  34591. TXORRECT
  34592. TNYORSTART
  34593. TNWORSWEEP
  34594. NSTART
  34595. NSWEEP
  34596. GDIPHANDLE
  34597. GDIPSTATUS
  34598. GDIPDRAWPIE
  34599. GDIPLUS
  34600. GETHANDLE
  34601. GDI+ object not created or associated
  34602. NNNNN
  34603. NNLLL
  34604. GdipFillPie
  34605. gdiplus.dll
  34606. TOBRUSH
  34607. TXORRECT
  34608. TNYORSTART
  34609. TNWORSWEEP
  34610. NSTART
  34611. NSWEEP
  34612. GDIPHANDLE
  34613. GDIPSTATUS
  34614. GDIPFILLPIE
  34615. GDIPLUS
  34616. GETHANDLE
  34617. GDI+ object not created or associated
  34618. ONNNNNN
  34619. GdipDrawArc
  34620. gdiplus.dll
  34621. TOPEN
  34622. NWIDTH
  34623. NHEIGHT
  34624. NSTARTANGLE
  34625. NSWEEPANGLE
  34626. GDIPHANDLE
  34627. GDIPSTATUS
  34628. GDIPDRAWARC
  34629. GDIPLUS
  34630. GETHANDLE
  34631. GDI+ object not created or associated
  34632. ONNNNNNNN
  34633. GdipDrawBezier
  34634. gdiplus.dll
  34635. TOPEN
  34636. GDIPHANDLE
  34637. GDIPSTATUS
  34638. GDIPDRAWBEZIER
  34639. GDIPLUS
  34640. GETHANDLE]
  34641. GDI+ object not created or associated
  34642. GdipDrawEllipse
  34643. gdiplus.dll
  34644. TOPEN
  34645. TXORRECT
  34646. GDIPHANDLE
  34647. GDIPSTATUS
  34648. GDIPDRAWELLIPSE
  34649. GDIPLUS
  34650. GETHANDLE
  34651. GDI+ object not created or associated
  34652. GdipFillRectangle
  34653. gdiplus.dll
  34654. TOBRUSH
  34655. TXORRECT
  34656. GDIPHANDLE
  34657. GDIPSTATUS
  34658. GDIPFILLRECTANGLE
  34659. GDIPLUS
  34660. GETHANDLE
  34661. GDI+ object not created or associated
  34662. GdipFillEllipse
  34663. gdiplus.dll
  34664. TOBRUSH
  34665. TXORRECT
  34666. GDIPHANDLE
  34667. GDIPSTATUS
  34668. GDIPFILLELLIPSE
  34669. GDIPLUS
  34670. GETHANDLE
  34671. GDI+ object not created or associated
  34672. GdipFlush
  34673. gdiplus.dll
  34674. TNFLUSHINTENTION
  34675. GDIPHANDLE
  34676. GDIPSTATUS    
  34677. GDIPFLUSH
  34678. GDIPLUS
  34679. GdipCreateFromHDC
  34680. gdiplus.dll
  34681. GDIPSTATUS
  34682. DESTROY
  34683. GDIPCREATEFROMHDC
  34684. GDIPLUS
  34685. NHANDLE    
  34686. SETHANDLEv
  34687. LOGICAL
  34688. GdipCreateFromHWNDICM
  34689. gdiplus.dll
  34690. GdipCreateFromHWND
  34691. gdiplus.dll
  34692. TLICM
  34693. GDIPSTATUS
  34694. DESTROY
  34695. NHANDLE
  34696. GDIPCREATEFROMHWNDICM
  34697. GDIPLUS
  34698. GDIPCREATEFROMHWND    
  34699. SETHANDLE
  34700. GDI+ object not created or associated
  34701. GdipGetCompositingMode
  34702. gdiplus.dll
  34703. GDIPHANDLE
  34704. GDIPSTATUS
  34705. GDIPGETCOMPOSITINGMODE
  34706. GDIPLUS
  34707. NMODE
  34708. GDI+ object not created or associated
  34709. GdipSetCompositingMode
  34710. gdiplus.dll
  34711. TNMODE
  34712. GDIPHANDLE
  34713. GDIPSTATUS
  34714. GDIPSETCOMPOSITINGMODE
  34715. GDIPLUS
  34716. GDI+ object not created or associated
  34717. GdipGetCompositingQuality
  34718. gdiplus.dll
  34719. GDIPHANDLE
  34720. GDIPSTATUS
  34721. GDIPGETCOMPOSITINGQUALITY
  34722. GDIPLUS
  34723. NQUALITY
  34724. GDI+ object not created or associated
  34725. GdipSetCompositingQuality
  34726. gdiplus.dll
  34727. TNQUALITY
  34728. GDIPHANDLE
  34729. GDIPSTATUS
  34730. GDIPSETCOMPOSITINGQUALITY
  34731. GDIPLUS
  34732. GDI+ object not created or associated
  34733. GdipGetInterpolationMode
  34734. gdiplus.dll
  34735. GDIPHANDLE
  34736. GDIPSTATUS
  34737. GDIPGETINTERPOLATIONMODE
  34738. GDIPLUS
  34739. NMODE
  34740. GDI+ object not created or associated
  34741. GdipSetInterpolationMode
  34742. gdiplus.dll
  34743. TNINTERPMODE
  34744. GDIPHANDLE
  34745. GDIPSTATUS
  34746. GDIPSETINTERPOLATIONMODE
  34747. GDIPLUS
  34748. GDI+ object not created or associated
  34749. GdipGetPageScale
  34750. gdiplus.dll
  34751. GDIPHANDLE
  34752. GDIPSTATUS
  34753. GDIPGETPAGESCALE
  34754. GDIPLUS
  34755. NPAGESCALE
  34756. GDI+ object not created or associated
  34757. GdipSetPageScale
  34758. gdiplus.dll
  34759. TNSCALE
  34760. GDIPHANDLE
  34761. GDIPSTATUS
  34762. GDIPSETPAGESCALE
  34763. GDIPLUS
  34764. GDI+ object not created or associated
  34765. GdipGetSmoothingMode
  34766. gdiplus.dll
  34767. GDIPHANDLE
  34768. GDIPSTATUS
  34769. GDIPGETSMOOTHINGMODE
  34770. GDIPLUS
  34771. NSMOOTHINGMODE
  34772. GDI+ object not created or associated
  34773. GdipSetSmoothingMode
  34774. gdiplus.dll
  34775. TNMODE
  34776. GDIPHANDLE
  34777. GDIPSTATUS
  34778. GDIPSETSMOOTHINGMODE
  34779. GDIPLUS
  34780. GDI+ object not created or associated
  34781. GdipGetPixelOffsetMode
  34782. gdiplus.dll
  34783. GDIPHANDLE
  34784. GDIPSTATUS
  34785. GDIPGETPIXELOFFSETMODE
  34786. GDIPLUS
  34787. NMODE
  34788. GDI+ object not created or associated
  34789. GdipSetPixelOffsetMode
  34790. gdiplus.dll
  34791. TNMODE
  34792. GDIPHANDLE
  34793. GDIPSTATUS
  34794. GDIPSETPIXELOFFSETMODE
  34795. GDIPLUS
  34796. GDI+ object not created or associated
  34797. GdipGetClipBounds
  34798. gdiplus.dll
  34799. gpgraphics.clipbounds_access
  34800. GpRectangle
  34801. GDIPHANDLE
  34802. GDIPSTATUS
  34803. GDIPGETCLIPBOUNDS
  34804. GDIPLUS
  34805. LCRECTF
  34806. LORECT
  34807. OBJFACTORY$
  34808. ClipBounds
  34809. VNEWVAL
  34810. GDI+ object not created or associated
  34811. GdipGetPageUnit
  34812. gdiplus.dll
  34813. GDIPHANDLE
  34814. GDIPSTATUS
  34815. GDIPGETPAGEUNIT
  34816. GDIPLUS
  34817. NUNIT
  34818. GDI+ object not created or associated
  34819. GdipSetPageUnit
  34820. gdiplus.dll
  34821. TNUNIT
  34822. GDIPHANDLE
  34823. GDIPSTATUS
  34824. GDIPSETPAGEUNIT
  34825. GDIPLUS
  34826. GDI+ object not created or associated
  34827. GdipGetVisibleClipBounds
  34828. gdiplus.dll
  34829. gpgraphics.visibleclipbounds_access
  34830. GpRectangle
  34831. GDIPHANDLE
  34832. GDIPSTATUS
  34833. GDIPGETVISIBLECLIPBOUNDS
  34834. GDIPLUS
  34835. LCRECTF
  34836. LORECT
  34837. OBJFACTORY+
  34838. VisibleClipBounds
  34839. VNEWVALC
  34840. GDI+ object not created or associated
  34841. gdipRectF
  34842. GdipSizeF
  34843. GdipMeasureString
  34844. gdiplus.dll
  34845. STRING
  34846. INTEGER
  34847. INTEGER
  34848. gpgraphics.measurestring
  34849. GpSizeC
  34850. TCANSISTRING
  34851. TOFONT
  34852. TVLAYOUTAREA
  34853. TOSTRINGFORMAT
  34854. RNCHARSFITTED
  34855. RNLINESFILLED
  34856. GDIPHANDLE
  34857. GDIPSTATUS
  34858. LCRECTF    
  34859. GDIPRECTF    
  34860. GDIPSIZEF
  34861. GDIPMEASURESTRING
  34862. GDIPLUS
  34863. LCBOUNDINGBOX
  34864. LNCHARSFITTED
  34865. LNLINESFILLED    
  34866. GETHANDLE
  34867. OBJFACTORY
  34868. GDI+ object not created or associated
  34869. GdipMeasureString
  34870. gdiplus.dll
  34871. STRING
  34872. INTEGER
  34873. INTEGER
  34874. gpgraphics.measurestring
  34875. GpSizeC
  34876. TCUNICODESTRING
  34877. TOFONT
  34878. TVLAYOUTAREA
  34879. TOSTRINGFORMAT
  34880. RNCHARSFITTED
  34881. RNLINESFILLED
  34882. GDIPHANDLE
  34883. GDIPSTATUS
  34884. LCRECTF    
  34885. GDIPSIZEF
  34886. GDIPMEASURESTRING
  34887. GDIPLUS
  34888. LCBOUNDINGBOX
  34889. LNCHARSFITTED
  34890. LNLINESFILLED    
  34891. GETHANDLE
  34892. OBJFACTORY
  34893. GDI+ object not created or associated
  34894. GdipGetTextRenderingHint
  34895. gdiplus.dll
  34896. GDIPHANDLE
  34897. GDIPSTATUS
  34898. GDIPGETTEXTRENDERINGHINT
  34899. GDIPLUS
  34900. NHINT
  34901. GDI+ object not created or associated
  34902. GdipSetTextRenderingHint
  34903. gdiplus.dll
  34904. TNVALUE
  34905. GDIPHANDLE
  34906. GDIPSTATUS
  34907. GDIPSETTEXTRENDERINGHINT
  34908. GDIPLUS
  34909. GDI+ object not created or associated
  34910. GdipGetRenderingOrigin
  34911. gdiplus.dll
  34912. gpgraphics.renderingorigin_access
  34913. GpPoint
  34914. GDIPHANDLE
  34915. GDIPSTATUS
  34916. GDIPGETRENDERINGORIGIN
  34917. GDIPLUS
  34918. OBJFACTORY
  34919. GDI+ object not created or associated
  34920. GdipSetRenderingOrigin
  34921. gdiplus.dll
  34922. TOPOINT
  34923. GDIPHANDLE
  34924. GDIPSTATUS
  34925. GDIPSETRENDERINGORIGIN
  34926. GDIPLUS
  34927. GDI+ object not created or associated
  34928. GdipGetTextContrast
  34929. gdiplus.dll
  34930. GDIPHANDLE
  34931. GDIPSTATUS
  34932. GDIPGETTEXTCONTRAST
  34933. GDIPLUS
  34934. NVALUE
  34935. GDI+ object not created or associated
  34936. GdipSetTextContrast
  34937. gdiplus.dll
  34938. TNVALUE
  34939. GDIPHANDLE
  34940. GDIPSTATUS
  34941. GDIPSETTEXTCONTRAST
  34942. GDIPLUS
  34943. GPPEN
  34944. INTEGER
  34945. GDI+ object not created or associated
  34946. taPoints[1,1]b
  34947. GdipDrawLines
  34948. gdiplus.dll
  34949. TOPEN
  34950. TAPOINTS
  34951. TNFIRSTCOL
  34952. GDIPHANDLE
  34953. GDIPSTATUS
  34954. LCPOINTS
  34955. MAKEGDIPARRAYF
  34956. GDIPDRAWLINES
  34957. GDIPLUS
  34958. GETHANDLEl
  34959. GPPEN
  34960. STRING
  34961. STRING
  34962. STRING
  34963. GDI+ object not created or associated
  34964. GdipDrawLines
  34965. gdiplus.dll
  34966. TOPEN
  34967. TCALIAS
  34968. TCEXPRX
  34969. TCEXPRY
  34970. GDIPHANDLE
  34971. GDIPSTATUS
  34972. LCPOINTS
  34973. MAKEGDIPARRAYFFROMCURSOR
  34974. GDIPDRAWLINES
  34975. GDIPLUS
  34976. GETHANDLE
  34977. GDI+ object not created or associated
  34978. taPoints[1,1]b
  34979. GdipDrawBeziers
  34980. gdiplus.dll
  34981. TOPEN
  34982. TAPOINTS
  34983. TNFIRSTCOL
  34984. GDIPHANDLE
  34985. GDIPSTATUS
  34986. LCPOINTS
  34987. MAKEGDIPARRAYF
  34988. GDIPDRAWBEZIERS
  34989. GDIPLUS
  34990. GETHANDLE
  34991. GDI+ object not created or associated
  34992. taPoints[1,1]b
  34993. GdipDrawClosedCurve
  34994. gdiplus.dll
  34995. TOPEN
  34996. TAPOINTS
  34997. TNFIRSTCOL
  34998. GDIPHANDLE
  34999. GDIPSTATUS
  35000. LCPOINTS
  35001. MAKEGDIPARRAYF
  35002. GDIPDRAWCLOSEDCURVE
  35003. GDIPLUS
  35004. GETHANDLEG
  35005. GDI+ object not created or associated
  35006. GdipDrawBeziers
  35007. gdiplus.dll
  35008. TOPEN
  35009. TCALIAS
  35010. TCEXPRX
  35011. TCEXPRY
  35012. GDIPHANDLE
  35013. GDIPSTATUS
  35014. LCPOINTS
  35015. MAKEGDIPARRAYFFROMCURSOR
  35016. GDIPDRAWBEZIERS
  35017. GDIPLUS
  35018. GETHANDLEK
  35019. GDI+ object not created or associated
  35020. GdipDrawClosedCurve
  35021. gdiplus.dll
  35022. TOPEN
  35023. TCALIAS
  35024. TCEXPRX
  35025. TCEXPRY
  35026. GDIPHANDLE
  35027. GDIPSTATUS
  35028. LCPOINTS
  35029. MAKEGDIPARRAYFFROMCURSOR
  35030. GDIPDRAWCLOSEDCURVE
  35031. GDIPLUS
  35032. GETHANDLE
  35033. GDI+ object not created or associated
  35034. taPoints[1,1]b
  35035. GdipDrawCurve
  35036. gdiplus.dll
  35037. TOPEN
  35038. TAPOINTS
  35039. TNFIRSTCOL
  35040. GDIPHANDLE
  35041. GDIPSTATUS
  35042. LCPOINTS
  35043. MAKEGDIPARRAYF
  35044. GDIPDRAWCURVE
  35045. GDIPLUS
  35046. GETHANDLEE
  35047. GDI+ object not created or associated
  35048. GdipDrawCurve
  35049. gdiplus.dll
  35050. TOPEN
  35051. TCALIAS
  35052. TCEXPRX
  35053. TCEXPRY
  35054. GDIPHANDLE
  35055. GDIPSTATUS
  35056. LCPOINTS
  35057. MAKEGDIPARRAYFFROMCURSOR
  35058. GDIPDRAWCURVE
  35059. GDIPLUS
  35060. GETHANDLE
  35061. GDI+ object not created or associated
  35062. taPoints[1,1]b
  35063. GdipDrawPolygon
  35064. gdiplus.dll
  35065. TOPEN
  35066. TAPOINTS
  35067. TNFIRSTCOL
  35068. GDIPHANDLE
  35069. GDIPSTATUS
  35070. LCPOINTS
  35071. MAKEGDIPARRAYF
  35072. GDIPDRAWPOLYGON
  35073. GDIPLUS
  35074. GETHANDLEG
  35075. GDI+ object not created or associated
  35076. GdipDrawPolygon
  35077. gdiplus.dll
  35078. TOPEN
  35079. TCALIAS
  35080. TCEXPRX
  35081. TCEXPRY
  35082. GDIPHANDLE
  35083. GDIPSTATUS
  35084. LCPOINTS
  35085. MAKEGDIPARRAYFFROMCURSOR
  35086. GDIPDRAWPOLYGON
  35087. GDIPLUS
  35088. GETHANDLE
  35089. GDI+ object not created or associated
  35090. taRects[1,1]b
  35091. GdipDrawRectangles
  35092. gdiplus.dll
  35093. TOPEN
  35094. TARECTS
  35095. TNFIRSTCOL
  35096. GDIPHANDLE
  35097. GDIPSTATUS
  35098. LCRECTS
  35099. MAKEGDIPARRAYF
  35100. GDIPDRAWRECTANGLES
  35101. GDIPLUS
  35102. GETHANDLE^
  35103. GDI+ object not created or associated
  35104. GdipDrawRectangles
  35105. gdiplus.dll
  35106. TOPEN
  35107. TCALIAS
  35108. TCEXPRX
  35109. TCEXPRY
  35110. TCEXPRW
  35111. TCEXPRH
  35112. GDIPHANDLE
  35113. GDIPSTATUS
  35114. LCRECTS
  35115. MAKEGDIPARRAYFFROMCURSOR
  35116. GDIPDRAWRECTANGLES
  35117. GDIPLUS
  35118. GETHANDLE
  35119. GDI+ object not created or associated
  35120. taPoints[1,1]b
  35121. GdipFillClosedCurve
  35122. gdiplus.dll
  35123. TOBRUSH
  35124. TAPOINTS
  35125. TNFIRSTCOL
  35126. TNFILLMODE
  35127. GDIPHANDLE
  35128. GDIPSTATUS
  35129. LCPOINTS
  35130. MAKEGDIPARRAYF
  35131. GDIPFILLCLOSEDCURVE
  35132. GDIPLUS
  35133. GETHANDLEn
  35134. GDI+ object not created or associated
  35135. GdipFillClosedCurve
  35136. gdiplus.dll
  35137. TOBRUSH
  35138. TCALIAS
  35139. TCEXPRX
  35140. TCEXPRY
  35141. TNFILLMODE
  35142. GDIPHANDLE
  35143. GDIPSTATUS
  35144. LCPOINTS
  35145. MAKEGDIPARRAYFFROMCURSOR
  35146. GDIPFILLCLOSEDCURVE
  35147. GDIPLUS
  35148. GETHANDLEj
  35149. GDI+ object not created or associated
  35150. GdipFillPolygon
  35151. gdiplus.dll
  35152. TOBRUSH
  35153. TCALIAS
  35154. TCEXPRX
  35155. TCEXPRY
  35156. TNFILLMODE
  35157. GDIPHANDLE
  35158. GDIPSTATUS
  35159. LCPOINTS
  35160. MAKEGDIPARRAYFFROMCURSOR
  35161. GDIPFILLPOLYGON
  35162. GDIPLUS
  35163. GETHANDLE
  35164. GDI+ object not created or associated
  35165. taPoints[1,1]b
  35166. GdipFillPolygon
  35167. gdiplus.dll
  35168. TOBRUSH
  35169. TAPOINTS
  35170. TNFIRSTCOL
  35171. TNFILLMODE
  35172. GDIPHANDLE
  35173. GDIPSTATUS
  35174. LCPOINTS
  35175. MAKEGDIPARRAYF
  35176. GDIPFILLPOLYGON
  35177. GDIPLUS
  35178. GETHANDLE
  35179. GDI+ object not created or associated
  35180. taRects[1,1]b
  35181. GdipFillRectangles
  35182. gdiplus.dll
  35183. TOBRUSH
  35184. TARECTS
  35185. TNFIRSTCOL
  35186. GDIPHANDLE
  35187. GDIPSTATUS
  35188. LCRECTS
  35189. MAKEGDIPARRAYF
  35190. GDIPFILLRECTANGLES
  35191. GDIPLUS
  35192. GETHANDLE^
  35193. GDI+ object not created or associated
  35194. GdipFillRectangles
  35195. gdiplus.dll
  35196. TOBRUSH
  35197. TCALIAS
  35198. TCEXPRX
  35199. TCEXPRY
  35200. TCEXPRW
  35201. TCEXPRH
  35202. GDIPHANDLE
  35203. GDIPSTATUS
  35204. LCRECTS
  35205. MAKEGDIPARRAYFFROMCURSOR
  35206. GDIPFILLRECTANGLES
  35207. GDIPLUS
  35208. GETHANDLE
  35209. GDI+ object not created or associated
  35210. GdipGraphicsClear
  35211. GDIPlus.Dll
  35212. TVCOLOR
  35213. GDIPHANDLE
  35214. GDIPSTATUS
  35215. GDIPGRAPHICSCLEAR
  35216. GDIPLUS
  35217. GDI+ object not created or associated
  35218. GdipSaveGraphics
  35219. gdiplus.dll
  35220. RNGRAPHICSSTATE
  35221. GDIPHANDLE
  35222. GDIPSTATUS
  35223. LNSTATE
  35224. GDIPSAVEGRAPHICS
  35225. GDIPLUS
  35226. GDI+ object not created or associated
  35227. GdipRestoreGraphics
  35228. gdiplus.dll
  35229. TNGRAPHICSSTATE
  35230. GDIPHANDLE
  35231. GDIPSTATUS
  35232. GDIPRESTOREGRAPHICS
  35233. GDIPLUS
  35234. GDI+ object not created or associated
  35235. GdipTranslateWorldTransform
  35236. gdiplus.dll
  35237. TNOFFSETX    
  35238. TNOFFSETY
  35239. TNMATRIXORDER
  35240. GDIPHANDLE
  35241. GDIPSTATUS
  35242. GDIPTRANSLATEWORLDTRANSFORM
  35243. GDIPLUS
  35244. GDI+ object not created or associated
  35245. GdipRotateWorldTransform
  35246. gdiplus.dll
  35247. TNANGLE
  35248. TNMATRIXORDER
  35249. GDIPHANDLE
  35250. GDIPSTATUS
  35251. GDIPROTATEWORLDTRANSFORM
  35252. GDIPLUS
  35253. GDI+ object not created or associated
  35254. GdipScaleWorldTransform
  35255. gdiplus.dll
  35256. TNSCALEX
  35257. TNSCALEY
  35258. TNMATRIXORDER
  35259. GDIPHANDLE
  35260. GDIPSTATUS
  35261. GDIPSCALEWORLDTRANSFORM
  35262. GDIPLUS
  35263. GDI+ object not created or associated
  35264. GdipResetWorldTransform
  35265. gdiplus.dll
  35266. GDIPHANDLE
  35267. GDIPSTATUS
  35268. GDIPRESETWORLDTRANSFORM
  35269. GDIPLUS
  35270. GdipGetImageGraphicsContext
  35271. gdiplus.dll
  35272. TOIMAGE
  35273. GDIPSTATUS
  35274. DESTROY
  35275. GDIPGETIMAGEGRAPHICSCONTEXT
  35276. GDIPLUS
  35277. NHANDLE    
  35278. GETHANDLE    
  35279. SETHANDLE
  35280. GDI+ object not created or associated
  35281. NUMBER
  35282. GdipDrawImage
  35283. gdiplus.dll
  35284. TOIMAGE    
  35285. DESTPTORX
  35286. DESTY
  35287. GDIPHANDLE
  35288. GDIPSTATUS
  35289. LNDESTX
  35290. LNDESTY
  35291. GDIPDRAWIMAGE
  35292. GDIPLUS
  35293. GETHANDLE
  35294. GPIMAGE
  35295. GDI+ object not created or associated
  35296. NUMBER
  35297. GdipDrawImageRect
  35298. gdiplus.dll
  35299. TOIMAGE
  35300. DESTRECTORX
  35301. DESTY
  35302. DESTW
  35303. DESTH
  35304. GDIPHANDLE
  35305. GDIPSTATUS
  35306. LNDESTX
  35307. LNDESTY
  35308. LNDESTW
  35309. LNDESTH
  35310. GDIPDRAWIMAGERECT
  35311. GDIPLUS
  35312. GETHANDLE
  35313. GDI+ object not created or associated
  35314. GdipDrawImagePointRect
  35315. gdiplus.dll
  35316. TOIMAGE    
  35317. DESTPOINT
  35318. SRCRECT
  35319. SRCUNIT
  35320. GDIPHANDLE
  35321. GDIPSTATUS
  35322. GDIPDRAWIMAGEPOINTRECT
  35323. GDIPLUS
  35324. GETHANDLE
  35325. GDI+ object not created or associated
  35326. GdipDrawImageRectRect
  35327. gdiplus.dll
  35328. TOIMAGE
  35329. DESTRECT
  35330. SRCRECT
  35331. SRCUNIT
  35332. IMAGEATTRIBS
  35333. GDIPHANDLE
  35334. GDIPSTATUS
  35335. GDIPDRAWIMAGERECTRECT
  35336. GDIPLUS
  35337. GETHANDLE
  35338. IMAGEATTRIBUTES
  35339. INTEGER
  35340. GDI+ object not created or associated
  35341. GdipReleaseDC
  35342. gdiplus.dll
  35343. TNHDC
  35344. GDIPHANDLE
  35345. GDIPSTATUS
  35346. GDIPRELEASEDC
  35347. GDIPLUS
  35348. GDI+ object not created or associated
  35349. GdipGetDC
  35350. gdiplus.dll
  35351. GDIPHANDLE
  35352. GDIPSTATUS
  35353. LNHDC    
  35354. GDIPGETDC
  35355. GDIPLUS
  35356. GdipSetTextRenderingHint
  35357. GDIPLUS.DLLQ
  35358. xfcGdipSetTextRenderingHint
  35359. GdipStringFormatGetGenericTypographic
  35360. GDIPLUS.DLLQ
  35361. xfcGdipStringFormatGetGenericTypographic
  35362. GdipCloneStringFormat
  35363. GDIPLUS.DLLQ
  35364. xfcGdipCloneStringFormat
  35365. GdipCreateStringFormat
  35366. GDIPLUS.DLLQ
  35367. xfcGdipCreateStringFormat
  35368. GdipDeleteStringFormat
  35369. GDIPLUS.DLLQ
  35370. xfcGdipDeleteStringFormat
  35371. GdipSetStringFormatFlags
  35372. GDIPLUS.DLLQ
  35373. xfcGdipSetStringFormatFlags
  35374. GdipSetStringFormatAlign
  35375. GDIPLUS.DLLQ
  35376. xfcGdipSetStringFormatAlign
  35377. GdipMeasureString
  35378. GDIPLUS.DLLQ
  35379. xfcGdipMeasureString
  35380. GdipDrawString
  35381. GDIPLUS.DLLQ
  35382. xfcGdipDrawString
  35383. GdipDeleteStringFormat
  35384. GDIPLUS.DLLQ
  35385. xfcGdipDeleteStringFormat
  35386. GdipSetTextRenderingHint
  35387. GDIPLUS.DLLQ
  35388. Foxy_GdipSetTextRenderingHint
  35389. GPFONT
  35390. \ffc\_gdiplus.vcx
  35391. GPSOLIDBRUSH
  35392. GPRECTANGLE
  35393. \ffc\_gdiplus.vcx
  35394. BOOLEAN
  35395. XFCGRAPHICSSTATE
  35396. EXCEPTION
  35397.  <CR> 
  35398.  <CR> 
  35399.  <CR> 
  35400.  <LASTWORD> 
  35401. <LASTWORD>
  35402. <LASTWORD>
  35403. GDIPSETTEXTRENDERINGHINT
  35404. GDIPLUS
  35405. XFCGDIPSETTEXTRENDERINGHINT%
  35406. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC(
  35407. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  35408. GDIPCLONESTRINGFORMAT
  35409. XFCGDIPCLONESTRINGFORMAT
  35410. GDIPCREATESTRINGFORMAT
  35411. XFCGDIPCREATESTRINGFORMAT
  35412. GDIPDELETESTRINGFORMAT
  35413. XFCGDIPDELETESTRINGFORMAT
  35414. GDIPSETSTRINGFORMATFLAGS
  35415. XFCGDIPSETSTRINGFORMATFLAGS
  35416. GDIPSETSTRINGFORMATALIGN
  35417. XFCGDIPSETSTRINGFORMATALIGN
  35418. GDIPMEASURESTRING
  35419. XFCGDIPMEASURESTRING
  35420. GDIPDRAWSTRING
  35421. XFCGDIPDRAWSTRING
  35422. FOXY_GDIPSETTEXTRENDERINGHINT
  35423. TCSTRING
  35424. TOFONT
  35425. TOBRUSH
  35426. TORECTANGLE
  35427. TLJUSTLAST
  35428. LHFONT
  35429. LHGRAPHICS
  35430. LHBRUSH
  35431. LCRECTF
  35432. LNSPACEWIDTH
  35433. LNLINEHEIGHT
  35434. LCTEXT
  35435. LOGFXSTATE
  35436. LHTEMPSTRFORMAT
  35437. LHSTRINGFORMAT
  35438. LHLEFTALIGNHANDLE
  35439. LHRIGHTALIGNHANDLE
  35440. LNWORDS
  35441. LNWORDWIDTH
  35442. LNCHARS
  35443. LCCURRWORD    
  35444. LCCUTWORD
  35445. LNREDUCE
  35446. LLENDOFSENTENCE
  35447. LNWORDSWIDTH
  35448. LNWORDSINLINE
  35449. LNCURRWORD
  35450. LNCURRLINE
  35451. LNWIDTHOFBETWEEN
  35452. LNSTRINGFORMATHANDLE
  35453. LLLAST
  35454. LOEXC
  35455. LHGFXSTATE
  35456. SAVE    
  35457. GETHANDLE    
  35458. GETHEIGHT
  35459. PCBOUNDINGBOX
  35460. LAWORDS
  35461. RESTORE
  35462. LLLASTLINE
  35463. LCCHAR}
  35464. GdipDeleteGraphics
  35465. gdiplus.dll
  35466. GDIPHANDLE
  35467. GDIPOWNSTHISHANDLE
  35468. GDIPDELETEGRAPHICS
  35469. GDIPLUS
  35470. dpix_access,
  35471. dpix_assignZ
  35472. dpiy_access
  35473. dpiy_assign
  35474. drawline
  35475. drawrectangle
  35476. drawstringan
  35477. drawstringwl
  35478. drawpiel
  35479. fillpie
  35480. drawarc
  35481. drawbezier
  35482. drawellipse
  35483. fillrectangle
  35484. fillellipses
  35485. flushJ"
  35486. createfromhdc
  35487. createfromhwnd
  35488. compositingmode_access
  35489. compositingmode_assign
  35490. compositingquality_accessP)
  35491. compositingquality_assign
  35492. interpolationmode_access
  35493. interpolationmode_assign1-
  35494. pagescale_access
  35495. pagescale_assign
  35496. smoothingmode_access
  35497. smoothingmode_assignR2
  35498. pixeloffsetmode_access
  35499. pixeloffsetmode_assign
  35500. clipbounds_access-6
  35501. clipbounds_assign
  35502. pageunit_access
  35503. pageunit_assign'9
  35504. visibleclipbounds_accessj:
  35505. visibleclipbounds_assign
  35506. measurestringaQ<
  35507. measurestringw
  35508. textrenderinghint_access3F
  35509. textrenderinghint_assigntG
  35510. renderingorigin_access
  35511. renderingorigin_assignnJ
  35512. textcontrast_access
  35513. textcontrast_assign
  35514. drawlinesgN
  35515. drawlinesfromcursor
  35516. drawbeziers
  35517. drawclosedcurve
  35518. drawbeziersfromcursor
  35519. drawclosedcurvefromcursor
  35520. drawcurve
  35521. drawcurvefromcursor
  35522. drawpolygonj^
  35523. drawpolygonfromcursor
  35524. drawrectangles\b
  35525. drawrectanglesfromcursorxd
  35526. fillclosedcurve|f
  35527. fillclosedcurvefromcursor
  35528. fillpolygonfromcursor
  35529. fillpolygon
  35530. fillrectangles4o
  35531. fillrectanglesfromcursorRq
  35532. clearXs
  35533. restore
  35534. translatetransformqw
  35535. rotatetransform)y
  35536. scaletransform
  35537. resettransform_|
  35538. createfromimage^}
  35539. drawimageat
  35540. drawimagescaled=
  35541. drawimageportionat
  35542. drawimageportionscaled
  35543. releasehdc
  35544. gethdc
  35545. drawstringjust
  35546. Destroy
  35547. GDI+ object not created or associated
  35548. GdipGetStringFormatAlign
  35549. gdiplus.dll
  35550. GDIPHANDLE
  35551. GDIPSTATUS
  35552. GDIPGETSTRINGFORMATALIGN
  35553. GDIPLUS
  35554. NALIGNMENT[
  35555. GDI+ object not created or associated
  35556. GDI+ object not owned by VFP object
  35557. GdipSetStringFormatAlign
  35558. gdiplus.dll
  35559. TNALIGNMENT
  35560. GDIPSTATUS
  35561. GDIPHANDLE
  35562. GDIPOWNSTHISHANDLE
  35563. GDIPSETSTRINGFORMATALIGN
  35564. GDIPLUS
  35565. GDI+ object not created or associated
  35566. GdipGetStringFormatFlags
  35567. gdiplus.dll
  35568. GDIPHANDLE
  35569. GDIPSTATUS
  35570. GDIPGETSTRINGFORMATFLAGS
  35571. GDIPLUS
  35572. NFLAGS[
  35573. GDI+ object not created or associated
  35574. GDI+ object not owned by VFP object
  35575. GdipSetStringFormatFlags
  35576. gdiplus.dll
  35577. TNFLAGS
  35578. GDIPSTATUS
  35579. GDIPHANDLE
  35580. GDIPOWNSTHISHANDLE
  35581. GDIPSETSTRINGFORMATFLAGS
  35582. GDIPLUS
  35583. GDI+ object not created or associated
  35584. GdipGetStringFormatHotkeyPrefix
  35585. gdiplus.dll
  35586. GDIPHANDLE
  35587. GDIPSTATUS
  35588. GDIPGETSTRINGFORMATHOTKEYPREFIX
  35589. GDIPLUS
  35590. NPREFIXb
  35591. GDI+ object not created or associated
  35592. GDI+ object not owned by VFP object
  35593. GdipSetStringFormatHotkeyPrefix
  35594. gdiplus.dll
  35595. TNPREFIX
  35596. GDIPSTATUS
  35597. GDIPHANDLE
  35598. GDIPOWNSTHISHANDLE
  35599. GDIPSETSTRINGFORMATHOTKEYPREFIX
  35600. GDIPLUS
  35601. GDI+ object not created or associated
  35602. GdipGetStringFormatLineAlign
  35603. gdiplus.dll
  35604. GDIPHANDLE
  35605. GDIPSTATUS
  35606. GDIPGETSTRINGFORMATLINEALIGN
  35607. GDIPLUS
  35608. NALIGNMENT_
  35609. GDI+ object not created or associated
  35610. GDI+ object not owned by VFP object
  35611. GdipSetStringFormatLineAlign
  35612. gdiplus.dll
  35613. TNALIGNMENT
  35614. GDIPSTATUS
  35615. GDIPHANDLE
  35616. GDIPOWNSTHISHANDLE
  35617. GDIPSETSTRINGFORMATLINEALIGN
  35618. GDIPLUS
  35619. GDI+ object not created or associated
  35620. GdipGetStringFormatTrimming
  35621. gdiplus.dll
  35622. GDIPHANDLE
  35623. GDIPSTATUS
  35624. GDIPGETSTRINGFORMATTRIMMING
  35625. GDIPLUS
  35626. NMODE^
  35627. GDI+ object not created or associated
  35628. GDI+ object not owned by VFP object
  35629. GdipSetStringFormatTrimming
  35630. gdiplus.dll
  35631. TNMODE
  35632. GDIPSTATUS
  35633. GDIPHANDLE
  35634. GDIPOWNSTHISHANDLE
  35635. GDIPSETSTRINGFORMATTRIMMING
  35636. GDIPLUS
  35637. GdipStringFormatGetGenericDefault
  35638. GDIPlus.Dll
  35639. GdipCloneStringFormat
  35640. GDIPlus.Dll
  35641. TLMAKECLONE
  35642. DESTROY
  35643. NHANDLE!
  35644. GDIPSTRINGFORMATGETGENERICDEFAULT
  35645. GDIPLUS
  35646. GDIPSTATUS
  35647. GDIPCLONESTRINGFORMAT    
  35648. SETHANDLES
  35649. GdipStringFormatGetGenericTypographic
  35650. GDIPlus.Dll
  35651. GdipCloneStringFormat
  35652. GDIPlus.Dll
  35653. TLMAKECLONE
  35654. DESTROY
  35655. NHANDLE%
  35656. GDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  35657. GDIPLUS
  35658. GDIPSTATUS
  35659. GDIPCLONESTRINGFORMAT    
  35660. SETHANDLE
  35661. GdipCreateStringFormat
  35662. GDIPlus.Dll
  35663. TNFLAGS
  35664. TNLANGID
  35665. DESTROY
  35666. NHANDLE
  35667. GDIPCREATESTRINGFORMAT
  35668. GDIPLUS
  35669. GDIPSTATUS    
  35670. SETHANDLE
  35671. GPSTRINGFORMAT
  35672. GdipCloneStringFormat
  35673. GDIPlus.Dll
  35674. TOSTRINGFORMAT
  35675. DESTROY
  35676. NHANDLE
  35677. GDIPHANDLE
  35678. GDIPSTATUS
  35679. GDIPCLONESTRINGFORMAT
  35680. GDIPLUS
  35681. GDIPOWNSTHISHANDLE
  35682. GdipDeleteStringFormat
  35683. GDIPlus.Dll
  35684. GDIPHANDLE
  35685. GDIPOWNSTHISHANDLE
  35686. GDIPDELETESTRINGFORMAT
  35687. GDIPLUS
  35688. TNFLAGS
  35689. TNLANGID
  35690. CREATE
  35691. alignment_access,
  35692. alignment_assign]
  35693. formatflags_access#
  35694. formatflags_assigne
  35695. hotkeyprefix_access'
  35696. hotkeyprefix_assignx
  35697. linealignment_accessI    
  35698. linealignment_assign
  35699. trimming_accesse
  35700. trimming_assign
  35701. getgenericdefaults
  35702. getgenerictypographicJ
  35703. create)
  35704. cloneD
  35705. Destroy
  35706. STRING
  35707. GdipCreateFontFamilyFromName
  35708. GDIPlus.Dll
  35709. TCNAME
  35710. DESTROY
  35711. NHANDLE
  35712. GDIPCREATEFONTFAMILYFROMNAME
  35713. GDIPLUS
  35714. GDIPSTATUS
  35715. GDIPFONTCOLLECTIONHANDLE    
  35716. SETHANDLE
  35717. GdipGetGenericFontFamilyMonospace
  35718. GDIPlus.Dll
  35719. DESTROY
  35720. NHANDLE!
  35721. GDIPGETGENERICFONTFAMILYMONOSPACE
  35722. GDIPLUS
  35723. GDIPSTATUS    
  35724. SETHANDLE
  35725. GdipGetGenericFontFamilySerif
  35726. GDIPlus.Dll
  35727. DESTROY
  35728. NHANDLE
  35729. GDIPGETGENERICFONTFAMILYSERIF
  35730. GDIPLUS
  35731. GDIPSTATUS    
  35732. SETHANDLE
  35733. GdipGetGenericFontFamilySansSerif
  35734. GDIPlus.Dll
  35735. DESTROY
  35736. NHANDLE!
  35737. GDIPGETGENERICFONTFAMILYSANSSERIF
  35738. GDIPLUS
  35739. GDIPSTATUS    
  35740. SETHANDLE%
  35741. INTEGER
  35742. GDI+ object not created or associated
  35743. GdipIsStyleAvailable
  35744. gdiplus.dll
  35745. TNFONTSTYLE
  35746. GDIPHANDLE
  35747. GDIPSTATUS
  35748. GDIPISSTYLEAVAILABLE
  35749. GDIPLUS
  35750. NAVAILABLEJ
  35751. GDI+ object not created or associated
  35752. GdipGetFamilyName
  35753. gdiplus.dll
  35754. lstrlenW
  35755. kernel32.dllQ
  35756. __win32_lstrlenW
  35757. STRING
  35758. GDIPHANDLE
  35759. GDIPSTATUS
  35760. GDIPGETFAMILYNAME
  35761. GDIPLUS
  35762. LSTRLENW
  35763. KERNEL32
  35764. __WIN32_LSTRLENW
  35765. CUNICODENAME"
  35766. FontName
  35767. VNEWVALX
  35768. INTEGER
  35769. GDI+ object not created or associated
  35770. GdipGetCellAscent
  35771. gdiplus.dll
  35772. NUMBER
  35773. TNSTYLE
  35774. GDIPSTATUS
  35775. GDIPHANDLE
  35776. GDIPGETCELLASCENT
  35777. GDIPLUS
  35778. NVALUEV
  35779. INTEGER
  35780. GDI+ object not created or associated
  35781. GdipGetEmHeight
  35782. gdiplus.dll
  35783. NUMBER
  35784. TNSTYLE
  35785. GDIPSTATUS
  35786. GDIPHANDLE
  35787. GDIPGETEMHEIGHT
  35788. GDIPLUS
  35789. NVALUEY
  35790. INTEGER
  35791. GDI+ object not created or associated
  35792. GdipGetCellDescent
  35793. gdiplus.dll
  35794. NUMBER
  35795. TNSTYLE
  35796. GDIPSTATUS
  35797. GDIPHANDLE
  35798. GDIPGETCELLDESCENT
  35799. GDIPLUS
  35800. NVALUEY
  35801. INTEGER
  35802. GDI+ object not created or associated
  35803. GdipGetLineSpacing
  35804. gdiplus.dll
  35805. NUMBER
  35806. TNSTYLE
  35807. GDIPSTATUS
  35808. GDIPHANDLE
  35809. GDIPGETLINESPACING
  35810. GDIPLUS
  35811. NVALUE
  35812. GDI+ object not created or associated
  35813. GdipGetFamilyName
  35814. gdiplus.dll
  35815. lstrlenW
  35816. kernel32.dllQ
  35817. __win32_lstrlenW
  35818. STRING
  35819. TNLANGID
  35820. GDIPSTATUS
  35821. GDIPHANDLE
  35822. GDIPGETFAMILYNAME
  35823. GDIPLUS
  35824. LSTRLENW
  35825. KERNEL32
  35826. __WIN32_LSTRLENW
  35827. CUNICODENAMEb
  35828. TCNAME
  35829. GDIPFONTCOLLECTIONHANDLE
  35830. CREATE
  35831. GdipDeleteFontFamily
  35832. GDIPlus.Dll
  35833. GDIPHANDLE
  35834. GDIPOWNSTHISHANDLE
  35835. GDIPDELETEFONTFAMILY
  35836. GDIPLUS
  35837. GPFONTFAMILY
  35838. GdipCloneFontFamily
  35839. GDIPlus.Dll
  35840. TOFONTFAMILY
  35841. DESTROY
  35842. NHANDLE
  35843. GDIPHANDLE
  35844. GDIPSTATUS
  35845. GDIPCLONEFONTFAMILY
  35846. GDIPLUS
  35847. GDIPOWNSTHISHANDLE
  35848. create,
  35849. getgenericmonospacek
  35850. getgenericseriff
  35851. getgenericsansserifY
  35852. isstyleavailableT
  35853. fontname_access
  35854. fontname_assign
  35855. getcellascent
  35856. getemheightt    
  35857. getcelldescent
  35858. getlinespacing
  35859. getnamex
  35860. Destroy.
  35861. clone
  35862. GdipCreateHatchBrush
  35863. GDIPlus.Dll
  35864. A66CC
  35865. TNSTYLE
  35866. TVFORECOLOR
  35867. TVBACKCOLOR
  35868. GDIPSTATUS
  35869. DESTROY
  35870. NHANDLE
  35871. GDIPCREATEHATCHBRUSH
  35872. GDIPLUS
  35873. ARGB    
  35874. SETHANDLE
  35875. GDI+ object not created or associated
  35876. GdipGetHatchForegroundColor
  35877. gdiplus.dll
  35878. GDIPHANDLE
  35879. GDIPSTATUS
  35880. GDIPGETHATCHFOREGROUNDCOLOR
  35881. GDIPLUS
  35882. NARGB)
  35883. ForegroundColor
  35884. TVCOLOR
  35885. GDI+ object not created or associated
  35886. GdipGetHatchBackgroundColor
  35887. gdiplus.dll
  35888. GDIPHANDLE
  35889. GDIPSTATUS
  35890. GDIPGETHATCHBACKGROUNDCOLOR
  35891. GDIPLUS
  35892. NARGB)
  35893. BackgroundColor
  35894. TVCOLOR
  35895. GDI+ object not created or associated
  35896. GdipGetHatchStyle
  35897. gdiplus.dll
  35898. GDIPHANDLE
  35899. GDIPSTATUS
  35900. GDIPGETHATCHSTYLE
  35901. GDIPLUS
  35902. NHATCHSTYLE$
  35903. HatchStyle
  35904. VNEWVAL_
  35905. TNSTYLE
  35906. TVFORECOLOR
  35907. TVBACKCOLOR
  35908. CREATE
  35909. create,
  35910. foregroundcolor_access
  35911. foregroundcolor_assignY
  35912. backgroundcolor_access
  35913. backgroundcolor_assign
  35914. hatchstyle_access
  35915. hatchstyle_assignE
  35916. Initv
  35917. ]dpix Horizontal resolution of drawing surface
  35918. dpiy Vertical resolution of drawing surface
  35919. compositingmode how composited images are drawn to this Graphics object
  35920. compositingquality rendering quality of composited images drawn to this Graphics object
  35921. interpolationmode interpolation mode associated with this Graphics object.
  35922. pagescale The scaling between world units and page units 
  35923. smoothingmode Rendering quality 
  35924. pixeloffsetmode Value specifying how pixels are offset during rendering of this Graphics object
  35925. 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
  35926. pageunit The unit of measure used for page coordinates
  35927. visibleclipbounds Returns a GpRectange Object of the visible clipping region
  35928. renderingorigin The rendering origin for dithering and for hatch brushes
  35929. textcontrast Gamma corrrection value for rendering text
  35930. textrenderinghint Rendering mode for text associated with this Graphics object
  35931. *dpix_access 
  35932. *dpix_assign 
  35933. *dpiy_access 
  35934. *dpiy_assign 
  35935. *drawline Draw a line that connects two points, in the specified pen.
  35936. *drawrectangle Draw a rectangle
  35937. *drawstringa Draw a string in specified font and position (ANSI Version)
  35938. *drawstringw Draw a string in specified font and position (Unicode Version)
  35939. *drawpie Draw outlined pie slice in specified pen and start/stop anagles
  35940. *fillpie Draw filled pie slice in specified pen and start/stop angles
  35941. *drawarc Draws an arc representing a portion of an ellipse, given bounding rectangle of elllipse, start and sweep angles.
  35942. *drawbezier Draw a B
  35943. zier spline from 4 control points
  35944. *drawellipse Draw outlined ellipse specified by its bounding rectangle
  35945. *fillrectangle Fill a rectangle
  35946. *fillellipse Draw filled ellipse specified by its bounding rectangle
  35947. *flush Force execution of all pending graphics operations 
  35948. *createfromhdc Create Graphics object for a given device context (HDC)
  35949. *createfromhwnd Create GDI+ Graphics object for a given window (HWND)
  35950. *compositingmode_access 
  35951. *compositingmode_assign 
  35952. *compositingquality_access 
  35953. *compositingquality_assign 
  35954. *interpolationmode_access 
  35955. *interpolationmode_assign 
  35956. *pagescale_access 
  35957. *pagescale_assign 
  35958. *smoothingmode_access 
  35959. *smoothingmode_assign 
  35960. *pixeloffsetmode_access 
  35961. *pixeloffsetmode_assign 
  35962. *clipbounds_access 
  35963. *clipbounds_assign 
  35964. *pageunit_access 
  35965. *pageunit_assign 
  35966. *visibleclipbounds_access 
  35967. *visibleclipbounds_assign 
  35968. *measurestringa Measures ANSI text string when drawn with the specified Font and formatting
  35969. *measurestringw Measures Unicode text string when drawn with the specified Font and formatting
  35970. *textrenderinghint_access 
  35971. *textrenderinghint_assign 
  35972. *renderingorigin_access 
  35973. *renderingorigin_assign 
  35974. *textcontrast_access 
  35975. *textcontrast_assign 
  35976. *drawlines Draw sequence of connected lines, given array of coordinates
  35977. *drawlinesfromcursor Draw sequence of connected lines, given cursor containing coordinates
  35978. *drawbeziers Draw a B
  35979. zier spline given a 2-column array of coordinates
  35980. *drawclosedcurve Draw a closed curve given a 2-column array of coordinates
  35981. *drawbeziersfromcursor Draw a B
  35982. zier spline given a cursor containing coordinates
  35983. *drawclosedcurvefromcursor Draw a closed curve given a cursor containing coordinates
  35984. *drawcurve Draw a smooth curve given a 2-column array of coordinates
  35985. *drawcurvefromcursor Draw a smooth curve given a cursor containing coordinates
  35986. *drawpolygon Draw a polygon given a 2-column array of coordinates
  35987. *drawpolygonfromcursor Draw a polygon given a cursor containing coordinates
  35988. *drawrectangles Draw a series of rectangles given a 4-column array (each row x,y,w,h)
  35989. *drawrectanglesfromcursor Draw a series of rectangles given a cursor containing x,y,w,h values
  35990. *fillclosedcurve Fill a closed curve defined by a 2-column array of coordinates
  35991. *fillclosedcurvefromcursor Fill a closed curve from a cursor defining coordinates
  35992. *fillpolygonfromcursor Fill a polygon from a cursor defining coordinates
  35993. *fillpolygon Filll a polygon defined by a 2-column array of coordinates
  35994. *fillrectangles Fill a series of rectangles defined by a 4-column array of coordinates
  35995. *fillrectanglesfromcursor Fill a series of rectangles defined by a cursor containing x,y,w,h values
  35996. *clear Clear entire drawing surface and fill with specified background color
  35997. *save Save current state and return token (for later restore)
  35998. *restore Restore previously saved state
  35999. *translatetransform Add translate by (x,y) to this graphics object's transformation matrix
  36000. *rotatetransform Prepend rotation by specified angle to this object's transformation matrix
  36001. *scaletransform Apply scaling to transformation matrix for this graphics object
  36002. *resettransform Reset the world transform matrix (to no transformation)
  36003. *createfromimage Create graphics object from the specified GpImage object (to draw on that image's surface)
  36004. *drawimageat Draw image at the specified location, using its original physical size
  36005. *drawimagescaled Draw image at the specified location with the specified size.
  36006. *drawimageportionat Draw portion of an image at the specified location, using its original size
  36007. *drawimageportionscaled Draw portion of an image at the specified location and with the specified size
  36008. *releasehdc Release device context previously obtained with GetHdc()
  36009. *gethdc Get handle to device context associated with this Graphics object.
  36010. *drawstringjust 
  36011. !pPROCEDURE dpix_access
  36012. #if GDIPLUS_CHECK_OBJECT
  36013. if This.gdipHandle==0
  36014.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36015.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36016.     return cast(null as B)
  36017. endif
  36018. #endif
  36019. declare integer GdipGetDpiX in gdiplus.dll ;
  36020.     integer nGraphics, single @ fDPI
  36021. local nDPI
  36022. nDPI = 0.0
  36023. This.gdipStatus = GdipGetDpiX( This.gdipHandle, @nDPI)
  36024. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nDPI,cast(null as B))
  36025. ENDPROC
  36026. PROCEDURE dpix_assign
  36027. LPARAMETERS vNewVal
  36028. error 1743, 'DpiX'
  36029. ENDPROC
  36030. PROCEDURE dpiy_access
  36031. #if GDIPLUS_CHECK_OBJECT
  36032. if This.gdipHandle==0
  36033.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36034.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36035.     return cast(null as B)
  36036. endif
  36037. #endif
  36038. declare integer GdipGetDpiY in gdiplus.dll ;
  36039.     integer nGraphics, single @ fDPI
  36040. local nDPI
  36041. nDPI = 0.0
  36042. This.gdipStatus = GdipGetDpiY( This.gdipHandle, @nDPI)
  36043. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nDPI,cast(null as B))
  36044. ENDPROC
  36045. PROCEDURE dpiy_assign
  36046. LPARAMETERS vNewVal
  36047. error 1743, 'DpiY'
  36048. ENDPROC
  36049. PROCEDURE drawline
  36050. lparameters toPen as GpPen, x1,y1,x2,y2
  36051. #if GDIPLUS_CHECK_OBJECT
  36052. if This.gdipHandle==0
  36053.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36054.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36055.     return .F.
  36056. endif
  36057. #endif
  36058. #if GDIPLUS_CHECK_PARAMS
  36059. if !(vartype(toPen)+vartype(m.x1)+vartype(m.y1)+vartype(m.x2)+vartype(m.y2)=='ONNNN')
  36060.     error 11 && function argument
  36061.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36062.     return .F.
  36063. endif
  36064. #endif
  36065. declare Integer GdipDrawLine in gdiplus.dll ;
  36066.     integer nGraphics, integer nPen, single,single,single,single
  36067. This.gdipStatus = GdipDrawLine( This.gdipHandle, toPen.GetHandle(), m.x1,m.y1, m.x2,m.y2 )
  36068. return This.gdipStatus = GDIPLUS_STATUS_OK
  36069. ENDPROC
  36070. PROCEDURE drawrectangle
  36071. lparameters toPen, tXOrRect,tnY,tnW,tnH
  36072. * Parameters either ( pen, x,y,w,h )
  36073. * or ( pen, rect )
  36074. #if GDIPLUS_CHECK_OBJECT
  36075. if This.gdipHandle==0
  36076.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36077.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36078.     return .F.
  36079. endif
  36080. #endif
  36081. #if GDIPLUS_CHECK_PARAMS
  36082. do case
  36083. case vartype(m.toPen)!='O'
  36084.     * Pen must be given (assume object is of correct type!)
  36085.     error 11 && function argument
  36086.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36087.     return .F.
  36088. case vartype(m.tXOrRect)='N' ;
  36089.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  36090.     * OK
  36091. case vartype(m.tXOrRect)='O' ;
  36092.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  36093.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  36094.     * OK
  36095. otherwise    
  36096.     * Parameters do not pass the test
  36097.     error 11 && function argument
  36098.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36099.     return .F.
  36100. endcase
  36101. #endif
  36102. declare Integer GdipDrawRectangle in gdiplus.dll ;
  36103.     integer nGraphics, integer nPen, single,single,single,single
  36104. if vartype(m.tXOrRect)='O'
  36105.     This.gdipStatus = GdipDrawRectangle( This.gdipHandle, toPen.GetHandle() ;
  36106.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  36107.     This.gdipStatus = GdipDrawRectangle( This.gdipHandle, toPen.GetHandle() ;
  36108.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  36109. endif
  36110. return GDIPLUS_STATUS_OK == This.gdipStatus
  36111. ENDPROC
  36112. PROCEDURE drawstringa
  36113. lparameters tcAnsiString, toFont, tvRectPoint, toStringFormat, toBrush
  36114. #if GDIPLUS_CHECK_OBJECT
  36115. if This.gdipHandle==0
  36116.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36117.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36118.     return .F.
  36119. endif
  36120. #endif
  36121. #if GDIPLUS_CHECK_PARAMS
  36122. if !(vartype(m.tcAnsiString)='C' and vartype(m.toFont)$'OL' ;
  36123.     and vartype(m.toStringFormat)$'OL' and vartype(m.toBrush)$'OL')
  36124.     error 11 && function argument
  36125.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36126.     return .F.
  36127. endif
  36128. #endif
  36129. local lcRect
  36130. do case
  36131. case vartype(tvRectPoint)$'CQ' && String or varbinary
  36132.     do case
  36133.     case len(m.tvRectPoint)==8 && point
  36134.         lcRect = m.tvRectPoint + replicate(chr(0),8)
  36135.     case len(m.tvRectPoint)==16 && rect
  36136.         lcRect = m.tvRectPoint
  36137.     otherwise
  36138.         error 11 && function argument
  36139.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36140.         return .F.
  36141.     endcase
  36142. case vartype(m.tvRectPoint) == 'O'
  36143.     do case
  36144.     case pemstatus(m.tvRectPoint,'gdipRectF',5)    && Rect
  36145.         lcRect = tvRectPoint.GdipRectF
  36146.     case pemstatus(m.tvRectPoint,'gdipPointF',5)    && Point
  36147.         lcRect = tvRectPoint.GdipPointF + replicate(chr(0),8)
  36148.     otherwise
  36149.         error 11 && function argument
  36150.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36151.         return .F.
  36152.     endcase
  36153. otherwise
  36154.     error 11 && function argument
  36155.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36156.     return .F.
  36157. endcase
  36158. declare integer GdipDrawString in gdiplus.dll ;
  36159.     integer,string,integer,integer,string,integer,integer
  36160. This.gdipStatus = GdipDrawString( ;
  36161.     This.gdipHandle ;
  36162.     , strconv(m.tcAnsiString,5)    ;
  36163.     , len(m.tcAnsiString) ;
  36164.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  36165.     , m.lcRect ;
  36166.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  36167.     , iif(vartype(m.toBrush)='O',toBrush.GetHandle(),0) ;
  36168. return GDIPLUS_STATUS_OK == This.gdipStatus
  36169. ENDPROC
  36170. PROCEDURE drawstringw
  36171. lparameters tcUnicodeString, toFont, tvRectPoint, toStringFormat, toBrush
  36172. #if GDIPLUS_CHECK_OBJECT
  36173. if This.gdipHandle==0
  36174.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36175.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36176.     return .F.
  36177. endif
  36178. #endif
  36179. #if GDIPLUS_CHECK_PARAMS
  36180. if !(vartype(m.tcUnicodeString)='C' and vartype(m.toFont)$'OL' ;
  36181.     and vartype(m.toStringFormat)$'OL' and vartype(m.toBrush)$'OL')
  36182.     error 11 && function argument
  36183.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36184.     return .F.
  36185. endif
  36186. #endif
  36187. local lcRect
  36188. do case
  36189. case vartype(tvRectPoint)$'CQ' && String or varbinary
  36190.     do case
  36191.     case len(m.tvRectPoint)==8 && point
  36192.         lcRect = m.tvRectPoint + replicate(chr(0),8)
  36193.     case len(m.tvRectPoint)==16 && rect
  36194.         lcRect = m.tvRectPoint
  36195.     otherwise
  36196.         error 11 && function argument
  36197.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36198.     return .F.
  36199.     endcase
  36200. case vartype(m.tvRectPoint) == 'O'
  36201.     do case
  36202.     case pemstatus(m.tvRectPoint,'gdipRectF',5)    && Rect
  36203.         lcRect = tvRectPoint.GdipRectF
  36204.     case pemstatus(m.tvRectPoint,'gdipPointF',5)    && Point
  36205.         lcRect = tvRectPoint.GdipPointF + replicate(chr(0),8)
  36206.     otherwise
  36207.         error 11 && function argument
  36208.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36209.     return .F.
  36210.     endcase
  36211. otherwise
  36212.     error 11 && function argument
  36213.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36214.     return .F.
  36215. endcase
  36216. declare integer GdipDrawString in gdiplus.dll ;
  36217.     integer,string,integer,integer,string,integer,integer
  36218. This.gdipStatus = GdipDrawString( ;
  36219.     This.gdipHandle ;
  36220.     , m.tcUnicodeString ;
  36221.     , len(m.tcUnicodeString)/2 ;
  36222.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  36223.     , m.lcRect ;
  36224.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  36225.     , iif(vartype(m.toBrush)='O',toBrush.GetHandle(),0) ;
  36226. return GDIPLUS_STATUS_OK == This.gdipStatus
  36227. ENDPROC
  36228. PROCEDURE drawpie
  36229. lparameters toPen, tXOrRect,tnYOrStart,tnWOrSweep,tnH, nStart, nSweep
  36230. * Parameters either ( pen, x,y,w,h, start, sweep )
  36231. * or ( pen, rect, start, sweep )
  36232. #if GDIPLUS_CHECK_OBJECT
  36233. if This.gdipHandle==0
  36234.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36235.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36236.     return .F.
  36237. endif
  36238. #endif
  36239. #if GDIPLUS_CHECK_PARAMS
  36240. do case
  36241. case vartype(m.toPen)!='O'
  36242.     * Pen must be given (assume object is of correct type!)
  36243.     * Start and sweep angles are required
  36244.     error 11 && function argument
  36245.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36246.     return .F.
  36247. case vartype(m.tXOrRect)='N' ;
  36248.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNNNN'
  36249.     * OK
  36250. case vartype(m.tXOrRect)='O' ;
  36251.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNLLL' ;
  36252.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  36253.     * OK
  36254. otherwise    
  36255.     * Parameters do not pass the test
  36256.     error 11 && function argument
  36257.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36258.     return .F.
  36259. endcase
  36260. #endif
  36261. declare integer GdipDrawPie in gdiplus.dll ;
  36262.     integer nGraphics, integer nPen ;
  36263.     , single x, single y, single w,single h ;
  36264.     ,single fStart, single fSweep
  36265. if vartype(m.tXOrRect)='O'
  36266.     This.gdipStatus = GdipDrawPie( This.gdipHandle, toPen.GetHandle() ;
  36267.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H ;
  36268.     , m.tnYOrStart,m.tnWOrSweep )
  36269.     This.gdipStatus = GdipDrawPie( This.gdipHandle, toPen.GetHandle() ;
  36270.     , m.tXOrRect,m.tnYOrStart, m.tnWOrSweep,m.tnH ;
  36271.     , m.nStart,m.nSweep )
  36272. endif
  36273. return GDIPLUS_STATUS_OK == This.gdipStatus
  36274. ENDPROC
  36275. PROCEDURE fillpie
  36276. lparameters toBrush, tXOrRect,tnYOrStart,tnWOrSweep,tnH, nStart, nSweep
  36277. * Parameters either ( brush, x,y,w,h, start, sweep )
  36278. * or ( brush, rect, start, sweep )
  36279. #if GDIPLUS_CHECK_OBJECT
  36280. if This.gdipHandle==0
  36281.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36282.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36283.     return .F.
  36284. endif
  36285. #endif
  36286. #if GDIPLUS_CHECK_PARAMS
  36287. do case
  36288. case vartype(m.toBrush)!='O'
  36289.     * Brush must be given (assume object is of correct type!)
  36290.     * Start and sweep angles are required
  36291.     error 11 && function argument
  36292.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36293.     return .F.
  36294. case vartype(m.tXOrRect)='N' ;
  36295.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNNNN'
  36296.     * OK
  36297. case vartype(m.tXOrRect)='O' ;
  36298.     and vartype(m.tnYOrStart)+vartype(m.tnWOrSweep)+vartype(m.tnH)+vartype(nStart)+vartype(nSweep)=='NNLLL' ;
  36299.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  36300.     * OK
  36301. otherwise    
  36302.     * Parameters do not pass the test
  36303.     error 11 && function argument
  36304.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36305.     return .F.
  36306. endcase
  36307. #endif
  36308. declare integer GdipFillPie in gdiplus.dll ;
  36309.     integer nGraphics, integer nBrush ;
  36310.     , single x, single y, single w,single h ;
  36311.     ,single fStart, single fSweep
  36312. if vartype(m.tXOrRect)='O'
  36313.     This.gdipStatus = GdipFillPie( This.gdipHandle, toBrush.GetHandle() ;
  36314.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H ;
  36315.     , m.tnYOrStart,m.tnWOrSweep )
  36316.     This.gdipStatus = GdipFillPie( This.gdipHandle, toBrush.GetHandle() ;
  36317.     , m.tXOrRect,m.tnYOrStart, m.tnWOrSweep,m.tnH ;
  36318.     , m.nStart,m.nSweep )
  36319. endif
  36320. return GDIPLUS_STATUS_OK == This.gdipStatus
  36321. ENDPROC
  36322. PROCEDURE drawarc
  36323. lparameters toPen, x,y,nWidth,nHeight, nStartAngle, nSweepAngle
  36324. #if GDIPLUS_CHECK_OBJECT
  36325. if This.gdipHandle==0
  36326.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36327.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36328.     return .F.
  36329. endif
  36330. #endif
  36331. #if GDIPLUS_CHECK_PARAMS
  36332. if !(vartype(toPen)+vartype(x)+vartype(y)+vartype(nWidth)+vartype(nHeight)+vartype(nStartAngle)+vartype(nSweepAngle)=='ONNNNNN')
  36333.     error 11 && function argument
  36334.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36335.     return .F.
  36336. endif
  36337. #endif
  36338. declare integer GdipDrawArc in gdiplus.dll ;
  36339.     integer nGraphics, integer nPen, single x, single y, single w,single h,single fStart, single fSweep
  36340. This.gdipStatus = GdipDrawArc( THis.gdipHandle, toPen.GetHandle(), m.x,m.y,m.nWidth,m.nHeight,m.nStartAngle,m.nSweepAngle)
  36341. return GDIPLUS_STATUS_OK == This.gdipStatus
  36342. ENDPROC
  36343. PROCEDURE drawbezier
  36344. lparameters toPen, x1,y1, x2,y2, x3,y3, x4,y4
  36345. #if GDIPLUS_CHECK_OBJECT
  36346. if This.gdipHandle==0
  36347.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36348.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36349.     return .F.
  36350. endif
  36351. #endif
  36352. #if GDIPLUS_CHECK_PARAMS
  36353. if !(vartype(toPen)+vartype(x1)+vartype(y1)+vartype(x2)+vartype(y2)+vartype(x3)+vartype(y3)+vartype(x4)+vartype(y4)=='ONNNNNNNN')
  36354.     error 11 && function argument
  36355.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36356.     return .F.
  36357. endif
  36358. #endif
  36359. declare integer GdipDrawBezier in gdiplus.dll ;
  36360.     integer nGraphics, integer nPen, single,single,single,single,single,single,single,single
  36361. This.gdipStatus = GdipDrawBezier( This.gdipHandle, toPen.GetHandle() ;
  36362.     , m.x1,m.y1, m.x2,m.y2, m.x3,m.y3, m.x4,m.y4 )
  36363. return GDIPLUS_STATUS_OK == This.gdipStatus
  36364. ENDPROC
  36365. PROCEDURE drawellipse
  36366. lparameters toPen, tXOrRect,tnY,tnW,tnH
  36367. * Parameters either ( pen, x,y,w,h )
  36368. * or ( pen, rect )
  36369. #if GDIPLUS_CHECK_OBJECT
  36370. if This.gdipHandle==0
  36371.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36372.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36373.     return .F.
  36374. endif
  36375. #endif
  36376. #if GDIPLUS_CHECK_PARAMS
  36377. do case
  36378. case vartype(m.toPen)!='O'
  36379.     * Pen must be given (assume object is of correct type!)
  36380.     error 11 && function argument
  36381.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36382.     return .F.
  36383. case vartype(m.tXOrRect)='N' ;
  36384.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  36385.     * OK
  36386. case vartype(m.tXOrRect)='O' ;
  36387.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  36388.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  36389.     * OK
  36390. otherwise    
  36391.     * Parameters do not pass the test
  36392.     error 11 && function argument
  36393.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36394.     return .F.
  36395. endcase
  36396. #endif
  36397. declare Integer GdipDrawEllipse in gdiplus.dll ;
  36398.     integer nGraphics, integer nPen, single,single,single,single
  36399. if vartype(m.tXOrRect)='O'
  36400.     This.gdipStatus = GdipDrawEllipse( This.gdipHandle, toPen.GetHandle() ;
  36401.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  36402.     This.gdipStatus = GdipDrawEllipse( This.gdipHandle, toPen.GetHandle() ;
  36403.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  36404. endif
  36405. return GDIPLUS_STATUS_OK == This.gdipStatus
  36406. ENDPROC
  36407. PROCEDURE fillrectangle
  36408. lparameters toBrush, tXOrRect,tnY,tnW,tnH
  36409. * Parameters either ( brush, x,y,w,h )
  36410. * or ( brush, rect )
  36411. #if GDIPLUS_CHECK_OBJECT
  36412. if This.gdipHandle==0
  36413.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36414.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36415.     return .F.
  36416. endif
  36417. #endif
  36418. #if GDIPLUS_CHECK_PARAMS
  36419. do case
  36420. case vartype(m.toBrush)!='O'
  36421.     * Brush must be given (assume object is of correct type!)
  36422.     error 11 && function argument
  36423.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36424.     return .F.
  36425. case vartype(m.tXOrRect)='N' ;
  36426.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  36427.     * OK
  36428. case vartype(m.tXOrRect)='O' ;
  36429.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  36430.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  36431.     * OK
  36432. otherwise    
  36433.     * Parameters do not pass the test
  36434.     error 11 && function argument
  36435.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36436.     return .F.
  36437. endcase
  36438. #endif
  36439. declare Integer GdipFillRectangle in gdiplus.dll ;
  36440.     integer nGraphics, integer nBrush, single,single,single,single
  36441. if vartype(m.tXOrRect)='O'
  36442.     This.gdipStatus = GdipFillRectangle( This.gdipHandle, toBrush.GetHandle() ;
  36443.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  36444.     This.gdipStatus = GdipFillRectangle( This.gdipHandle, toBrush.GetHandle() ;
  36445.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  36446. endif
  36447. return GDIPLUS_STATUS_OK == This.gdipStatus
  36448. ENDPROC
  36449. PROCEDURE fillellipse
  36450. lparameters toBrush, tXOrRect,tnY,tnW,tnH
  36451. * Parameters either ( brush, x,y,w,h )
  36452. * or ( brush, rect )
  36453. #if GDIPLUS_CHECK_OBJECT
  36454. if This.gdipHandle==0
  36455.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36456.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36457.     return .F.
  36458. endif
  36459. #endif
  36460. #if GDIPLUS_CHECK_PARAMS
  36461. do case
  36462. case vartype(m.toBrush)!='O'
  36463.     * Brush must be given (assume object is of correct type!)
  36464.     error 11 && function argument
  36465.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36466.     return .F.
  36467. case vartype(m.tXOrRect)='N' ;
  36468.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='NNN'
  36469.     * OK
  36470. case vartype(m.tXOrRect)='O' ;
  36471.     and vartype(m.tnY)+vartype(m.tnW)+vartype(m.tnH)=='LLL' ;
  36472.     and pemstatus(m.tXOrRect,'X',5) and pemstatus(m.tXOrRect,'W',5)
  36473.     * OK
  36474. otherwise    
  36475.     * Parameters do not pass the test
  36476.     error 11 && function argument
  36477.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36478.     return .F.
  36479. endcase
  36480. #endif
  36481. declare Integer GdipFillEllipse in gdiplus.dll ;
  36482.     integer nGraphics, integer nBrush, single,single,single,single
  36483. if vartype(m.tXOrRect)='O'
  36484.     This.gdipStatus = GdipFillEllipse( This.gdipHandle, toBrush.GetHandle() ;
  36485.     , m.tXOrRect.X,m.tXOrRect.Y, m.tXOrRect.W,m.tXOrRect.H )
  36486.     This.gdipStatus = GdipFillEllipse( This.gdipHandle, toBrush.GetHandle() ;
  36487.     , m.tXOrRect,m.tnY, m.tnW,m.tnH )
  36488. endif
  36489. return GDIPLUS_STATUS_OK == This.gdipStatus
  36490. ENDPROC
  36491. PROCEDURE flush
  36492. lparameters tnFlushIntention
  36493. #if GDIPLUS_CHECK_OBJECT
  36494. if This.gdipHandle==0
  36495.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36496.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36497.     return .F.
  36498. endif
  36499. #endif
  36500. #if GDIPLUS_CHECK_PARAMS
  36501. if !(vartype(m.tnFlushIntention)='N')
  36502.     error 11 && function argument
  36503.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36504.     return .F.
  36505. endif
  36506. #endif
  36507. declare integer GdipFlush in gdiplus.dll ;
  36508.     integer nGraphics, integer nFlushIntention
  36509. This.gdipStatus = GdipFlush(This.gdipHandle,m.tnFlushIntention)
  36510. return GDIPLUS_STATUS_OK == This.gdipStatus
  36511. ENDPROC
  36512. PROCEDURE createfromhdc
  36513. lparameters hDC
  36514. #if GDIPLUS_CHECK_PARAMS
  36515. if !(vartype(hDC)=='N')
  36516.     error 11 && function argument
  36517.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36518.     return .F.
  36519. endif
  36520. #endif
  36521. This.Destroy()
  36522. declare integer GdipCreateFromHDC in gdiplus.dll ;
  36523.     integer hdc, integer @ nGraphics
  36524. local nHandle
  36525. nHandle = 0
  36526. This.gdipStatus = GdipCreateFromHDC ( m.hDC, @nHandle )
  36527. if GDIPLUS_STATUS_OK == This.gdipStatus
  36528.     This.SetHandle( m.nHandle,.T.)
  36529.     return .T.
  36530.     return .F.
  36531. endif
  36532. ENDPROC
  36533. PROCEDURE createfromhwnd
  36534. lparameters hWND, tlICM as Logical
  36535. #if GDIPLUS_CHECK_PARAMS
  36536. if !(vartype(hWND)=='N' and vartype(m.tlICM)='L')
  36537.     error 11 && function argument
  36538.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36539.     return .F.
  36540. endif
  36541. #endif
  36542. This.Destroy()
  36543. local nHandle
  36544. nHandle = 0
  36545. if m.tlICM
  36546.     declare integer GdipCreateFromHWNDICM in gdiplus.dll ;
  36547.         integer hwnd, integer @ nGraphics
  36548.     This.gdipStatus = GdipCreateFromHWNDICM( m.hWND, @nHandle )
  36549.     declare integer GdipCreateFromHWND in gdiplus.dll ;
  36550.         integer hwnd, integer @ nGraphics
  36551.     This.gdipStatus = GdipCreateFromHWND( m.hWND, @nHandle )
  36552. endif
  36553. if GDIPLUS_STATUS_OK == This.gdipStatus
  36554.     This.SetHandle(m.nHandle,.T.)
  36555.     return .T.
  36556.     return .F.
  36557. endif
  36558. ENDPROC
  36559. PROCEDURE compositingmode_access
  36560. #if GDIPLUS_CHECK_OBJECT
  36561. if This.gdipHandle==0
  36562.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36563.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36564.     return cast(null as I)
  36565. endif
  36566. #endif
  36567. declare integer GdipGetCompositingMode in gdiplus.dll ;
  36568.     integer nGraphics, integer @
  36569. local nMode
  36570. nMode = 0 
  36571. This.gdipStatus = GdipGetCompositingMode( This.gdipHandle, @nMode)
  36572. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  36573. ENDPROC
  36574. PROCEDURE compositingmode_assign
  36575. LPARAMETERS tnMode
  36576. #if GDIPLUS_CHECK_OBJECT
  36577. if This.gdipHandle==0
  36578.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36579.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36580.     return .F.
  36581. endif
  36582. #endif
  36583. #if GDIPLUS_CHECK_PARAMS
  36584. if !(vartype(m.tnMode)='N')
  36585.     error 11 && function argument
  36586.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36587.     return .F.
  36588. endif
  36589. #endif
  36590. declare integer GdipSetCompositingMode in gdiplus.dll ;
  36591.     integer nGraphics, integer
  36592. This.gdipStatus = GdipSetCompositingMode( This.gdipHandle,m.tnMode)
  36593. return GDIPLUS_STATUS_OK == This.gdipStatus
  36594. ENDPROC
  36595. PROCEDURE compositingquality_access
  36596. #if GDIPLUS_CHECK_OBJECT
  36597. if This.gdipHandle==0
  36598.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36599.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36600.     return cast(null as I)
  36601. endif
  36602. #endif
  36603. declare integer GdipGetCompositingQuality in gdiplus.dll ;
  36604.     integer nGraphics, integer @
  36605. local nQuality
  36606. nQuality = 0
  36607. This.gdipStatus = GdipGetCompositingQuality( This.gdipHandle, @nQuality)
  36608. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nQuality,cast(null as I))
  36609. ENDPROC
  36610. PROCEDURE compositingquality_assign
  36611. LPARAMETERS tnQuality
  36612. #if GDIPLUS_CHECK_OBJECT
  36613. if This.gdipHandle==0
  36614.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36615.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36616.     return .F.
  36617. endif
  36618. #endif
  36619. #if GDIPLUS_CHECK_PARAMS
  36620. if !(vartype(m.tnQuality)='N')
  36621.     error 11 && function argument
  36622.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36623.     return .F.
  36624. endif
  36625. #endif
  36626. declare integer GdipSetCompositingQuality in gdiplus.dll ;
  36627.     integer nGraphics, integer
  36628. This.gdipStatus = GdipSetCompositingQuality( This.gdipHandle,m.tnQuality)
  36629. return GDIPLUS_STATUS_OK == This.gdipStatus
  36630. ENDPROC
  36631. PROCEDURE interpolationmode_access
  36632. #if GDIPLUS_CHECK_OBJECT
  36633. if This.gdipHandle==0
  36634.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36635.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36636.     return cast(null as I)
  36637. endif
  36638. #endif
  36639. declare integer GdipGetInterpolationMode in gdiplus.dll ;
  36640.     integer nGraphics, integer @
  36641. local nMode
  36642. nMode = 0
  36643. This.gdipStatus = GdipGetInterpolationMode ( This.gdipHandle, @nMode)
  36644. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  36645. ENDPROC
  36646. PROCEDURE interpolationmode_assign
  36647. LPARAMETERS tnInterpMode
  36648. #if GDIPLUS_CHECK_OBJECT
  36649. if This.gdipHandle==0
  36650.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36651.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36652.     return .F.
  36653. endif
  36654. #endif
  36655. #if GDIPLUS_CHECK_PARAMS
  36656. if !(vartype(m.tnInterpMode)='N')
  36657.     error 11 && function argument
  36658.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36659.     return .F.
  36660. endif
  36661. #endif
  36662. declare integer GdipSetInterpolationMode in gdiplus.dll ;
  36663.     integer nGraphics, integer
  36664. This.gdipStatus = GdipSetInterpolationMode ( This.gdipHandle,m.tnInterpMode)
  36665. return GDIPLUS_STATUS_OK == This.gdipStatus
  36666. ENDPROC
  36667. PROCEDURE pagescale_access
  36668. #if GDIPLUS_CHECK_OBJECT
  36669. if This.gdipHandle==0
  36670.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36671.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36672.     return cast(null as B)
  36673. endif
  36674. #endif
  36675. declare integer GdipGetPageScale in gdiplus.dll ;
  36676.     integer nGraphics, single @
  36677. local nPageScale
  36678. nPageScale = 0.0
  36679. This.gdipStatus = GdipGetPageScale( This.gdipHandle, @nPageScale)
  36680. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nPageScale,cast(null as B))
  36681. ENDPROC
  36682. PROCEDURE pagescale_assign
  36683. LPARAMETERS tnScale
  36684. #if GDIPLUS_CHECK_OBJECT
  36685. if This.gdipHandle==0
  36686.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36687.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36688.     return .F.
  36689. endif
  36690. #endif
  36691. #if GDIPLUS_CHECK_PARAMS
  36692. if !(vartype(m.tnScale)='N')
  36693.     error 11 && function argument
  36694.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36695.     return .F.
  36696. endif
  36697. #endif
  36698. declare integer GdipSetPageScale in gdiplus.dll ;
  36699.     integer nGraphics, single
  36700. This.gdipStatus = GdipSetPageScale( This.gdipHandle,m.tnScale)
  36701. return GDIPLUS_STATUS_OK == This.gdipStatus
  36702. ENDPROC
  36703. PROCEDURE smoothingmode_access
  36704. #if GDIPLUS_CHECK_OBJECT
  36705. if This.gdipHandle==0
  36706.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36707.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36708.     return cast(null as I)
  36709. endif
  36710. #endif
  36711. declare integer GdipGetSmoothingMode in gdiplus.dll ;
  36712.     integer nGraphics, integer @
  36713. local nSmoothingMode
  36714. nSmoothingMode = 0
  36715. This.gdipStatus = GdipGetSmoothingMode( This.gdipHandle, @nSmoothingMode)
  36716. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nSmoothingMode,cast(null as I))
  36717. ENDPROC
  36718. PROCEDURE smoothingmode_assign
  36719. LPARAMETERS tnMode
  36720. #if GDIPLUS_CHECK_OBJECT
  36721. if This.gdipHandle==0
  36722.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36723.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36724.     return .F.
  36725. endif
  36726. #endif
  36727. #if GDIPLUS_CHECK_PARAMS
  36728. if !(vartype(m.tnMode)='N')
  36729.     error 11 && function argument
  36730.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36731.     return .F.
  36732. endif
  36733. #endif
  36734. declare integer GdipSetSmoothingMode in gdiplus.dll ;
  36735.     integer nGraphics, integer
  36736. This.gdipStatus = GdipSetSmoothingMode( This.gdipHandle,m.tnMode)
  36737. return GDIPLUS_STATUS_OK == This.gdipStatus
  36738. ENDPROC
  36739. PROCEDURE pixeloffsetmode_access
  36740. #if GDIPLUS_CHECK_OBJECT
  36741. if This.gdipHandle==0
  36742.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36743.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36744.     return cast(null as I)
  36745. endif
  36746. #endif
  36747. declare integer GdipGetPixelOffsetMode in gdiplus.dll ;
  36748.     integer nGraphics, integer @
  36749. local nMode
  36750. nMode = 0
  36751. This.gdipStatus = GdipGetPixelOffsetMode( This.gdipHandle, @nMode)
  36752. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nMode,cast(null as I))
  36753. ENDPROC
  36754. PROCEDURE pixeloffsetmode_assign
  36755. LPARAMETERS tnMode
  36756. #if GDIPLUS_CHECK_OBJECT
  36757. if This.gdipHandle==0
  36758.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36759.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36760.     return .F.
  36761. endif
  36762. #endif
  36763. #if GDIPLUS_CHECK_PARAMS
  36764. if !(vartype(m.tnMode)='N')
  36765.     error 11 && function argument
  36766.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36767.     return .F.
  36768. endif
  36769. #endif
  36770. declare integer GdipSetPixelOffsetMode in gdiplus.dll ;
  36771.     integer nGraphics, integer
  36772. This.gdipStatus = GdipSetPixelOffsetMode ( This.gdipHandle,m.tnMode)
  36773. return GDIPLUS_STATUS_OK == This.gdipStatus
  36774. ENDPROC
  36775. PROCEDURE clipbounds_access
  36776. #if GDIPLUS_CHECK_OBJECT
  36777. if This.gdipHandle==0
  36778.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36779.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36780.     return null
  36781. endif
  36782. #endif
  36783. declare integer GdipGetClipBounds in gdiplus.dll ;
  36784.     integer nGraphics, string @ pRectF
  36785. local lcRectF, loRect
  36786. lcRectF = replicate(chr(0),16)
  36787. This.gdipStatus = GdipGetClipBounds ( This.gdipHandle, @lcRectF )
  36788. if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
  36789.     return This.ObjFactory('gpgraphics.clipbounds_access',GDIPLUS_CLASS_RECT,@lcRectF)
  36790.     return null
  36791. endif
  36792. ENDPROC
  36793. PROCEDURE clipbounds_assign
  36794. LPARAMETERS vNewVal
  36795. error 1743, 'ClipBounds'
  36796. ENDPROC
  36797. PROCEDURE pageunit_access
  36798. #if GDIPLUS_CHECK_OBJECT
  36799. if This.gdipHandle==0
  36800.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36801.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36802.     return cast(null as I)
  36803. endif
  36804. #endif
  36805. declare integer GdipGetPageUnit in gdiplus.dll ;
  36806.     integer nGraphics, integer @
  36807. local nUnit
  36808. nUnit = 0 
  36809. This.gdipStatus = GdipGetPageUnit( This.gdipHandle, @nUnit)
  36810. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nUnit,cast(null as I))
  36811. ENDPROC
  36812. PROCEDURE pageunit_assign
  36813. LPARAMETERS tnUnit
  36814. #if GDIPLUS_CHECK_OBJECT
  36815. if This.gdipHandle==0
  36816.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36817.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36818.     return .F.
  36819. endif
  36820. #endif
  36821. #if GDIPLUS_CHECK_PARAMS
  36822. if !(vartype(m.tnUnit)='N')
  36823.     error 11 && function argument
  36824.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36825.     return .F.
  36826. endif
  36827. #endif
  36828. declare integer GdipSetPageUnit in gdiplus.dll ;
  36829.     integer nGraphics, integer
  36830. This.gdipStatus = GdipSetPageUnit( This.gdipHandle,m.tnUnit)
  36831. return GDIPLUS_STATUS_OK == This.gdipStatus
  36832. ENDPROC
  36833. PROCEDURE visibleclipbounds_access
  36834. #if GDIPLUS_CHECK_OBJECT
  36835. if This.gdipHandle==0
  36836.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36837.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36838.     return null
  36839. endif
  36840. #endif
  36841. declare integer GdipGetVisibleClipBounds in gdiplus.dll ;
  36842.     integer nGraphics, string @ pRectF
  36843. local lcRectF, loRect
  36844. lcRectF = replicate(chr(0),16)
  36845. This.gdipStatus = GdipGetVisibleClipBounds( This.gdipHandle, @lcRectF )
  36846. if This.gdipStatus==GDIPLUS_STATUS_OK and len(m.lcRectF)==16
  36847.     return This.ObjFactory('gpgraphics.visibleclipbounds_access',GDIPLUS_CLASS_RECT,@lcRectF)
  36848.     return null
  36849. endif
  36850. ENDPROC
  36851. PROCEDURE visibleclipbounds_assign
  36852. LPARAMETERS vNewVal
  36853. error 1743, 'VisibleClipBounds'
  36854. ENDPROC
  36855. PROCEDURE measurestringa
  36856. lparameters tcAnsiString, toFont, tvLayoutArea, toStringFormat, rnCharsFitted, rnLinesFilled
  36857. #if GDIPLUS_CHECK_OBJECT
  36858. if This.gdipHandle==0
  36859.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36860.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36861.     return null
  36862. endif
  36863. #endif
  36864. #if GDIPLUS_CHECK_PARAMS
  36865. if !(vartype(m.tcAnsiString)='C' and vartype(m.toFont)$'OL' ;
  36866.     and vartype(m.toStringFormat)$'OL')
  36867.         error 11 && function argument
  36868.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36869.     return null
  36870.     endif
  36871. #endif
  36872. local lcRectF    && layout rectangle
  36873. do case
  36874. case vartype(tvLayoutArea)$'CQ' && String or varbinary
  36875.     do case
  36876.     case len(m.tvLayoutArea)==8 && sizeF
  36877.         lcRectF = replicate(chr(0),8)+m.tvLayoutArea
  36878.     case len(m.tvLayoutArea)==16 && rect
  36879.         lcRectF = cast(m.tvLayoutArea as C(16))
  36880.     otherwise
  36881.         * Empty
  36882.         lcRectF = replicate(chr(0),16)
  36883.     ENDCASE
  36884. case vartype(m.tvLayoutArea) == 'O'
  36885.     do case
  36886.     case pemstatus(m.tvLayoutArea,'gdipRectF',5)    && Rect
  36887.         lcRectF = tvLayoutArea.GdipRectF
  36888.     case pemstatus(m.tvLayoutArea,'GdipSizeF',5)    && Size
  36889.         lcRectF = replicate(chr(0),8)+tvLayoutArea.GdipSizeF
  36890.     otherwise
  36891.         error 11 && function argument
  36892.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36893.         return null
  36894.     endcase
  36895. case vartype(m.tvLayoutArea) == 'N'    && Width only
  36896.     lcRectF = replicate(chr(0),8)+bintoc(m.tvLayoutArea,'F')+replicate(chr(0),4)
  36897. otherwise
  36898.     * Not given
  36899.     lcRectF = replicate(chr(0),16)
  36900. endcase
  36901. declare integer GdipMeasureString in gdiplus.dll ;
  36902.     integer nGraphics,string cUnicode,integer nLength ;
  36903.     ,integer nFont,string cLayoutRect,integer nStringFormat ;
  36904.     , string @cRectOut, integer @nChars, integer @nLines
  36905. local lcBoundingBox as String, lnCharsFitted as Integer, lnLinesFilled as Integer
  36906. lcBoundingBox = replicate(chr(0),16) && empty rectangle
  36907. lnCharsFitted = 0
  36908. lnLinesFilled = 0
  36909. This.gdipStatus = GdipMeasureString( ;
  36910.     This.gdipHandle ;
  36911.     , strconv(m.tcAnsiString,5)    ;
  36912.     , len(m.tcAnsiString) ;
  36913.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  36914.     , m.lcRectF ;
  36915.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  36916.     , @ lcBoundingBox ;
  36917.     , @lnCharsFitted, @lnLinesFilled ;
  36918. if GDIPLUS_STATUS_OK == This.gdipStatus
  36919.     * Return result
  36920.     rnCharsFitted = m.lnCharsFitted
  36921.     rnLinesFilled = m.lnLinesFilled
  36922.     * return size - the SECOND 8 bytes of the rectF structure
  36923.     return This.ObjFactory('gpgraphics.measurestring',GDIPLUS_CLASS_SIZE,substr(m.lcBoundingBox,9))
  36924.     return null    && Failed
  36925. endif
  36926. ENDPROC
  36927. PROCEDURE measurestringw
  36928. lparameters tcUnicodeString, toFont, tvLayoutArea, toStringFormat, rnCharsFitted, rnLinesFilled
  36929. #if GDIPLUS_CHECK_OBJECT
  36930. if This.gdipHandle==0
  36931.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36932.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36933.     return null
  36934. endif
  36935. #endif
  36936. #if GDIPLUS_CHECK_PARAMS
  36937. if !(vartype(m.tcUnicodeString)='C' and vartype(m.toFont)$'OL' ;
  36938.     and vartype(m.toStringFormat)$'OL')
  36939.         error 11 && function argument
  36940.         This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  36941.         return null
  36942.     endif
  36943. #endif
  36944. local lcRectF    && layout rectangle
  36945. do case
  36946. case vartype(tvLayoutArea)$'CQ' && String or varbinary
  36947.     do case
  36948.     case len(m.tvLayoutArea)==8 && sizeF
  36949.         lcRectF = replicate(chr(0),8)+m.tvLayoutArea
  36950.     case len(m.tvLayoutArea)==16 && rect
  36951.         lcRectF = cast(m.tvLayoutArea as C(16))
  36952.     otherwise
  36953.         * Empty
  36954.         lcRectF = replicate(chr(0),16)
  36955.     endcase
  36956. case vartype(m.tvLayoutArea) == 'O'
  36957.     * Assume GpSize object
  36958.     lcRectF = replicate(chr(0),8)+tvLayoutArea.GdipSizeF
  36959. case vartype(m.tvLayoutArea) == 'N'    && Width only
  36960.     lcRectF = replicate(chr(0),8)+bintoc(m.tvLayoutArea,'F')+replicate(chr(0),4)
  36961. otherwise
  36962.     * Not given
  36963.     lcRectF = replicate(chr(0),16)
  36964. endcase
  36965. declare integer GdipMeasureString in gdiplus.dll ;
  36966.     integer nGraphics,string cUnicode,integer nLength ;
  36967.     ,integer nFont,string cLayoutRect,integer nStringFormat ;
  36968.     , string @cRectOut, integer @nChars, integer @nLines
  36969. local lcBoundingBox as String, lnCharsFitted as Integer, lnLinesFilled as Integer
  36970. lcBoundingBox = replicate(chr(0),16) && empty rectangle
  36971. lnCharsFitted = 0
  36972. lnLinesFilled = 0
  36973. This.gdipStatus = GdipMeasureString( ;
  36974.     This.gdipHandle ;
  36975.     , m.tcUnicodeString ;
  36976.     , len(m.tcUnicodeString)/2 ;
  36977.     , iif(vartype(m.toFont)='O',toFont.GetHandle(),0) ;
  36978.     , m.lcRectF ;
  36979.     , iif(vartype(m.toStringFormat)='O',toStringFormat.GetHandle(),0) ;
  36980.     , @ lcBoundingBox ;
  36981.     , @lnCharsFitted, @lnLinesFilled ;
  36982. if GDIPLUS_STATUS_OK == This.gdipStatus
  36983.     * Return result
  36984.     rnCharsFitted = m.lnCharsFitted
  36985.     rnLinesFilled = m.lnLinesFilled
  36986.     * return size - the SECOND 8 bytes of the rectF structure
  36987.     return This.ObjFactory('gpgraphics.measurestring',GDIPLUS_CLASS_SIZE,substr(m.lcBoundingBox,9))
  36988.     return null    && Failed
  36989. endif
  36990. ENDPROC
  36991. PROCEDURE textrenderinghint_access
  36992. #if GDIPLUS_CHECK_OBJECT
  36993. if This.gdipHandle==0
  36994.     error _GDIPLUS_NOGDIPOBJECT_LOC
  36995.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  36996.     return cast(null as I)
  36997. endif
  36998. #endif
  36999. declare integer GdipGetTextRenderingHint in gdiplus.dll ;
  37000.     integer nGraphics, integer @
  37001. local nHint
  37002. nHint = 0 
  37003. This.gdipStatus = GdipGetTextRenderingHint( This.gdipHandle, @nHint)
  37004. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nHint,cast(null as I))
  37005. ENDPROC
  37006. PROCEDURE textrenderinghint_assign
  37007. LPARAMETERS tnValue
  37008. #if GDIPLUS_CHECK_OBJECT
  37009. if This.gdipHandle==0
  37010.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37011.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37012.     return .F.
  37013. endif
  37014. #endif
  37015. #if GDIPLUS_CHECK_PARAMS
  37016. if !(vartype(m.tnValue)='N')
  37017.     error 11 && function argument
  37018.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37019.     return .F.
  37020. endif
  37021. #endif
  37022. declare integer GdipSetTextRenderingHint in gdiplus.dll ;
  37023.     integer nGraphics, integer
  37024. This.gdipStatus = GdipSetTextRenderingHint( This.gdipHandle,m.tnValue)
  37025. return GDIPLUS_STATUS_OK == This.gdipStatus
  37026. ENDPROC
  37027. PROCEDURE renderingorigin_access
  37028. #if GDIPLUS_CHECK_OBJECT
  37029. if This.gdipHandle==0
  37030.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37031.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37032.     return null
  37033. endif
  37034. #endif
  37035. declare integer GdipGetRenderingOrigin in gdiplus.dll ;
  37036.     integer nGraphics, integer @ x, integer @ y
  37037. local lnX, lnY
  37038. lnX = 0
  37039. lnY = 0
  37040. This.gdipStatus = GdipGetRenderingOrigin( This.gdipHandle, @lnX, @lnY )
  37041. if This.gdipStatus==GDIPLUS_STATUS_OK
  37042.     return This.ObjFactory('gpgraphics.renderingorigin_access',GDIPLUS_CLASS_POINT,m.lnX,m.lnY)
  37043.     return null
  37044. endif
  37045. ENDPROC
  37046. PROCEDURE renderingorigin_assign
  37047. LPARAMETERS toPoint
  37048. #if GDIPLUS_CHECK_OBJECT
  37049. if This.gdipHandle==0
  37050.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37051.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37052.     return .F.
  37053. endif
  37054. #endif
  37055. #if GDIPLUS_CHECK_PARAMS
  37056. if !(vartype(m.toPoint)='O' and pemstatus(toPoint,'X',5))
  37057.     error 11 && function argument
  37058.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37059.     return .F.
  37060. endif
  37061. #endif
  37062. declare integer GdipSetRenderingOrigin in gdiplus.dll ;
  37063.     integer nGraphics, integer x, integer y
  37064. This.gdipStatus = GdipSetRenderingOrigin( This.gdipHandle,m.toPoint.X,m.toPoint.Y)
  37065. return GDIPLUS_STATUS_OK == This.gdipStatus
  37066. ENDPROC
  37067. PROCEDURE textcontrast_access
  37068. #if GDIPLUS_CHECK_OBJECT
  37069. if This.gdipHandle==0
  37070.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37071.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37072.     return cast(null as I)
  37073. endif
  37074. #endif
  37075. declare integer GdipGetTextContrast in gdiplus.dll ;
  37076.     integer nGraphics, integer @
  37077. local nValue
  37078. nValue = 0 
  37079. This.gdipStatus = GdipGetTextContrast( This.gdipHandle, @nValue)
  37080. return iif(This.gdipStatus==GDIPLUS_STATUS_OK,m.nValue,cast(null as I))
  37081. ENDPROC
  37082. PROCEDURE textcontrast_assign
  37083. LPARAMETERS tnValue
  37084. #if GDIPLUS_CHECK_OBJECT
  37085. if This.gdipHandle==0
  37086.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37087.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37088.     return .F.
  37089. endif
  37090. #endif
  37091. #if GDIPLUS_CHECK_PARAMS
  37092. if !(vartype(m.tnValue)='N')
  37093.     error 11 && function argument
  37094.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37095.     return .F.
  37096. endif
  37097. #endif
  37098. declare integer GdipSetTextContrast in gdiplus.dll ;
  37099.     integer nGraphics, integer
  37100. This.gdipStatus = GdipSetTextContrast( This.gdipHandle,m.tnValue)
  37101. return GDIPLUS_STATUS_OK == This.gdipStatus
  37102. ENDPROC
  37103. PROCEDURE drawlines
  37104. lparameters toPen as GpPen, taPoints, tnFirstCol as integer
  37105. #if GDIPLUS_CHECK_OBJECT
  37106. if This.gdipHandle==0
  37107.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37108.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37109.     return .F.
  37110. endif
  37111. #endif
  37112. #if GDIPLUS_CHECK_PARAMS
  37113. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37114.     error 11 && function argument
  37115.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37116.     return .F.
  37117. endif
  37118. #endif
  37119. local lcPoints
  37120. if vartype(taPoints)='C'
  37121.     lcPoints = m.taPoints
  37122.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37123. endif
  37124. declare integer GdipDrawLines in gdiplus.dll ;
  37125.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37126. This.gdipStatus = GdipDrawLines( This.gdipHandle, toPen.GetHandle() ;
  37127.     , m.lcPoints, len(m.lcPoints)/8 )
  37128. return GDIPLUS_STATUS_OK == This.gdipStatus
  37129. ENDPROC
  37130. PROCEDURE drawlinesfromcursor
  37131. lparameters toPen as GpPen, tcAlias as String, tcExprX as String, tcExprY as String
  37132. #if GDIPLUS_CHECK_OBJECT
  37133. if This.gdipHandle==0
  37134.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37135.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37136.     return .F.
  37137. endif
  37138. #endif
  37139. #if GDIPLUS_CHECK_PARAMS
  37140. if !(vartype(toPen)='O')
  37141.     error 11 && function argument
  37142.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37143.     return .F.
  37144. endif
  37145. #endif
  37146. local lcPoints
  37147. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37148. declare integer GdipDrawLines in gdiplus.dll ;
  37149.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37150. This.gdipStatus = GdipDrawLines( This.gdipHandle, toPen.GetHandle() ;
  37151.     , m.lcPoints, len(m.lcPoints)/8 )
  37152. return GDIPLUS_STATUS_OK == This.gdipStatus
  37153. ENDPROC
  37154. PROCEDURE drawbeziers
  37155. lparameters toPen, taPoints, tnFirstCol
  37156. #if GDIPLUS_CHECK_OBJECT
  37157. if This.gdipHandle==0
  37158.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37159.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37160.     return .F.
  37161. endif
  37162. #endif
  37163. #if GDIPLUS_CHECK_PARAMS
  37164. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37165.     error 11 && function argument
  37166.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37167.     return .F.
  37168. endif
  37169. #endif
  37170. local lcPoints
  37171. if vartype(taPoints)='C'
  37172.     lcPoints = m.taPoints
  37173.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37174. endif
  37175. declare integer GdipDrawBeziers in gdiplus.dll ;
  37176.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37177. This.gdipStatus = GdipDrawBeziers( This.gdipHandle, toPen.GetHandle() ;
  37178.     , m.lcPoints, len(m.lcPoints)/8 )
  37179. return GDIPLUS_STATUS_OK == This.gdipStatus
  37180. ENDPROC
  37181. PROCEDURE drawclosedcurve
  37182. lparameters toPen, taPoints, tnFirstCol
  37183. #if GDIPLUS_CHECK_OBJECT
  37184. if This.gdipHandle==0
  37185.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37186.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37187.     return .F.
  37188. endif
  37189. #endif
  37190. #if GDIPLUS_CHECK_PARAMS
  37191. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37192.     error 11 && function argument
  37193.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37194.     return .F.
  37195. endif
  37196. #endif
  37197. local lcPoints
  37198. if vartype(taPoints)='C'
  37199.     lcPoints = m.taPoints
  37200.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37201. endif
  37202. declare integer GdipDrawClosedCurve in gdiplus.dll ;
  37203.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37204. This.gdipStatus = GdipDrawClosedCurve( This.gdipHandle, toPen.GetHandle() ;
  37205.     , m.lcPoints, len(m.lcPoints)/8 )
  37206. return GDIPLUS_STATUS_OK == This.gdipStatus
  37207. ENDPROC
  37208. PROCEDURE drawbeziersfromcursor
  37209. lparameters toPen, tcAlias, tcExprX, tcExprY
  37210. #if GDIPLUS_CHECK_OBJECT
  37211. if This.gdipHandle==0
  37212.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37213.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37214.     return .F.
  37215. endif
  37216. #endif
  37217. #if GDIPLUS_CHECK_PARAMS
  37218. if !(vartype(toPen)='O')
  37219.     error 11 && function argument
  37220.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37221.     return .F.
  37222. endif
  37223. #endif
  37224. local lcPoints
  37225. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37226. declare integer GdipDrawBeziers in gdiplus.dll ;
  37227.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37228. This.gdipStatus = GdipDrawBeziers( This.gdipHandle, toPen.GetHandle() ;
  37229.     , m.lcPoints, len(m.lcPoints)/8 )
  37230. return GDIPLUS_STATUS_OK == This.gdipStatus
  37231. ENDPROC
  37232. PROCEDURE drawclosedcurvefromcursor
  37233. lparameters toPen, tcAlias, tcExprX, tcExprY
  37234. #if GDIPLUS_CHECK_OBJECT
  37235. if This.gdipHandle==0
  37236.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37237.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37238.     return .F.
  37239. endif
  37240. #endif
  37241. #if GDIPLUS_CHECK_PARAMS
  37242. if !(vartype(toPen)='O')
  37243.     error 11 && function argument
  37244.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37245.     return .F.
  37246. endif
  37247. #endif
  37248. local lcPoints
  37249. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37250. declare integer GdipDrawClosedCurve in gdiplus.dll ;
  37251.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37252. This.gdipStatus = GdipDrawClosedCurve( This.gdipHandle, toPen.GetHandle() ;
  37253.     , m.lcPoints, len(m.lcPoints)/8 )
  37254. return GDIPLUS_STATUS_OK == This.gdipStatus
  37255. ENDPROC
  37256. PROCEDURE drawcurve
  37257. lparameters toPen, taPoints, tnFirstCol
  37258. #if GDIPLUS_CHECK_OBJECT
  37259. if This.gdipHandle==0
  37260.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37261.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37262.     return .F.
  37263. endif
  37264. #endif
  37265. #if GDIPLUS_CHECK_PARAMS
  37266. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37267.     error 11 && function argument
  37268.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37269.     return .F.
  37270. endif
  37271. #endif
  37272. local lcPoints
  37273. if vartype(taPoints)='C'
  37274.     lcPoints = m.taPoints
  37275.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37276. endif
  37277. declare integer GdipDrawCurve in gdiplus.dll ;
  37278.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37279. This.gdipStatus = GdipDrawCurve( This.gdipHandle, toPen.GetHandle() ;
  37280.     , m.lcPoints, len(m.lcPoints)/8 )
  37281. return GDIPLUS_STATUS_OK == This.gdipStatus
  37282. ENDPROC
  37283. PROCEDURE drawcurvefromcursor
  37284. lparameters toPen, tcAlias, tcExprX, tcExprY
  37285. #if GDIPLUS_CHECK_OBJECT
  37286. if This.gdipHandle==0
  37287.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37288.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37289.     return .F.
  37290. endif
  37291. #endif
  37292. #if GDIPLUS_CHECK_PARAMS
  37293. if !(vartype(toPen)='O')
  37294.     error 11 && function argument
  37295.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37296.     return .F.
  37297. endif
  37298. #endif
  37299. local lcPoints
  37300. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37301. declare integer GdipDrawCurve in gdiplus.dll ;
  37302.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37303. This.gdipStatus = GdipDrawCurve( This.gdipHandle, toPen.GetHandle() ;
  37304.     , m.lcPoints, len(m.lcPoints)/8 )
  37305. return GDIPLUS_STATUS_OK == This.gdipStatus
  37306. ENDPROC
  37307. PROCEDURE drawpolygon
  37308. lparameters toPen, taPoints, tnFirstCol
  37309. #if GDIPLUS_CHECK_OBJECT
  37310. if This.gdipHandle==0
  37311.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37312.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37313.     return .F.
  37314. endif
  37315. #endif
  37316. #if GDIPLUS_CHECK_PARAMS
  37317. if !(vartype(toPen)='O' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37318.     error 11 && function argument
  37319.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37320.     return .F.
  37321. endif
  37322. #endif
  37323. local lcPoints
  37324. if vartype(taPoints)='C'
  37325.     lcPoints = m.taPoints
  37326.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37327. endif
  37328. declare integer GdipDrawPolygon in gdiplus.dll ;
  37329.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37330. This.gdipStatus = GdipDrawPolygon( This.gdipHandle, toPen.GetHandle() ;
  37331.     , m.lcPoints, len(m.lcPoints)/8 )
  37332. return GDIPLUS_STATUS_OK == This.gdipStatus
  37333. ENDPROC
  37334. PROCEDURE drawpolygonfromcursor
  37335. lparameters toPen, tcAlias, tcExprX, tcExprY
  37336. #if GDIPLUS_CHECK_OBJECT
  37337. if This.gdipHandle==0
  37338.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37339.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37340.     return .F.
  37341. endif
  37342. #endif
  37343. #if GDIPLUS_CHECK_PARAMS
  37344. if !(vartype(toPen)='O')
  37345.     error 11 && function argument
  37346.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37347.     return .F.
  37348. endif
  37349. #endif
  37350. local lcPoints
  37351. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37352. declare integer GdipDrawPolygon in gdiplus.dll ;
  37353.     integer nGraphics, integer nPen, string cPoints, integer nCount
  37354. This.gdipStatus = GdipDrawPolygon( This.gdipHandle, toPen.GetHandle() ;
  37355.     , m.lcPoints, len(m.lcPoints)/8 )
  37356. return GDIPLUS_STATUS_OK == This.gdipStatus
  37357. ENDPROC
  37358. PROCEDURE drawrectangles
  37359. lparameters toPen, taRects, tnFirstCol
  37360. #if GDIPLUS_CHECK_OBJECT
  37361. if This.gdipHandle==0
  37362.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37363.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37364.     return .F.
  37365. endif
  37366. #endif
  37367. #if GDIPLUS_CHECK_PARAMS
  37368. if !(vartype(toPen)='O' and (vartype(taRects)='C' or type("taRects[1,1]")='N'))
  37369.     error 11 && function argument
  37370.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37371.     return .F.
  37372. endif
  37373. #endif
  37374. local lcRects
  37375. if vartype(taRects)='C'
  37376.     lcRects = m.taRects
  37377.     lcRects = This.MakeGdipArrayF( @taRects, 4, m.tnFirstCol )
  37378. endif
  37379. declare integer GdipDrawRectangles in gdiplus.dll ;
  37380.     integer nGraphics, integer nPen, string cRects, integer nCount
  37381. This.gdipStatus = GdipDrawRectangles( This.gdipHandle, toPen.GetHandle() ;
  37382.     , m.lcRects, len(m.lcRects)/16 )
  37383. return GDIPLUS_STATUS_OK == This.gdipStatus
  37384. ENDPROC
  37385. PROCEDURE drawrectanglesfromcursor
  37386. lparameters toPen, tcAlias, tcExprX, tcExprY, tcExprW, tcExprH
  37387. #if GDIPLUS_CHECK_OBJECT
  37388. if This.gdipHandle==0
  37389.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37390.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37391.     return .F.
  37392. endif
  37393. #endif
  37394. #if GDIPLUS_CHECK_PARAMS
  37395. if !(vartype(toPen)='O')
  37396.     error 11 && function argument
  37397.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37398.     return .F.
  37399. endif
  37400. #endif
  37401. local lcRects
  37402. lcRects = This.MakeGdipArrayFFromCursor( m.tcAlias, 4, m.tcExprX, m.tcExprY, m.tcExprW, m.tcExprH )
  37403. declare integer GdipDrawRectangles in gdiplus.dll ;
  37404.     integer nGraphics, integer nPen, string cRects, integer nCount
  37405. This.gdipStatus = GdipDrawRectangles( This.gdipHandle, toPen.GetHandle() ;
  37406.     , m.lcRects, len(m.lcRects)/16 )
  37407. return GDIPLUS_STATUS_OK == This.gdipStatus
  37408. ENDPROC
  37409. PROCEDURE fillclosedcurve
  37410. lparameters toBrush, taPoints, tnFirstCol, tnFillMode
  37411. #if GDIPLUS_CHECK_OBJECT
  37412. if This.gdipHandle==0
  37413.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37414.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37415.     return .F.
  37416. endif
  37417. #endif
  37418. #if GDIPLUS_CHECK_PARAMS
  37419. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37420.     error 11 && function argument
  37421.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37422.     return .F.
  37423. endif
  37424. #endif
  37425. local lcPoints
  37426. if vartype(taPoints)='C'
  37427.     lcPoints = m.taPoints
  37428.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37429. endif
  37430. declare integer GdipFillClosedCurve in gdiplus.dll ;
  37431.     integer nGraphics, integer nPen, string cPoints, integer nCount, integer nFillMode
  37432. This.gdipStatus = GdipFillClosedCurve( This.gdipHandle, toBrush.GetHandle() ;
  37433.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  37434. return GDIPLUS_STATUS_OK == This.gdipStatus
  37435. ENDPROC
  37436. PROCEDURE fillclosedcurvefromcursor
  37437. lparameters toBrush, tcAlias, tcExprX, tcExprY, tnFillMode
  37438. #if GDIPLUS_CHECK_OBJECT
  37439. if This.gdipHandle==0
  37440.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37441.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37442.     return .F.
  37443. endif
  37444. #endif
  37445. #if GDIPLUS_CHECK_PARAMS
  37446. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' )
  37447.     error 11 && function argument
  37448.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37449.     return .F.
  37450. endif
  37451. #endif
  37452. local lcPoints
  37453. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37454. declare integer GdipFillClosedCurve in gdiplus.dll ;
  37455.     integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
  37456. This.gdipStatus = GdipFillClosedCurve( This.gdipHandle, toBrush.GetHandle() ;
  37457.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  37458. return GDIPLUS_STATUS_OK == This.gdipStatus
  37459. ENDPROC
  37460. PROCEDURE fillpolygonfromcursor
  37461. lparameters toBrush, tcAlias, tcExprX, tcExprY, tnFillMode
  37462. #if GDIPLUS_CHECK_OBJECT
  37463. if This.gdipHandle==0
  37464.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37465.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37466.     return .F.
  37467. endif
  37468. #endif
  37469. #if GDIPLUS_CHECK_PARAMS
  37470. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' )
  37471.     error 11 && function argument
  37472.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37473.     return .F.
  37474. endif
  37475. #endif
  37476. local lcPoints
  37477. lcPoints = This.MakeGdipArrayFFromCursor( m.tcAlias, 2, m.tcExprX, m.tcExprY )
  37478. declare integer GdipFillPolygon in gdiplus.dll ;
  37479.     integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
  37480. This.gdipStatus = GdipFillPolygon( This.gdipHandle, toBrush.GetHandle() ;
  37481.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  37482. return GDIPLUS_STATUS_OK == This.gdipStatus
  37483. ENDPROC
  37484. PROCEDURE fillpolygon
  37485. lparameters toBrush, taPoints, tnFirstCol, tnFillMode
  37486. #if GDIPLUS_CHECK_OBJECT
  37487. if This.gdipHandle==0
  37488.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37489.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37490.     return .F.
  37491. endif
  37492. #endif
  37493. #if GDIPLUS_CHECK_PARAMS
  37494. if !(vartype(toBrush)='O' and vartype(m.tnFillMode)$'LN' and (vartype(taPoints)='C' or type("taPoints[1,1]")='N'))
  37495.     error 11 && function argument
  37496.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37497.     return .F.
  37498. endif
  37499. #endif
  37500. local lcPoints
  37501. if vartype(taPoints)='C'
  37502.     lcPoints = m.taPoints
  37503.     lcPoints = This.MakeGdipArrayF( @taPoints, 2, m.tnFirstCol )
  37504. endif
  37505. declare integer GdipFillPolygon in gdiplus.dll ;
  37506.     integer nGraphics, integer nBrush, string cPoints, integer nCount, integer nFillMode
  37507. This.gdipStatus = GdipFillPolygon( This.gdipHandle, toBrush.GetHandle() ;
  37508.     , m.lcPoints, len(m.lcPoints)/8,evl(m.tnFillMode,GDIPLUS_FillMode_Alternate) )
  37509. return GDIPLUS_STATUS_OK == This.gdipStatus
  37510. ENDPROC
  37511. PROCEDURE fillrectangles
  37512. lparameters toBrush, taRects, tnFirstCol
  37513. #if GDIPLUS_CHECK_OBJECT
  37514. if This.gdipHandle==0
  37515.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37516.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37517.     return .F.
  37518. endif
  37519. #endif
  37520. #if GDIPLUS_CHECK_PARAMS
  37521. if !(vartype(toBrush)='O' and (vartype(taRects)='C' or type("taRects[1,1]")='N'))
  37522.     error 11 && function argument
  37523.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37524.     return .F.
  37525. endif
  37526. #endif
  37527. local lcRects
  37528. if vartype(taRects)='C'
  37529.     lcRects = m.taRects
  37530.     lcRects = This.MakeGdipArrayF( @taRects, 4, m.tnFirstCol )
  37531. endif
  37532. declare integer GdipFillRectangles in gdiplus.dll ;
  37533.     integer nGraphics, integer nPen, string cRects, integer nCount
  37534. This.gdipStatus = GdipFillRectangles( This.gdipHandle, toBrush.GetHandle() ;
  37535.     , m.lcRects, len(m.lcRects)/16 )
  37536. return GDIPLUS_STATUS_OK == This.gdipStatus
  37537. ENDPROC
  37538. PROCEDURE fillrectanglesfromcursor
  37539. lparameters toBrush, tcAlias, tcExprX, tcExprY, tcExprW, tcExprH
  37540. #if GDIPLUS_CHECK_OBJECT
  37541. if This.gdipHandle==0
  37542.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37543.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37544.     return .F.
  37545. endif
  37546. #endif
  37547. #if GDIPLUS_CHECK_PARAMS
  37548. if !(vartype(toBrush)='O')
  37549.     error 11 && function argument
  37550.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37551.     return .F.
  37552. endif
  37553. #endif
  37554. local lcRects
  37555. lcRects = This.MakeGdipArrayFFromCursor( m.tcAlias, 4, m.tcExprX, m.tcExprY, m.tcExprW, m.tcExprH )
  37556. declare integer GdipFillRectangles in gdiplus.dll ;
  37557.     integer nGraphics, integer nPen, string cRects, integer nCount
  37558. This.gdipStatus = GdipFillRectangles( This.gdipHandle, toBrush.GetHandle() ;
  37559.     , m.lcRects, len(m.lcRects)/16 )
  37560. return GDIPLUS_STATUS_OK == This.gdipStatus
  37561. ENDPROC
  37562. PROCEDURE clear
  37563. lparameters tvColor
  37564. #if GDIPLUS_CHECK_OBJECT
  37565. if This.gdipHandle==0
  37566.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37567.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37568.     return .F.
  37569. endif
  37570. #endif
  37571. #if GDIPLUS_CHECK_PARAMS
  37572. if !(vartype(m.tvColor)$'NO')
  37573.     error 11 && function argument
  37574.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37575.     return .F.
  37576. endif
  37577. #endif
  37578. Declare Integer GdipGraphicsClear In GDIPlus.Dll ;
  37579.     integer nGraphics, integer nColor
  37580. This.gdipStatus = GdipGraphicsClear( ;
  37581.     This.gdipHandle ;
  37582.     , iif(vartype(m.tvColor)='O',m.tvColor.ARGB,m.tvColor) )
  37583. return GDIPLUS_STATUS_OK == This.gdipStatus
  37584. ENDPROC
  37585. PROCEDURE save
  37586. lparameters rnGraphicsState
  37587. #if GDIPLUS_CHECK_OBJECT
  37588. if This.gdipHandle==0
  37589.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37590.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37591.     return .F.
  37592. endif
  37593. #endif
  37594. local lnState
  37595. lnState = 0
  37596. declare integer GdipSaveGraphics in gdiplus.dll ;
  37597.     integer, integer @
  37598. This.gdipStatus = GdipSaveGraphics( This.gdipHandle, @lnState )
  37599. if GDIPLUS_STATUS_OK == This.gdipStatus
  37600.     rnGraphicsState = m.lnState
  37601.     return .T.
  37602.     return .F.
  37603. endif
  37604. ENDPROC
  37605. PROCEDURE restore
  37606. lparameters tnGraphicsState
  37607. #if GDIPLUS_CHECK_OBJECT
  37608. if This.gdipHandle==0
  37609.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37610.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37611.     return .F.
  37612. endif
  37613. #endif
  37614. #if GDIPLUS_CHECK_PARAMS
  37615. if !(vartype(m.tnGraphicsState)='N')
  37616.     error 11 && function argument
  37617.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37618.     return .F.
  37619. endif
  37620. #endif
  37621. declare integer GdipRestoreGraphics in gdiplus.dll ;
  37622.     integer, integer
  37623. This.gdipStatus = GdipRestoreGraphics( This.gdipHandle, m.tnGraphicsState )
  37624. return GDIPLUS_STATUS_OK == This.gdipStatus
  37625. ENDPROC
  37626. PROCEDURE translatetransform
  37627. lparameters tnOffsetX, tnOffsetY, tnMatrixOrder
  37628. #if GDIPLUS_CHECK_OBJECT
  37629. if This.gdipHandle==0
  37630.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37631.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37632.     return .F.
  37633. endif
  37634. #endif
  37635. #if GDIPLUS_CHECK_PARAMS
  37636. if !(vartype(m.tnOffsetX)='N' and vartype(m.tnOffsetY)='N' and vartype(m.tnMatrixOrder)$'LN')
  37637.     error 11 && function argument
  37638.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37639.     return .F.
  37640. endif
  37641. #endif
  37642. declare integer GdipTranslateWorldTransform in gdiplus.dll ;
  37643.     integer nGraphics, single nOffsetX, single nOffsetY, integer nMatrixOrder
  37644. This.gdipStatus = GdipTranslateWorldTransform( This.gdipHandle ;
  37645.     , m.tnOffsetX, m.tnOffsetY, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
  37646. return GDIPLUS_STATUS_OK == This.gdipStatus
  37647. ENDPROC
  37648. PROCEDURE rotatetransform
  37649. lparameters tnAngle, tnMatrixOrder
  37650. #if GDIPLUS_CHECK_OBJECT
  37651. if This.gdipHandle==0
  37652.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37653.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37654.     return .F.
  37655. endif
  37656. #endif
  37657. #if GDIPLUS_CHECK_PARAMS
  37658. if !(vartype(m.tnAngle)='N' and vartype(m.tnMatrixOrder)$'LN')
  37659.     error 11 && function argument
  37660.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37661.     return .F.
  37662. endif
  37663. #endif
  37664. declare integer GdipRotateWorldTransform in gdiplus.dll ;
  37665.     integer nGraphics, single nAngle, integer nMatrixOrder
  37666. This.gdipStatus = GdipRotateWorldTransform( This.gdipHandle ;
  37667.     , m.tnAngle, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
  37668. return GDIPLUS_STATUS_OK == This.gdipStatus
  37669. ENDPROC
  37670. PROCEDURE scaletransform
  37671. lparameters tnScaleX, tnScaleY, tnMatrixOrder
  37672. #if GDIPLUS_CHECK_OBJECT
  37673. if This.gdipHandle==0
  37674.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37675.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37676.     return .F.
  37677. endif
  37678. #endif
  37679. #if GDIPLUS_CHECK_PARAMS
  37680. if !(vartype(m.tnScaleX)='N' and vartype(m.tnScaleY)='N' and vartype(m.tnMatrixOrder)$'LN')
  37681.     error 11 && function argument
  37682.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37683.     return .F.
  37684. endif
  37685. #endif
  37686. declare integer GdipScaleWorldTransform in gdiplus.dll ;
  37687.     integer nGraphics, single nScaleX, single nScaleY, integer nMatrixOrder
  37688. This.gdipStatus = GdipScaleWorldTransform( This.gdipHandle ;
  37689.     , m.tnScaleX, m.tnScaleY, evl(m.tnMatrixOrder,GDIPLUS_MatrixOrder_Prepend) )
  37690. return GDIPLUS_STATUS_OK == This.gdipStatus
  37691. ENDPROC
  37692. PROCEDURE resettransform
  37693. #if GDIPLUS_CHECK_OBJECT
  37694. if This.gdipHandle==0
  37695.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37696.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37697.     return .F.
  37698. endif
  37699. #endif
  37700. declare integer GdipResetWorldTransform in gdiplus.dll ;
  37701.     integer nGraphics
  37702. This.gdipStatus = GdipResetWorldTransform( This.gdipHandle )
  37703. return GDIPLUS_STATUS_OK == This.gdipStatus
  37704. ENDPROC
  37705. PROCEDURE createfromimage
  37706. lparameters toImage
  37707. #if GDIPLUS_CHECK_PARAMS
  37708. if !(vartype(toImage)=='O')
  37709.     error 11 && function argument
  37710.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37711.     return .F.
  37712. endif
  37713. #endif
  37714. This.Destroy()
  37715. declare integer GdipGetImageGraphicsContext in gdiplus.dll ;
  37716.     integer nImage, integer @ nGraphics
  37717. local nHandle
  37718. nHandle = 0
  37719. This.gdipStatus = GdipGetImageGraphicsContext ( toImage.GetHandle(), @nHandle )
  37720. if GDIPLUS_STATUS_OK == This.gdipStatus
  37721.     This.SetHandle(m.nHandle,.T.)
  37722.     return .T.
  37723.     return .F.
  37724. endif
  37725. ENDPROC
  37726. PROCEDURE drawimageat
  37727. lparameters toImage, destPtOrX,destY
  37728. #if GDIPLUS_CHECK_OBJECT
  37729. if This.gdipHandle==0
  37730.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37731.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37732.     return .F.
  37733. endif
  37734. #endif
  37735. #if GDIPLUS_CHECK_PARAMS
  37736. if !(vartype(m.toImage)='O')
  37737.     error 11 && function argument
  37738.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37739.     return .F.
  37740. endif
  37741. #endif
  37742. local lnDestX, lnDestY as Number
  37743. do case
  37744. case vartype(m.destPtOrX)+vartype(m.destY)='NN'
  37745.     * passed separate coordinates
  37746.     lnDestX = m.destPtOrX
  37747.     lnDestY = m.destY
  37748. case vartype(m.destPtOrX)+vartype(m.destY)='OL' and pemstatus(m.destPtOrX,'X',5)
  37749.     * passed a point object (or a rect but we're ignoring width&height - this is unscaled)
  37750.     lnDestX = m.destPtOrX.X
  37751.     lnDestY = m.destPtOrX.Y
  37752. otherwise     
  37753.     error 11 && function argument
  37754.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37755.     return .F.
  37756. endcase
  37757. declare Integer GdipDrawImage in gdiplus.dll ;
  37758.     integer nGraphics, integer nImage, single,single
  37759. This.gdipStatus = GdipDrawImage( This.gdipHandle, toImage.GetHandle() ;
  37760.     , m.lnDestX,m.lnDestY)
  37761. return GDIPLUS_STATUS_OK==This.gdipStatus
  37762. ENDPROC
  37763. PROCEDURE drawimagescaled
  37764. lparameters toImage as GpImage, destRectOrX,destY,destW,destH
  37765. #if GDIPLUS_CHECK_OBJECT
  37766. if This.gdipHandle==0
  37767.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37768.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37769.     return .F.
  37770. endif
  37771. #endif
  37772. #if GDIPLUS_CHECK_PARAMS
  37773. if !(vartype(m.toImage)='O')
  37774.     error 11 && function argument
  37775.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37776.     return .F.
  37777. endif
  37778. #endif
  37779. local lnDestX, lnDestY, lnDestW, lnDestH as Number
  37780. do case
  37781. case vartype(m.destRectOrX)+vartype(m.destY)+vartype(m.destW)+vartype(m.destH)='NNNN'
  37782.     * passed separate coordinates
  37783.     lnDestX = m.destRectOrX
  37784.     lnDestY = m.destY
  37785.     lnDestW = m.destW
  37786.     lnDestH = m.destH
  37787. case vartype(m.destRectOrX)+vartype(m.destY)+vartype(m.destW)+vartype(m.destH)='OLLL' ;
  37788.     and pemstatus(m.destRectOrX,'X',5) and pemstatus(m.destRectOrX,'W',5)
  37789.     * passed a Rect object
  37790.     lnDestX = m.destRectOrX.X
  37791.     lnDestY = m.destRectOrX.Y
  37792.     lnDestW = m.destRectOrX.W
  37793.     lnDestH = m.destRectOrX.H
  37794. otherwise     
  37795.     error 11 && function argument
  37796.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37797.     return .F.
  37798. endcase
  37799. declare Integer GdipDrawImageRect in gdiplus.dll ;
  37800.     integer nGraphics, integer nImage, single,single,single,single
  37801. This.gdipStatus = GdipDrawImageRect ( This.gdipHandle, toImage.GetHandle() ;
  37802.     , m.lnDestX,m.lnDestY, m.lnDestW,m.lnDestH )
  37803. return GDIPLUS_STATUS_OK==This.gdipStatus
  37804. ENDPROC
  37805. PROCEDURE drawimageportionat
  37806. lparameters toImage, destPoint,srcRect, srcUnit
  37807. #if GDIPLUS_CHECK_OBJECT
  37808. if This.gdipHandle==0
  37809.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37810.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37811.     return .F.
  37812. endif
  37813. #endif
  37814. #if GDIPLUS_CHECK_PARAMS
  37815. if !(vartype(m.toImage)+vartype(m.destPoint)+vartype(m.srcRect)+vartype(m.srcUnit)=='OOON' ;
  37816.     and pemstatus(m.destPoint,'X',5) ;
  37817.     and pemstatus(m.srcRect,'X',5) and pemstatus(m.srcRect,'W',5))
  37818.     error 11 && function argument
  37819.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37820.     return .F.
  37821. endif
  37822. #endif
  37823. declare Integer GdipDrawImagePointRect in gdiplus.dll ;
  37824.     integer nGraphics, integer nImage ;
  37825.     , single,single ;
  37826.     , single,single,single,single ;
  37827.     , integer
  37828. This.gdipStatus = GdipDrawImagePointRect( This.gdipHandle, toImage.GetHandle() ;
  37829.     , m.destPoint.X,m.destPoint.Y ;
  37830.     , m.srcRect.X,m.srcRect.Y,m.srcRect.W,m.srcRect.H ;
  37831.     , m.srcUnit )
  37832. return GDIPLUS_STATUS_OK==This.gdipStatus
  37833. ENDPROC
  37834. PROCEDURE drawimageportionscaled
  37835. lparameters toImage, destRect,srcRect, srcUnit, imageAttribs
  37836. * This function allows an optional ImageAttributes object. Since this class
  37837. * isn't currently implemented in the FFC classes, allow an integer pointer
  37838. * to be passed in, so that the called can implement themselves
  37839. #if GDIPLUS_CHECK_OBJECT
  37840. if This.gdipHandle==0
  37841.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37842.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37843.     return .F.
  37844. endif
  37845. #endif
  37846. #if GDIPLUS_CHECK_PARAMS
  37847. if !(vartype(m.toImage)+vartype(m.destRect)+vartype(m.srcRect)+vartype(m.srcUnit)=='OOON' ;
  37848.     and vartype(m.imageAttribs)$'ONL' ;
  37849.     and pemstatus(m.destRect,'X',5) and pemstatus(m.destRect,'W',5) ;
  37850.     and pemstatus(m.srcRect,'X',5) and pemstatus(m.srcRect,'W',5))
  37851.     error 11 && function argument
  37852.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37853.     return .F.
  37854. endif
  37855. #endif
  37856. declare Integer GdipDrawImageRectRect in gdiplus.dll ;
  37857.     integer nGraphics, integer nImage ;
  37858.     , single,single,single,single ;
  37859.     , single,single,single,single ;
  37860.     , integer nSrcUnit ;
  37861.     , integer nImgAttribs ;
  37862.     , integer nCallback, integer nCallbackData
  37863. This.gdipStatus = GdipDrawImageRectRect( This.gdipHandle, toImage.GetHandle() ;
  37864.     , m.destRect.X,m.destRect.Y,m.destRect.W,m.destRect.H ;
  37865.     , m.srcRect.X,m.srcRect.Y,m.srcRect.W,m.srcRect.H ;
  37866.     , m.srcUnit ;
  37867.     , icase(    vartype(m.imageAttribs)='O',m.imageAttribs.GetHandle() ;
  37868.                 ,vartype(m.imageAttribs)='N',m.imageAttributes ;
  37869.                 , 0 ) ;
  37870.     , 0, 0 )
  37871. return GDIPLUS_STATUS_OK==This.gdipStatus
  37872. ENDPROC
  37873. PROCEDURE releasehdc
  37874. lparameters tnHDC as integer
  37875. #if GDIPLUS_CHECK_OBJECT
  37876. if This.gdipHandle==0
  37877.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37878.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37879.     return .F.
  37880. endif
  37881. #endif
  37882. #if GDIPLUS_CHECK_PARAMS
  37883. if !(vartype(m.tnHDC)='N')
  37884.     error 11 && function argument
  37885.     This.gdipStatus = GDIPLUS_STATUS_InvalidParameter
  37886.     return .F.
  37887. endif
  37888. #endif
  37889. declare integer GdipReleaseDC in gdiplus.dll ;
  37890.     integer, integer
  37891. This.gdipStatus = GdipReleaseDC( This.gdipHandle, tnHDC )
  37892. return GDIPLUS_STATUS_OK == This.gdipStatus
  37893. ENDPROC
  37894. PROCEDURE gethdc
  37895. #if GDIPLUS_CHECK_OBJECT
  37896. if This.gdipHandle==0
  37897.     error _GDIPLUS_NOGDIPOBJECT_LOC
  37898.     This.gdipStatus = GDIPLUS_STATUS_GenericError
  37899.     return cast(null as I)
  37900. endif
  37901. #endif
  37902. local lnHDC
  37903. lnHDC = 0
  37904. declare integer GdipGetDC in gdiplus.dll ;
  37905.     integer, integer @
  37906. This.gdipStatus = GdipGetDC( This.gdipHandle, @lnHDC )
  37907. if GDIPLUS_STATUS_OK == This.gdipStatus
  37908.     return m.lnHDC
  37909.     return cast(null as I)
  37910. endif
  37911. ENDPROC
  37912. PROCEDURE drawstringjust
  37913.     *************************************************************************************
  37914.     ** Method: xfcGraphics.DrawStringJustified
  37915.     ** Draws the specified text string at the specified location with the specified Brush
  37916.     ** and Font objects in a Full Justified format.
  37917.     ** History:
  37918.     **  2007/01/15: CChalom - Coded
  37919.     **  2007/02/02: CChalom - Tweaked to work with ReportListener
  37920.     **  2007/04/16: CChalom - Minor fixes for small sentences
  37921.     **  2008/06/22: CChalom - Added some tweaks to allow better drawing on reports
  37922.     **                        Added new flag - tlJustLast - that will forcely justify the last line
  37923.     *************************************************************************************
  37924.     DECLARE Long GdipSetTextRenderingHint IN GDIPLUS.DLL AS xfcGdipSetTextRenderingHint Long graphics, Long mode
  37925.     DECLARE Long GdipStringFormatGetGenericTypographic IN GDIPLUS.DLL AS xfcGdipStringFormatGetGenericTypographic Long @StringFormat
  37926.     DECLARE Long GdipCloneStringFormat IN GDIPLUS.DLL AS xfcGdipCloneStringFormat Long StringFormat, Long @newFormat
  37927.     DECLARE Long GdipCreateStringFormat IN GDIPLUS.DLL AS xfcGdipCreateStringFormat Integer formatAttributes, Integer language, Long @StringFormat
  37928.     DECLARE Long GdipDeleteStringFormat IN GDIPLUS.DLL AS xfcGdipDeleteStringFormat Long StringFormat
  37929.     DECLARE Long GdipSetStringFormatFlags IN GDIPLUS.DLL AS xfcGdipSetStringFormatFlags Long StringFormat, Long flags
  37930.     DECLARE Long GdipSetStringFormatAlign IN GDIPLUS.DLL AS xfcGdipSetStringFormatAlign Long StringFormat, Long Align
  37931.     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
  37932.     DECLARE Long GdipDrawString IN GDIPLUS.DLL AS xfcGdipDrawString Long graphics, String str, Long length, Long thefont, String @layoutRect, Long StringFormat, Long brush
  37933.     DECLARE Long GdipDeleteStringFormat IN GDIPLUS.DLL AS xfcGdipDeleteStringFormat Long StringFormat
  37934. #DEFINE StringFormatFlagsDirectionRightToLeft 1 
  37935. #DEFINE StringFormatFlagsDirectionVertical  2 
  37936. #DEFINE StringFormatFlagsNoFitBlackBox   4 
  37937. #DEFINE StringFormatFlagsDisplayFormatControl 32 
  37938. #DEFINE StringFormatFlagsNoFontFallback   1024 
  37939. #DEFINE StringFormatFlagsMeasureTrailingSpaces 2048 
  37940. #DEFINE StringFormatFlagsNoWrap     4096 
  37941. #DEFINE StringFormatFlagsLineLimit    8192 
  37942. #DEFINE StringFormatFlagsNoClip     16384 
  37943. #DEFINE StringAlignmentNear 0 
  37944. #DEFINE StringAlignmentCenter 1 
  37945. #DEFINE StringAlignmentFar  2 
  37946. #DEFINE EMPTY_FLOAT            0h00000000
  37947. #DEFINE EMPTY_LONG            0h00000000
  37948. #DEFINE EMPTY_SHORT            0h0000
  37949. #DEFINE EMPTY_RECTANGLE        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  37950. #DEFINE EMPTY_RECTANGLEF    EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT
  37951. #DEFINE EMPTY_POINT            EMPTY_LONG+EMPTY_LONG
  37952. #DEFINE EMPTY_POINTF        EMPTY_FLOAT+EMPTY_FLOAT
  37953. #DEFINE EMPTY_SIZE            EMPTY_LONG+EMPTY_LONG
  37954. #DEFINE EMPTY_SIZEF            EMPTY_FLOAT+EMPTY_FLOAT
  37955. #DEFINE EMPTY_METAFILEHEADER  EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  37956.                                 EMPTY_FLOAT+EMPTY_FLOAT+;
  37957.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  37958.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  37959. #DEFINE EMPTY_ICONINFO        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  37960. #DEFINE EMPTY_BITMAP        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_SHORT+EMPTY_SHORT+EMPTY_LONG
  37961.     DECLARE Long GdipSetTextRenderingHint IN GDIPLUS.DLL AS Foxy_GdipSetTextRenderingHint Long graphics, Long mode
  37962.     LPARAMETERS tcString, ;
  37963.                     toFont as GpFont of HOME() + "\ffc\_gdiplus.vcx", ;
  37964.                     toBrush as GpSolidBrush, ;
  37965.                     toRectangle as GpRectangle of HOME() + "\ffc\_gdiplus.vcx", ;
  37966.                     tlJustLast as Boolean 
  37967.         *!ToDo: Add more error trapping
  37968.         *!ToDo: Add new overloads
  37969.         LOCAL lhFont, lhGraphics, lhBrush, lcRectF
  37970.         LOCAL N, lnSpaceWidth, lnLineHeight, lcText
  37971.         LOCAL wImg, hImg, x0, y0
  37972.         LOCAL loGfxState AS xfcGraphicsState
  37973.         LOCAL lhTempStrFormat, lhStringFormat
  37974.         LOCAL lhLeftAlignHandle
  37975.         LOCAL lhRightAlignHandle
  37976.         LOCAL lnWords, lnWordWidth, lnChars, lcCurrWord, lcCutWord, lnReduce
  37977.         LOCAL llEndOfSentence, lnWordsWidth, lnWordsinLine, lnCurrWord, lnCurrLine, lnX, lnY
  37978.         LOCAL lnWidthofBetween, lnStringFormatHandle, llLast
  37979.         #DEFINE TextRenderingHintAntiAlias        4
  37980.         LOCAL loExc AS Exception
  37981.         TRY
  37982.             m.X0   = m.toRectangle.x 
  37983.             m.Y0   = m.toRectangle.y
  37984.             m.wImg = m.toRectangle.w
  37985.             m.hImg = m.toRectangle.h
  37986.             * Save the current state of the graphics handle
  37987. LOCAL lhGfxState
  37988. lhGfxState = 0        
  37989. This.Save(@lhGfxState)
  37990.             * m.loGfxState = This.Save()
  37991.             * Store Gdi+ handles for MeasureString and DrawString
  37992.             m.lhFont     = m.toFont.GetHandle()
  37993.             m.lhGraphics = This.GetHandle()
  37994.             m.lhBrush    = m.toBrush.GetHandle()
  37995.             * Obtain the Font Height to be used as Line Height
  37996.             m.lnLineHeight = FLOOR(m.toFont.GetHeight(This)) - 2
  37997.             * Adjust the Text String to ease detection of Carriage Returns
  37998.             m.lcText = STRTRAN(m.tcString,CHR(13)+CHR(10), " <CR> ")
  37999.             m.lcText = STRTRAN(m.lcText,CHR(13), " <CR> ")
  38000.             m.lcText = STRTRAN(m.lcText,CHR(10), " <CR> ")
  38001.             m.lcText = m.lcText + " <LASTWORD> "
  38002.             * Ensure Measure String will bring the best measures possible
  38003.             * Set to AntiAlias
  38004.             = xfcGdipSetTextRenderingHint(m.lhGraphics, TextRenderingHintAntiAlias)
  38005.             * Create a String Format object with the Generic Typographic TO obtain
  38006.             *   the most accurate String measurements
  38007.             * Strange, but the recommended for this case is to use a "cloned" StringFormat
  38008.             STORE 0 TO m.lhTempStrFormat, m.lhStringFormat
  38009.             = xfcGdipStringFormatGetGenericTypographic(@lhTempStrFormat)
  38010.             = xfcGdipCloneStringFormat(m.lhTempStrFormat, @lhStringFormat)
  38011.             * Delete the Temporary StringFormat object created
  38012.             = xfcGdipDeleteStringFormat(m.lhTempStrFormat)
  38013.             * Allow the correct measuring of Spaces
  38014.             = xfcGdipSetStringFormatFlags(m.lhStringFormat, StringFormatFlagsMeasureTrailingSpaces)
  38015.             * Create a StringFormat for LeftAlignment
  38016.             m.lhLeftAlignHandle = 0
  38017.             = xfcGdipCreateStringFormat(0, 0, @lhLeftAlignHandle)
  38018.             = xfcGdipSetStringFormatAlign(m.lhLeftAlignHandle, StringAlignmentNear)
  38019.             * Create a StringFormat for RightAlignment
  38020.             m.lhRightAlignHandle = 0
  38021.             = xfcGdipCreateStringFormat(0, 0, @lhRightAlignHandle)
  38022.             = xfcGdipSetStringFormatAlign(m.lhRightAlignHandle, StringAlignmentFar)
  38023.             * Measure Space for the given font
  38024.             STORE EMPTY_RECTANGLE TO m.lcRectF, pcBoundingBox
  38025.             = xfcGdipMeasureString( m.lhGraphics;
  38026.                 , STRCONV(" " + 0h00,5)    ;
  38027.                 , 1 ;
  38028.                 , m.lhFont ;
  38029.                 , m.lcRectF ;
  38030.                 , m.lhStringFormat ;
  38031.                 , @pcBoundingBox, 0, 0)
  38032.             m.lnSpaceWidth = CTOBIN(SUBSTR(pcBoundingBox, 9, 4), 'N') + 1
  38033.             m.lnWords = GETWORDCOUNT(m.lcText)
  38034.             DIMENSION laWords(lnWords,2)
  38035.             * Measure each word
  38036.             n = 1
  38037.             DO WHILE .T.
  38038.                 laWords(N,1) = GETWORDNUM(m.lcText, N)
  38039.                 m.lcCurrWord = laWords(N,1)
  38040.                 STORE EMPTY_RECTANGLE TO m.lcRectF, pcBoundingBox
  38041.                 = xfcGdipMeasureString(m.lhGraphics;
  38042.                     , STRCONV(m.lcCurrWord + 0h00,5)    ;
  38043.                     , LENC(m.lcCurrWord) ;
  38044.                     , m.lhFont ;
  38045.                     , m.lcRectF ;
  38046.                     , lhStringFormat ;
  38047.                     , @pcBoundingBox, 0, 0)
  38048.                 m.lnWordWidth = CTOBIN(SUBSTR(pcBoundingBox, 9, 4), 'N')
  38049.                 IF m.lnWordWidth > m.wImg AND (NOT INLIST(m.lcCurrWord, "<CR>", "<LASTWORD>"))
  38050.                     m.lnReduce = 1
  38051.                     DO WHILE .T.
  38052.                         m.lnChars = ROUND((LENC(m.lcCurrWord) / (m.lnWordWidth / m.wImg)),0) - m.lnReduce
  38053.                         m.lcCutWord = SUBSTR(m.lcCurrWord, 1, m.lnChars)
  38054.                         STORE EMPTY_RECTANGLE TO m.lcRectF, pcBoundingBox
  38055.                         = xfcGdipMeasureString(m.lhGraphics;
  38056.                             , STRCONV(m.lcCutWord + 0h00,5)    ;
  38057.                             , LENC(m.lcCutWord) ;
  38058.                             , m.lhFont ;
  38059.                             , m.lcRectF ;
  38060.                             , m.lhStringFormat ;
  38061.                             , @pcBoundingBox, 0, 0)
  38062.                         m.lnWordWidth = CTOBIN(SUBSTR(pcBoundingBox, 9, 4), 'N')
  38063.                         laWords(N,1) = m.lcCutWord
  38064.                         IF m.lnWordWidth <= m.wImg
  38065.                             m.lnWords = m.lnWords + 1
  38066.                             DIMENSION laWords(m.lnWords,2)
  38067.                             laWords(m.lnWords,1) = ""
  38068.                             laWords(m.lnWords,2) = 0
  38069.                             
  38070.                             m.lcText = STRTRAN(m.lcText, m.lcCurrWord, ;
  38071.                                 m.lcCutWord + SPACE(1) + SUBSTR(m.lcCurrWord, m.lnChars + 1), ;
  38072.                                 1, 1)
  38073.                             EXIT
  38074.                         ENDIF
  38075.                         m.lnReduce = m.lnReduce + 1    
  38076.                     ENDDO
  38077.                 ENDIF
  38078.                 laWords(N,2) = m.lnWordWidth
  38079.                 N = N + 1
  38080.                 IF N > m.lnWords
  38081.                     EXIT
  38082.                 ENDIF
  38083.             ENDDO
  38084.             * Before we start drawing, it's wise to restore our Graphics object to
  38085.             *    its original state.
  38086.             * Put back the state of the graphics handle
  38087.             * This.Restore(loGfxState)
  38088. This.Restore(lhGfxState)            
  38089.             * Start Drawing word by word
  38090.             m.lnCurrWord = 1
  38091.             m.lnCurrLine = 0
  38092.             LOCAL llLastLine
  38093.             m.llLastLine = .F.
  38094.             FOR m.N = 1 TO m.lnWords
  38095.                 llEndOfSentence   = .F.
  38096.                 m.lnWordsWidth  = 0
  38097.                 m.lnWordsinLine = 0
  38098.                 FOR m.z = m.N TO m.lnWords
  38099.                     lcChar = LOWER(laWords(z,1))
  38100.                     
  38101.                     IF m.laWords(z,1) = "<CR>"
  38102.                         m.llEndOfSentence = .T.
  38103.                         EXIT
  38104.                     ENDIF
  38105.                     
  38106.                     IF m.laWords(z,1) = "<LASTWORD>"
  38107.                         m.llLastLine = .T.
  38108.                         m.lnWordsWidth = m.lnWordsWidth - (m.lnSpaceWidth * m.lnWordsinLine) + m.lnSpaceWidth
  38109.                         EXIT
  38110.                     ENDIF 
  38111.                     m.lnWordsWidth = m.lnWordsWidth + m.laWords(z,2) + m.lnSpaceWidth
  38112.                     IF m.lnWordsWidth > m.wImg AND z > N
  38113.                         m.lnWordsWidth = m.lnWordsWidth - m.laWords(z,2) - (m.lnSpaceWidth * m.lnWordsinLine)
  38114.                         EXIT
  38115.                     ENDIF
  38116.                     m.lnWordsinLine = m.lnWordsinLine + 1
  38117.                 ENDFOR
  38118.                 m.lnWordsWidth = m.lnWordsWidth - m.lnSpaceWidth
  38119.                 IF m.z >= m.lnWords
  38120.                     m.llEndOfSentence = .T.
  38121.                     m.llLastLine = .T.
  38122.                 ENDIF
  38123.                 IF m.llLastLine
  38124.                     IF m.tlJustLast
  38125.                         m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  38126.                     ELSE 
  38127.                         m.lnWidthOfBetween = m.lnSpaceWidth
  38128.                     ENDIF 
  38129.                     
  38130.                 ELSE 
  38131.                     
  38132.                     IF m.llEndOfSentence
  38133.                         m.lnWidthOfBetween = m.lnSpaceWidth
  38134.                     ELSE
  38135.                         m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  38136.                     ENDIF
  38137.                             
  38138.                 ENDIF 
  38139.                 m.lnY = m.Y0 + (m.lnCurrLine * m.lnLineHeight)
  38140.                 IF m.lnY > (m.hImg + m.Y0 - lnLineHeight / 2)
  38141.                     m.n = m.lnWords
  38142.                     EXIT
  38143.                 ENDIF
  38144.                         
  38145.                 m.lnX = m.X0
  38146.                 FOR m.lnCurrWord = 1 TO m.lnWordsinLine
  38147.                     m.llLast = .F.
  38148.                     IF m.laWords(N,1) = "<CR>" && Ignore
  38149.                         m.N = m.N + 1
  38150.                         LOOP
  38151.                     ENDIF
  38152.                     
  38153.                     IF m.lnCurrWord = m.lnWordsinLine AND NOT m.llEndOfSentence
  38154.                         m.llLast = .T.
  38155.                     ENDIF
  38156.                     IF m.lnCurrWord = m.lnWordsinLine AND m.llLastLine AND tlJustLast
  38157.                         m.llLast = .T.
  38158.                     ENDIF
  38159.                     IF m.lnWordsInLine = 1
  38160.                         m.lnX = m.X0
  38161.                         m.llLast = .F.
  38162.                     ENDIF
  38163.                     IF m.llLast
  38164.                         m.lcRectF = BINTOC(m.X0,'F') + BINTOC(m.lnY,'F') + ;
  38165.                             BINTOC(m.wImg,'F') + BINTOC(m.lnY + m.lnLineHeight,'F')
  38166.                         m.lnStringFormatHandle = m.lhRightAlignHandle
  38167.                     ELSE
  38168.                         m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + REPLICATE(CHR(0),8)
  38169.                         m.lnStringFormatHandle = m.lhLeftAlignHandle
  38170.                     ENDIF
  38171.                     = xfcGdipDrawString(m.lhGraphics ;
  38172.                         , STRCONV(m.laWords(N,1) + 0h00,5) ;
  38173.                         , LEN(m.laWords(N,1)) ;
  38174.                         , m.lhFont ;
  38175.                         , m.lcRectF ;
  38176.                         , m.lnStringFormatHandle ;
  38177.                         , m.lhBrush)
  38178.                     m.lnX = m.lnX + m.laWords(N,2) + m.lnWidthOfBetween
  38179.                     m.N = m.N + 1 && Go to next word
  38180.                 ENDFOR
  38181.                 m.lnCurrLine = m.lnCurrLine + 1
  38182.                 IF m.N >= m.lnWords
  38183.                     EXIT
  38184.                 ENDIF
  38185.                 IF m.laWords(N,1) <> "<CR>"
  38186.                     m.N = m.N - 1 && Compensate ENDFOR
  38187.                 ENDIF
  38188.             ENDFOR
  38189.             * Finished Measuring, so erase the temp objects
  38190.             * Delete the StringFormat object created
  38191.             =xfcGdipDeleteStringFormat(m.lhStringFormat)
  38192.             =xfcGdipDeleteStringFormat(m.lhLeftAlignHandle)
  38193.             =xfcGdipDeleteStringFormat(m.lhRightAlignHandle)
  38194.         CATCH TO loExc
  38195.             SET STEP ON 
  38196.         ENDTRY
  38197.         RETURN NULL
  38198. ENDPROC
  38199. PROCEDURE Destroy
  38200. if This.gdipHandle>0 and This.gdipOwnsThisHandle
  38201.     declare integer GdipDeleteGraphics in gdiplus.dll integer
  38202.     GdipDeleteGraphics( This.gdipHandle )
  38203.     This.gdipHandle = 0
  38204.     This.gdipOwnsThisHandle = .F.
  38205. endif
  38206. ENDPROC
  38207. pixeloffsetmode = 0
  38208. pageunit =  
  38209. _memberdata = 
  38210.     7020<?xml version="1.0" standalone="yes"?>
  38211. <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>
  38212. Name = "gpgraphics"
  38213. PLATFORM
  38214. UNIQUEID
  38215. TIMESTAMP
  38216. CLASS
  38217. CLASSLOC
  38218. BASECLASS
  38219. OBJNAME
  38220. PARENT
  38221. PROPERTIES
  38222. PROTECTED
  38223. METHODS
  38224. OBJCODE
  38225. RESERVED1
  38226. RESERVED2
  38227. RESERVED3
  38228. RESERVED4
  38229. RESERVED5
  38230. RESERVED6
  38231. RESERVED7
  38232. RESERVED8
  38233.  COMMENT Screen              
  38234.  WINDOWS _2Z911D86M1022004034
  38235.  WINDOWS _2Z911D86N1059848224
  38236.  WINDOWS _2Z911D86M1026462205
  38237.  WINDOWS _2ZD1D1IP71026462205'
  38238.  WINDOWS _2Z911D86M1026130672~
  38239.  WINDOWS _2Z911D86N1026130672@
  38240.  COMMENT RESERVED            
  38241. VERSION =   3.00
  38242. dataenvironment
  38243. dataenvironment
  38244. Dataenvironment
  38245. YTop = 0
  38246. Left = 0
  38247. Width = 0
  38248. Height = 0
  38249. DataSource = .NULL.
  38250. Name = "Dataenvironment"
  38251.     frmSearch
  38252. DataSession = 2
  38253. BorderStyle = 2
  38254. Height = 90
  38255. Width = 370
  38256. Desktop = .T.
  38257. ShowWindow = 1
  38258. DoCreate = .T.
  38259. AutoCenter = .T.
  38260. Caption = "Find"
  38261. Closable = .F.
  38262. MaxButton = .F.
  38263. MinButton = .F.
  38264. Icon = ..\
  38265. WindowType = 1
  38266. AlwaysOnTop = .T.
  38267. AllowOutput = .F.
  38268. _memberdata = <VFPData><memberdata name="updatecontrol" display="UpdateControl"/><memberdata name="updatetable" display="UpdateTable"/></VFPData>
  38269. Name = "frmSearch"
  38270. PROCEDURE Init
  38271. LPARAMETERS tcString, toParentForm
  38272.     This.Icon = _goHelper.cFormIcon
  38273. CATCH
  38274. ENDTRY
  38275.     WITH _goHelper
  38276.         This.Caption            = .GetLoc("FIND")
  38277.         This.CmdCancel.Caption  = .GetLoc("CANCEL")
  38278.         This.CmdFind.Caption    = .GetLoc("FIND")
  38279.         This.lblString.Caption  = .GetLoc("FINDTEXT")
  38280.     ENDWITH
  38281.     This.TxtTextToFind.Value = tcString
  38282. CATCH
  38283. ENDTRY
  38284. IF (VARTYPE(toParentForm) = "O") AND toParentForm.SHOWWINDOW = 2 && as top-level form
  38285.     *-----------------------------------
  38286.     * If parent preview window is a top-level form,
  38287.     * center the child window in the view port:
  38288.     *-----------------------------------
  38289.     This.AUTOCENTER = .F.
  38290.     This.LEFT = toParentForm.VIEWPORTLEFT + INT(toParentForm.WIDTH/2  - This.WIDTH/2)
  38291.     This.TOP  = toParentForm.VIEWPORTTOP  + INT(toParentForm.HEIGHT/2 - This.HEIGHT/2)
  38292.     This.AUTOCENTER = .T.
  38293. ENDIF
  38294. ENDPROC
  38295. PROCEDURE Load
  38296. SET TALK OFF
  38297. SET CONSOLE OFF 
  38298. ENDPROC
  38299. _GOHELPER
  38300. _CTEXTTOFIND
  38301. THISFORM
  38302. RELEASE
  38303. Click,
  38304. _GOHELPER
  38305. _CTEXTTOFIND
  38306. THISFORM
  38307. TXTTEXTTOFIND
  38308. VALUE
  38309. RELEASE
  38310. Click,
  38311. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  38312. cFormat = "K"
  38313. Height = 23
  38314. Left = 99
  38315. TabIndex = 1
  38316. Top = 16
  38317. Width = 260
  38318. Name = "txtTextToFind"
  38319.     frmSearch
  38320. txtTextToFind
  38321. textbox
  38322. textbox
  38323.     frmSearch
  38324.     lblString
  38325. label
  38326. label
  38327.     frmSearch
  38328.     cmdCancel
  38329. cmdFind
  38330. V_memberdata XML Metadata for customizable properties
  38331. *updatecontrol 
  38332. *updatetable 
  38333. commandbutton
  38334. commandbutton
  38335.     frmSearch
  38336. aTop = 51
  38337. Left = 180
  38338. Height = 27
  38339. Width = 84
  38340. Caption = "Find"
  38341. TabIndex = 2
  38342. Name = "cmdFind"
  38343. nPROCEDURE Click
  38344. _goHelper._cTextToFind = ALLTRIM(Thisform.txtTextToFind.Value)
  38345. Thisform.Release()
  38346. ENDPROC
  38347. AutoSize = .T.
  38348. BackStyle = 0
  38349. Caption = "String:"
  38350. Height = 17
  38351. Left = 7
  38352. Top = 16
  38353. Width = 37
  38354. TabIndex = 4
  38355. Name = "lblString"
  38356. KPROCEDURE Click
  38357. _goHelper._cTextToFind = ""
  38358. Thisform.Release()
  38359. ENDPROC
  38360. commandbutton
  38361. commandbutton
  38362. sTop = 51
  38363. Left = 276
  38364. Height = 27
  38365. Width = 84
  38366. Cancel = .T.
  38367. Caption = "Cancel"
  38368. TabIndex = 3
  38369. Name = "cmdCancel"
  38370. CANCEL
  38371. FINDTEXT
  38372. TCSTRING
  38373. TOPARENTFORM
  38374. ICON    
  38375. _GOHELPER    
  38376. CFORMICON
  38377. CAPTION
  38378. GETLOC    
  38379. CMDCANCEL
  38380. CMDFIND    
  38381. LBLSTRING
  38382. TXTTEXTTOFIND
  38383. VALUE
  38384. SHOWWINDOW
  38385. AUTOCENTER
  38386. VIEWPORTLEFT
  38387. WIDTH
  38388. VIEWPORTTOP
  38389. HEIGHT
  38390. Init,
  38391. !#!LNMRVTOTRHPH
  38392. 777WWWXXXXXXXXXXXXXXXVVVUUUTTTRRRQQQPPPNNNMMMLLLLLLKKKLLLMMMNNNPRQ]`^
  38393. SWUR\R
  38394. SWUUUU
  38395. mqpPRQ
  38396. ~~~{{{wwwtttpppllliiieeefff```
  38397. !#!LNMRVTOTRHPH
  38398. 777WWWXXXXXXXXXXXXXXXVVVUUUTTTRRRQQQPPPNNNMMMLLLLLLKKKLLLMMMNNNPRQ]`^
  38399. SWUR\R
  38400. SWUUUU
  38401. mqpPRQ
  38402. ~~~{{{wwwtttpppllliiieeefff```
  38403. !#!LNMRVTOTRHPH
  38404. 777WWWXXXXXXXXXXXXXXXVVVUUUTTTRRRQQQPPPNNNMMMLLLLLLKKKLLLMMMNNNPRQ]`^
  38405. SWUR\R
  38406. SWUUUU
  38407. mqpPRQ
  38408. ~~~{{{wwwtttpppllliiieeefff```
  38409. PLATFORM
  38410. UNIQUEID
  38411. TIMESTAMP
  38412. CLASS
  38413. CLASSLOC
  38414. BASECLASS
  38415. OBJNAME
  38416. PARENT
  38417. PROPERTIES
  38418. PROTECTED
  38419. METHODS
  38420. OBJCODE
  38421. RESERVED1
  38422. RESERVED2
  38423. RESERVED3
  38424. RESERVED4
  38425. RESERVED5
  38426. RESERVED6
  38427. RESERVED7
  38428. RESERVED8
  38429.  COMMENT Class               
  38430.  WINDOWS _1O61C2TAZ 884087372
  38431.  COMMENT RESERVED            
  38432.  WINDOWS _1NS0MG7JU1052884140
  38433.  WINDOWS _1NS0MG7JU 8790598334
  38434.  WINDOWS _1O403W86Q 883962909j
  38435.  WINDOWS _1O603XLBF 863702772G
  38436.  COMMENT RESERVED            
  38437. VERSION =   3.00
  38438. ctl32.h
  38439. ctl32_progressbarlabel
  38440. ctl32.h
  38441. uctl32_name
  38442. ctl32_version
  38443. ctl32_update^
  38444. ctl32_declares^
  38445. uformatasbytes^
  38446. ctl32_init^
  38447. ctl32_bind^
  38448. ctl32_unbind^
  38449. Pixels
  38450. Class
  38451. label
  38452. ctl32_progressbarlabel
  38453. X_memberdata XML Metadata for customizable properties
  38454. buddycontrol Especifies the full name of the ctl32_ProgressBar control to bind this label to. For example: ThisForm.ctl32_ProgressBar1
  38455. labelstyle Especifies the Style used to display numbers in label text. N: Number, P: Percent, B: Bytes/KB/MB/GB
  38456. 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.
  38457. ctl32_name
  38458. ctl32_version
  38459. *ctl32_update 
  38460. *ctl32_declares 
  38461. *uformatasbytes 
  38462. *ctl32_init 
  38463. *ctl32_bind 
  38464. *ctl32_unbind 
  38465. ctl32.hV6
  38466. ctl32_progressbar
  38467. ctl32_controlhwnd^
  38468. ctl32_dwexstyle^
  38469. ctl32_lpclassname^
  38470. ctl32_dwstyle^
  38471. ctl32_hinstance^
  38472. ctl32_creating^
  38473. ctl32_name
  38474. ctl32_hmenu^
  38475. ctl32_lpparam^
  38476. ctl32_lpwindowname^
  38477. ctl32_oldstep^
  38478. ctl32_version
  38479. ctl32_proxyhwnd^
  38480. ctl32_left^
  38481. ctl32_top^
  38482. ctl32_width^
  38483. ctl32_height^
  38484. builderx
  38485. ctl32_resize^
  38486. step_assign^
  38487. minimum_assign^
  38488. maximum_assign^
  38489. marquee_assign^
  38490. visible_assign^
  38491. ctl32_destroy^
  38492. ctl32_declaredlls^
  38493. ctl32_bindevents^
  38494. ctl32_unbindevents^
  38495. marqueeanimationspeed_assign^
  38496. hwnd_access^
  38497. value_access^
  38498. value_assign^
  38499. percent_access^
  38500. smooth_assign^
  38501. backcolor_assign^
  38502. barcolor_assign^
  38503. play_assign^
  38504. scrolling_assign^
  38505. percent_assign^
  38506. max_assign^
  38507. min_assign^
  38508. hwnd_assign^
  38509. orientation_assign^
  38510. vertical_assign^
  38511. bordercolor_assign^
  38512. ctl32_setborder^
  38513. StatusBarText^
  38514. Picture^
  38515. Click^
  38516. ControlCount^
  38517. Controls^
  38518. DblClick^
  38519. ColorSource^
  38520. Drag^
  38521. DragDrop^
  38522. DragIcon^
  38523. DragMode^
  38524. DragOver^
  38525. GotFocus^
  38526. LostFocus^
  38527. MiddleClick^
  38528. MouseDown^
  38529. MouseEnter^
  38530. MouseIcon^
  38531. MouseLeave^
  38532. MouseMove^
  38533. MousePointer^
  38534. MouseUp^
  38535. MouseWheel^
  38536. OLECompleteDrag^
  38537. OLEDrag^
  38538. OLEDragDrop^
  38539. OLEDragMode^
  38540. OLEDragOver^
  38541. OLEDragPicture^
  38542. OLEDropEffects^
  38543. OLEDropHasData^
  38544. OLEDropMode^
  38545. OLEGiveFeedback^
  38546. OLESetData^
  38547. OLEStartDrag^
  38548. Objects^
  38549. RightClick^
  38550. Style^
  38551. BorderWidth^
  38552. ForeColor^
  38553. AddProperty^
  38554. ActiveControl^
  38555. Draw^
  38556. HelpContextID^
  38557. Move^
  38558. Moved^
  38559. Refresh^
  38560. ResetToDefault^
  38561. Resize^
  38562. SaveAsClass^
  38563. SetFocus^
  38564. ShowWhatsThis^
  38565. SpecialEffect^
  38566. TabStop^
  38567. ToolTipText^
  38568. WhatsThisHelpID^
  38569. WriteExpression^
  38570. WriteMethod^
  38571. Pixels
  38572. Class
  38573. control
  38574. ctl32_progressbar
  38575. AutoSize = .T.
  38576. FontName = "Tahoma"
  38577. FontSize = 8
  38578. FontStrikethru = .F.
  38579. FontUnderline = .F.
  38580. Anchor = 7
  38581. BackStyle = 0
  38582. Caption = "ctl32_ProgressBar"
  38583. Height = 96
  38584. Left = 0
  38585. Top = 18
  38586. Width = 16
  38587. ForeColor = 0,0,128
  38588. Rotation = 90
  38589. Name = "lblControlNameV"
  38590. ctl32_progressbar
  38591. lblControlNameV
  38592. label
  38593. label
  38594. ctl32_progressbar
  38595. tmrControlTimer
  38596. timer
  38597. ctl32.hV6
  38598. PROCEDURE Timer
  38599. If This.Parent.HWnd = 0 Then
  38600.     Return
  38601. Endif
  38602. This.Parent.stepit()
  38603. *This.Parent.Value = This.Parent.Value + This.Parent.Step
  38604. ENDPROC
  38605. label
  38606. timer
  38607. ctl32_progressbar
  38608. lblControlNameH
  38609. PROCEDURE ctl32_update
  38610. If Empty(This.BuddyControl)
  38611.   Return
  38612. Endif
  38613. If Type("This.LabelStyle") <> [C]
  38614.   WAIT ([LabelStyle Property must be Character: ] + Program()) WINDOW nowait
  38615.   Return
  38616. Endif
  38617. Local lcValue, lcMaximum, lcCaption
  38618. Do Case
  38619. Case This.LabelStyle = "N"    && Value
  38620.   lcValue = Transform((Evaluate(This.BuddyControl + ".Value")),"999,999,999,999")
  38621.   lcMaximum = Transform((Evaluate(This.BuddyControl + ".Maximum")),"999,999,999,999")
  38622.   lcMinimum = Transform((Evaluate(This.BuddyControl + ".Minimum")),"999,999,999,999")
  38623. Case This.LabelStyle = "P"    && Percent
  38624.   lcValue = Transform(Evaluate(This.BuddyControl + ".Percent"),"999%")
  38625.   lcMaximum = "100%"
  38626.   lcMinimum = "0%"
  38627. Case This.LabelStyle = "B"    && Bytes
  38628.   lcValue = This.uFormatAsBytes(Evaluate(This.BuddyControl + ".Value"))
  38629.   lcMaximum = This.uFormatAsBytes(Evaluate(This.BuddyControl + ".Maximum"))
  38630.   lcMinimum = This.uFormatAsBytes(Evaluate(This.BuddyControl + ".Minimum"))
  38631. Otherwise    && same as "N"
  38632.   lcValue = Transform((Evaluate(This.BuddyControl + ".Value")),"999,999,999,999")
  38633.   lcMaximum = Transform((Evaluate(This.BuddyControl + ".Maximum")),"999,999,999,999")
  38634.   lcMinimum = Transform((Evaluate(This.BuddyControl + ".Minimum")),"999,999,999,999")
  38635. Endcase
  38636. lcCaption = This.LabelCaption
  38637. lcCaption = Strtran(lcCaption ,"<<Value>>",Alltrim(lcValue),1,10,1)
  38638. lcCaption = Strtran(lcCaption ,"<<Maximum>>",Alltrim(lcMaximum),1,10,1)
  38639. lcCaption = Strtran(lcCaption ,"<<Minimum>>",Alltrim(lcMinimum),1,10,1)
  38640. This.Caption = m.lcCaption
  38641. This.Refresh
  38642. ENDPROC
  38643. PROCEDURE ctl32_declares
  38644. Local Array laDeclaredDlls(1,3)
  38645. Local lnLen
  38646. m.lnLen = Adlls(m.laDeclaredDlls)
  38647. If Ascan(m.laDeclaredDlls, "StrFormatByteSize", 1, m.lnLen , 2, 15) = 0
  38648.     Declare Integer StrFormatByteSize In shlwapi As StrFormatByteSize ;
  38649.         INTEGER qdw,;
  38650.         STRING @ pszBuf,;
  38651.         INTEGER uiBufSize
  38652. Endif
  38653. ENDPROC
  38654. PROCEDURE uformatasbytes
  38655. LPARAMETERS qdw
  38656. LOCAL pszBuf
  38657. m.pszBuf = SPACE(100)
  38658. StrFormatByteSize(m.qdw, @m.pszBuf, Len(m.pszBuf))
  38659. m.pszBuf = ALLTRIM(m.pszBuf)
  38660. * Remove chr(0)
  38661. m.pszBuf = Left(m.pszBuf,Len(m.pszBuf)-1)
  38662. RETURN ALLTRIM(m.pszBuf)
  38663. ENDPROC
  38664. PROCEDURE ctl32_init
  38665. This.Caption = ""
  38666. This.ctl32_Declares
  38667. This.ctl32_Bind
  38668. This.ctl32_Update
  38669. ENDPROC
  38670. PROCEDURE ctl32_bind
  38671. If Not Empty(This.BuddyControl) Then
  38672.   If Type(This.BuddyControl) = [U] Then
  38673.     This.BuddyControl = [ThisForm.] + This.BuddyControl
  38674.   Endif
  38675.   Bindevent(Evaluate(This.BuddyControl),"VALUE",This,"CTL32_UPDATE",1)
  38676. Endif
  38677. ENDPROC
  38678. PROCEDURE ctl32_unbind
  38679. If Not Empty(This.BuddyControl) Then
  38680.   Unbindevent(Evaluate(This.BuddyControl),"VALUE",This,"CTL32_UPDATE")
  38681. Endif
  38682. ENDPROC
  38683. PROCEDURE Init
  38684. This.ctl32_Init
  38685. ENDPROC
  38686. PROCEDURE Destroy
  38687. This.ctl32_Unbind
  38688. ENDPROC
  38689. (FontName = "Tahoma"
  38690. FontSize = 8
  38691. Alignment = 1
  38692. BorderStyle = 0
  38693. Caption = "ctl32_ProgressBar_Label"
  38694. Height = 16
  38695. Width = 300
  38696. _memberdata = 
  38697. buddycontrol = 
  38698. labelstyle = N
  38699. labelcaption = <<Value>>
  38700. ctl32_name = ctl32_ProgressBarLabel
  38701. ctl32_version = 1.1
  38702. Name = "ctl32_progressbarlabel"
  38703. PARENT
  38704. STEPIT
  38705. Timer,
  38706. gTop = 0
  38707. Left = -25
  38708. Height = 23
  38709. Width = 23
  38710. Enabled = .F.
  38711. Interval = 100
  38712. Name = "tmrControlTimer"
  38713. FontName = "Tahoma"
  38714. FontSize = 8
  38715. FontStrikethru = .F.
  38716. FontUnderline = .F.
  38717. Anchor = 7
  38718. BackStyle = 0
  38719. Caption = "ctl32_ProgressBar"
  38720. Height = 15
  38721. Left = 6
  38722. Top = 1
  38723. Width = 89
  38724. ForeColor = 0,0,128
  38725. Name = "lblControlNameH"
  38726. label
  38727. label
  38728. ctl32_controlhwnd CreateWindowEx return value.
  38729. ctl32_dwexstyle CreateWindowEx parameter.
  38730. ctl32_lpclassname CreateWindowEx parameter.
  38731. ctl32_dwstyle CreateWindowEx parameter.
  38732. ctl32_hosthwnd CreateWindowEx parameter.
  38733. ctl32_hinstance CreateWindowEx parameter.
  38734. ctl32_creating
  38735. minimum Specifies the lower limit of the value property. Must be a positive or negative number smaller than Maximum
  38736. maximum Specifies the upper limit of the value property. Must be a positive or negative number larger than minimum.
  38737. vertical Specifies if the progressbar is vertical or horizontal.
  38738. _memberdata XML Metadata for customizable properties
  38739. step Determines the value to use in the stepit method. Can be a positive or negative value.
  38740. 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.
  38741. ctl32_name Name of the control class
  38742. marqueeanimationspeed Specifies the speed of the marquee bar, in milliseconds.
  38743. hwnd Specifies the Window handle of the Control.
  38744. value Specifies the current value of the control.
  38745. percent Specifies the percent of the value property relative to the total of maximum - minimum. 
  38746. repeat Specifies if the controls rolls over to minimum when value reaches maximum. Use it with Play to display a self updating progressbar.
  38747. smooth Specifies if the progressbar is shown using segments, or using a continuous bar.
  38748. parenthwnd Especifies the handle of the parent window of the control.
  38749. ctl32_hmenu CreateWindowEx parameter.
  38750. ctl32_lpparam CreateWindowEx parameter.
  38751. ctl32_lpwindowname CreateWindowEx parameter.
  38752. 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.
  38753. play When True, fires the StepIt method every 100 milliseconds. To set the speed, change the value of the step property.
  38754. max For compatibility only. Use Maximum property instead.
  38755. min For compatibility only. Use Minimum property instead.
  38756. scrolling For compatibility only. Use Smooth property instead.
  38757. orientation For compatibility only. Use Vertical  property instead. 0: Horizontal, 1:Vertical
  38758. ctl32_oldstep Saves old Step value when the StepIt method is called with a parameter.
  38759. 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.
  38760. themes Not Used
  38761. ctl32_version
  38762. ctl32_proxyhwnd Static window hwnd
  38763. flat Especifies if the flat style is active.
  38764. ctl32_left
  38765. ctl32_top
  38766. ctl32_width
  38767. ctl32_height
  38768. builderx
  38769. ctl32_flat
  38770. ctl32_backcolor
  38771. border
  38772. ctl32_formtype
  38773. ctl32_hwndparent
  38774. text Text string used to generate the caption. Check Help File
  38775. caption The Caption gets generated based on the string stored in the Text property
  38776. ctl32_oldproc
  38777. ctl32_pbproc
  38778. righttoleft Specifies if the control should draw right to left.
  38779. marqueespeed
  38780. *ctl32_resize Bound to Form.Resize
  38781. *step_assign 
  38782. *minimum_assign 
  38783. *maximum_assign 
  38784. *marquee_assign 
  38785. *visible_assign 
  38786. *ctl32_create 
  38787. *ctl32_destroy 
  38788. *ctl32_declaredlls DLL declarations.
  38789. *ctl32_bindevents Binds events.
  38790. *ctl32_unbindevents 
  38791. *marqueeanimationspeed_assign 
  38792. *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.
  38793. *hwnd_access 
  38794. *value_access 
  38795. *value_assign 
  38796. *percent_access 
  38797. *smooth_assign 
  38798. *backcolor_assign 
  38799. *barcolor_assign 
  38800. *play_assign 
  38801. *scrolling_assign 
  38802. *percent_assign 
  38803. *max_assign 
  38804. *min_assign 
  38805. *hwnd_assign 
  38806. *reset Resets the Value property to the Minimum value.
  38807. *orientation_assign 
  38808. *vertical_assign 
  38809. *bordercolor_assign 
  38810. *repeat_assign 
  38811. *width_assign 
  38812. *height_assign 
  38813. *uisxp 
  38814. *themes_assign 
  38815. *flat_assign 
  38816. *border_assign 
  38817. *ctl32_settheme 
  38818. *ctl32_setborder 
  38819. *ctl32_createcaption 
  38820. *uformatasbytes 
  38821. *ustrtolong 
  38822. *ctl32_wm_paint 
  38823. *ctl32_setflat 
  38824. *righttoleft_assign 
  38825. *ctl32_setrighttoleft 
  38826. *marqueespeed_access 
  38827. *marqueespeed_assign 
  38828. CTL32_CREATING
  38829. CTL32_CONTROLHWND
  38830. CTL32_LEFT
  38831. LEFT    
  38832. CTL32_TOP
  38833. CTL32_WIDTH
  38834. WIDTH
  38835. CTL32_HEIGHT
  38836. HEIGHT
  38837. SETWINDOWPOS
  38838. m.vNewValb
  38839. Parameter must be Numeric: Ct
  38840. VNEWVAL
  38841. CTL32_CONTROLHWND
  38842. SENDMESSAGEN
  38843. m.vNewValb
  38844. Parameter must be Numeric: Ct
  38845. VNEWVAL
  38846. MINIMUM
  38847. VALUE
  38848. CTL32_CONTROLHWND
  38849. SENDMESSAGEN
  38850. MAXIMUM
  38851. m.vNewValb
  38852. Parameter must be Numeric: Ct
  38853. VNEWVAL
  38854. MAXIMUM
  38855. VALUE
  38856. CTL32_CONTROLHWND
  38857. SENDMESSAGEN
  38858. MINIMUM
  38859. m.vNewValb
  38860. m.vNewValb
  38861. Parameter must be Logical: Ct
  38862. VNEWVAL
  38863. MARQUEE
  38864. CTL32_CONTROLHWND
  38865. CTL32_DESTROY
  38866. CTL32_CREATEN
  38867. m.vNewValb
  38868. m.vNewValb
  38869. Parameter must be Logical: Ct
  38870. VNEWVAL
  38871. VISIBLE
  38872. CTL32_CONTROLHWND
  38873. _SHOWWINDOW
  38874. CTL32_PROXYHWND
  38875. msctls_progress32
  38876. Error Creating window 
  38877.  Host:
  38878. CTL32_CREATING
  38879. CTL32_DWEXSTYLE
  38880. CTL32_LPCLASSNAME
  38881. CTL32_LPWINDOWNAME
  38882. CTL32_DWSTYLE
  38883. CTL32_HWNDPARENT
  38884. CTL32_HOSTHWND
  38885. CTL32_LEFT
  38886. LEFT    
  38887. CTL32_TOP
  38888. CTL32_WIDTH
  38889. WIDTH
  38890. CTL32_HEIGHT
  38891. HEIGHT
  38892. MARQUEE
  38893. SMOOTH
  38894. VERTICAL
  38895. ORIENTATION
  38896. CTL32_HMENU
  38897. CTL32_HINSTANCE
  38898. GETWINDOWLONG
  38899. CTL32_LPPARAM
  38900. CTL32_CONTROLHWND
  38901. CREATEWINDOWEX
  38902. CTL32_NAME
  38903. CTL32_BINDEVENTS
  38904. CTL32_SETTHEME
  38905. MINIMUM
  38906. MAXIMUM
  38907. VALUE
  38908. CTL32_SETBORDER
  38909. MARQUEEANIMATIONSPEED
  38910. PLAY    
  38911. BACKCOLOR
  38912. BARCOLOR
  38913. VISIBLES
  38914. CTL32_CONTROLHWND
  38915. DESTROYWINDOW
  38916. CTL32_PROXYHWND
  38917. CallWindowProc
  38918. CallWindowProc
  38919. win32apiQ
  38920. CallWindowProc
  38921. CreateWindowEx
  38922. CreateWindowEx
  38923. win32apiQ
  38924. CreateWindowEx
  38925. DestroyWindow
  38926. DestroyWindow
  38927. win32apiQ
  38928. DestroyWindow
  38929. GetClientRect
  38930. GetClientRect
  38931. win32apiQ
  38932. GetClientRect
  38933. GetWindow
  38934. GetWindow
  38935. user32Q
  38936. GetWindow
  38937. GetWindowLong
  38938. GetWindowLong
  38939. win32apiQ
  38940. GetWindowLong
  38941. IsThemeActive
  38942. IsThemeActive
  38943. uxtheme.DllQ
  38944. IsThemeActive
  38945. SendMessageC
  38946. SendMessage
  38947. win32apiQ
  38948. SendMessageC
  38949. SendMessageN
  38950. SendMessage
  38951. win32apiQ
  38952. SendMessageN
  38953. SetWindowLong
  38954. SetWindowLong
  38955. win32apiQ
  38956. SetWindowLong
  38957. SetWindowPos
  38958. SetWindowPos
  38959. win32apiQ
  38960. SetWindowPos
  38961. SetWindowTheme
  38962. SetWindowTheme
  38963. UxThemeQ
  38964. SetWindowTheme
  38965. ShowWindow
  38966. ShowWindow
  38967. win32apiQ
  38968. ShowWindow
  38969. _ShowWindow
  38970. ShowWindow
  38971. win32apiQ
  38972. _ShowWindow
  38973. StrFormatByteSize
  38974. StrFormatByteSize
  38975. shlwapiQ
  38976. StrFormatByteSize
  38977. LADECLAREDDLLS
  38978. LNLEN
  38979. CALLWINDOWPROC
  38980. WIN32API
  38981. CREATEWINDOWEX
  38982. DESTROYWINDOW
  38983. GETCLIENTRECT    
  38984. GETWINDOW
  38985. USER32
  38986. GETWINDOWLONG
  38987. ISTHEMEACTIVE
  38988. UXTHEME
  38989. SENDMESSAGE
  38990. SENDMESSAGEC
  38991. SENDMESSAGEN
  38992. SETWINDOWLONG
  38993. SETWINDOWPOS
  38994. SETWINDOWTHEME
  38995. SHOWWINDOW
  38996. _SHOWWINDOW
  38997. STRFORMATBYTESIZE
  38998. SHLWAPI
  38999. Resize
  39000. ctl32_Resize
  39001. ctl32_Resize
  39002. ctl32_Resize
  39003. Value
  39004. ctl32_CreateCaption
  39005. RESIZE
  39006. CTL32_RESIZE
  39007. CTL32_RESIZE
  39008. CTL32_RESIZE
  39009. CTL32_CONTROLHWND
  39010. m.vNewValb
  39011. Parameter must be Numeric: Ct
  39012. VNEWVAL
  39013. MARQUEEANIMATIONSPEED
  39014. CTL32_CONTROLHWND
  39015. SENDMESSAGEN~
  39016. m.lnValb
  39017. LNVAL    
  39018. LNOLDSTEP
  39019. REPEAT
  39020. VALUE
  39021. MAXIMUM
  39022. MINIMUM
  39023. CTL32_OLDSTEP
  39024. CTL32_CONTROLHWND
  39025. CTL32_CONTROLHWNDs
  39026. NVALUE
  39027. CTL32_CREATING
  39028. CTL32_CONTROLHWND
  39029. VALUE
  39030. SENDMESSAGENU
  39031. m.vNewValb
  39032. Parameter must be Numeric: Ct
  39033. VNEWVAL
  39034. REPEAT
  39035. MAXIMUM
  39036. MINIMUM
  39037. VALUE
  39038. CTL32_CONTROLHWND
  39039. SENDMESSAGEN.
  39040. VALUE
  39041. MINIMUM
  39042. MAXIMUM
  39043. m.vNewValb
  39044. m.vNewValb
  39045. Parameter must be Logical: Ct
  39046. VNEWVAL
  39047. SMOOTH
  39048. CTL32_CONTROLHWND
  39049. CTL32_DESTROY
  39050. CTL32_CREATE,
  39051. m.vNewValb
  39052. Parameter for BackColor must be Numeric
  39053. VNEWVAL
  39054. CTL32_BACKCOLOR    
  39055. BACKCOLOR
  39056. CTL32_CONTROLHWND
  39057. SENDMESSAGEN
  39058. m.vNewValb
  39059. Parameter for BarColor must be Numeric
  39060. VNEWVAL
  39061. BARCOLOR
  39062. CTL32_CONTROLHWND
  39063. SENDMESSAGEN,
  39064. m.vNewValb
  39065. m.vNewValb
  39066. Parameter must be Logical: Ct
  39067. VNEWVAL
  39068. MARQUEE
  39069. VALUE
  39070. MINIMUM
  39071. TMRCONTROLTIMER
  39072. ENABLED
  39073. m.vNewValb
  39074. Parameter must be Numeric: Ct
  39075. VNEWVAL
  39076. SROLLING    
  39077. SCROLLING
  39078. SMOOTH
  39079. VNEWVAL
  39080. m.vNewValb
  39081. Parameter must be Numeric: Ct
  39082. VNEWVAL
  39083. MAXIMUM
  39084. m.vNewValb
  39085. Parameter must be Numeric: Ct
  39086. VNEWVAL
  39087. MINIMUM
  39088. VNEWVAL
  39089. VALUE
  39090. MINIMUM
  39091. m.vNewValb
  39092. Parameter must be Numeric: Ct
  39093. VNEWVAL
  39094. ORIENTATION
  39095. VERTICAL8
  39096. m.vNewValb
  39097. m.vNewValb
  39098. Parameter must be Logical: Ct
  39099. VNEWVAL
  39100. VERTICAL
  39101. ORIENTATION
  39102. CTL32_CONTROLHWND
  39103. CTL32_DESTROY
  39104. CTL32_CREATEL
  39105. VNEWVAL
  39106. BORDERCOLOR
  39107. m.vNewValb
  39108. m.vNewValb
  39109. Parameter must be Logical: Ct
  39110. VNEWVAL
  39111. REPEAT
  39112. VNEWVAL
  39113. WIDTH
  39114. SIZEADJUST
  39115. ORIENTATION
  39116. VERTICAL
  39117. VNEWVAL
  39118. HEIGHT
  39119. SIZEADJUST
  39120. ORIENTATION
  39121. VERTICALJ
  39122. m.vNewValb
  39123. m.vNewValb
  39124. Parameter must be Logical: Ct
  39125. VNEWVAL
  39126. THEMES
  39127. CTL32_SETTHEME)
  39128. VNEWVAL
  39129. CTL32_SETFLATC
  39130. VNEWVAL
  39131. BORDER
  39132. CTL32_CREATING
  39133. CTL32_SETBORDER
  39134. CTL32_CONTROLHWND
  39135. LLTHEMES
  39136. UISXP
  39137. ISTHEMEACTIVE
  39138. THEMES
  39139. THISFORM
  39140. SETWINDOWTHEME
  39141. CTL32_SETFLAT?
  39142. LNEXSTYLE
  39143. LLTHEMES
  39144. UISXP
  39145. ISTHEMEACTIVE
  39146. THEMES
  39147. THISFORM
  39148. BORDER
  39149. GETWINDOWLONG
  39150. CTL32_CONTROLHWND
  39151. SETWINDOWLONG
  39152. SETWINDOWPOS2
  39153. 999,999,999,999_
  39154. 999,999,999,999_
  39155. 999,999,999,999_
  39156. 999%_
  39157. <<ValueB>>C
  39158. <<ValueN>>C
  39159. <<ValueP>>C
  39160. <<MaximumB>>C
  39161. <<MaximumN>>C
  39162. <<MaximumP>>C
  39163. <<MinimumB>>C
  39164. <<MinimumN>>C
  39165. <<MinimumP>>C
  39166. CAPTION
  39167. LCBVAL
  39168. LCNVAL
  39169. LCPVAL
  39170. LCBMAX
  39171. LCNMAX
  39172. LCPMAX
  39173. LCBMIN
  39174. LCNMIN
  39175. LCPMIN    
  39176. LCCAPTION
  39177. VALUE
  39178. MAXIMUM
  39179. MINIMUM
  39180. PERCENT
  39181. UFORMATASBYTES
  39182. PSZBUF
  39183. STRFORMATBYTESIZE
  39184. INTEGER
  39185. TCLONGSTR
  39186. LNRETVAL
  39187. INTEGER
  39188. INTEGER
  39189. INTEGER
  39190. INTEGER
  39191. TNHWND
  39192. TNMSG
  39193. TNWPARAM
  39194. TNLPARAM
  39195. LNRESULT
  39196. CALLWINDOWPROC
  39197. CTL32_OLDPROC[
  39198. CTL32_CONTROLHWND    
  39199. LNEXSTYLE
  39200. LLTHEMES
  39201. UISXP
  39202. ISTHEMEACTIVE
  39203. THEMES
  39204. THISFORM
  39205. GETWINDOWLONG
  39206. SETWINDOWLONG
  39207. SETWINDOWPOS
  39208. m.vNewValb
  39209. m.vNewValb
  39210. Parameter must be Logical: Ct
  39211. VNEWVAL    
  39212. LNEXSTYLE
  39213. RIGHTTOLEFT
  39214. CTL32_SETRIGHTTOLEFT
  39215. RIGHTTOLEFT    
  39216. LNEXSTYLE
  39217. GETWINDOWLONG
  39218. CTL32_CONTROLHWND
  39219. SETWINDOWLONG
  39220. MARQUEEANIMATIONSPEED.
  39221. VNEWVAL
  39222. MARQUEESPEED
  39223. MARQUEEANIMATIONSPEED
  39224. CTL32_DESTROY
  39225. ThisFormb
  39226. USAGE: _Screen.Newobject("oProgressBar","ctl32_progressbar","ctl32_progressbar.vcx")
  39227. TNPARENTHWND
  39228. LBLCONTROLNAMEH
  39229. CAPTION
  39230. LBLCONTROLNAMEV    
  39231. BACKSTYLE
  39232. CTL32_DECLAREDLLS
  39233. CTL32_OLDPROC
  39234. GETWINDOWLONG
  39235. CTL32_FORMTYPE
  39236. THISFORM
  39237. SHOWWINDOW
  39238. CTL32_HOSTHWND
  39239. CTL32_DESTROY    
  39240. GETWINDOW
  39241. PARENT    
  39242. BASECLASS
  39243. SIZEADJUST
  39244. ORIENTATION
  39245. VERTICAL
  39246. HEIGHT
  39247. WIDTH
  39248. CTL32_CREATE
  39249. ctl32_resize,
  39250. step_assignO
  39251. minimum_assign0
  39252. maximum_assignl
  39253. marquee_assign
  39254. visible_assign
  39255. ctl32_create
  39256. ctl32_destroy
  39257. ctl32_declaredlls
  39258. ctl32_bindeventsf
  39259. ctl32_unbindevents
  39260. marqueeanimationspeed_assign
  39261. stepit
  39262. hwnd_access
  39263. value_access
  39264. value_assign
  39265. percent_access0
  39266. smooth_assign
  39267. backcolor_assign
  39268. barcolor_assign`
  39269. play_assign
  39270. scrolling_assign/"
  39271. percent_assign    #
  39272. max_assign$#
  39273. min_assign
  39274. hwnd_assignf$
  39275. reset
  39276. orientation_assign
  39277. vertical_assign
  39278. bordercolor_assign
  39279. repeat_assign
  39280. width_assignf(
  39281. height_assign))
  39282. uisxp
  39283. themes_assignA*
  39284. flat_assignA+
  39285. border_assign
  39286. ctl32_settheme
  39287. ctl32_setborderH-
  39288. ctl32_createcaption
  39289. uformatasbytes
  39290. ustrtolong
  39291. ctl32_wm_paint
  39292. ctl32_setflat
  39293. righttoleft_assignt7
  39294. ctl32_setrighttoleft
  39295. marqueespeed_access
  39296. marqueespeed_assign
  39297. DestroyE:
  39298. Initn:
  39299. PROCEDURE ctl32_resize
  39300. *!* If we are in the Control Init Stage, or
  39301. *!* we do not have a handle to the Control yet, just return:
  39302. If This.ctl32_Creating = TRUE Or This.ctl32_ControlHwnd = 0 Then
  39303.   Return
  39304. Endif
  39305. *!* Else, resize the Control Window to its container size:
  39306. With This
  39307.     .ctl32_Left = .Left
  39308.     .ctl32_Top = .Top
  39309.     .ctl32_Width = .Width
  39310.     .ctl32_Height = .Height
  39311.   SetWindowPos(.ctl32_ControlHwnd, 0,;
  39312.     .ctl32_Left, ;
  39313.     .ctl32_Top, ;
  39314.     .ctl32_Width, ;
  39315.     .ctl32_Height, ;
  39316.     SWP_NOZORDER)
  39317. Endwith
  39318. ENDPROC
  39319. PROCEDURE step_assign
  39320. Lparameters vNewVal
  39321. If Type("m.vNewVal") <> [N]
  39322.     Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39323.     Return
  39324. Endif
  39325. This.Step = m.vNewVal
  39326. If This.ctl32_ControlHwnd = 0 Then
  39327.     Return
  39328. Endif
  39329. *!* Set Step Value
  39330. SendMessageN(This.ctl32_ControlHwnd, PBM_SETSTEP , This.Step, 0)
  39331. ENDPROC
  39332. PROCEDURE minimum_assign
  39333. Lparameters vNewVal
  39334. If Type("m.vNewVal") <> [N]
  39335.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39336.   Return
  39337. Endif
  39338. This.Minimum = m.vNewVal
  39339. This.Min = m.vNewVal
  39340. *!* If actual Value is less than new Minimum, set value to new Minimum
  39341. If This.Value < This.Minimum Then
  39342.   This.Value =  This.Minimum
  39343. Endif
  39344. If This.ctl32_ControlHwnd = 0 Then
  39345.     Return
  39346. Endif
  39347. *!* Set Minimum and Maximum values:
  39348. SendMessageN(This.ctl32_ControlHwnd, PBM_SETRANGE32, This.Minimum, This.maximum)
  39349. ENDPROC
  39350. PROCEDURE maximum_assign
  39351. Lparameters vNewVal
  39352. If Type("m.vNewVal") <> [N]
  39353.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39354.   Return
  39355. Endif
  39356. This.Maximum = m.vNewVal
  39357. This.Max = m.vNewVal
  39358. *!* If actual Value is greater than new Maximum, set value to new Maximum
  39359. If This.Value > This.Maximum Then
  39360.   This.Value =  This.Maximum
  39361. Endif
  39362. If This.ctl32_ControlHwnd = 0 Then
  39363.     Return
  39364. ENDIF
  39365. *!* Set Minimum and Maximum values:
  39366. SendMessageN(This.ctl32_ControlHwnd, PBM_SETRANGE32, This.Minimum, This.Maximum)
  39367. ENDPROC
  39368. PROCEDURE marquee_assign
  39369. Lparameters vNewVal
  39370. If Type("m.vNewVal") = [N] Then
  39371.   If m.vNewVal = 0 Then
  39372.     m.vNewVal = FALSE
  39373.   Else
  39374.     m.vNewVal = TRUE
  39375.   Endif
  39376. ENDIF
  39377. If Type("m.vNewVal") <> [L] Then
  39378.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  39379.   Return
  39380. Endif
  39381. This.Marquee = m.vNewVal
  39382. If This.Marquee = TRUE Then
  39383.   This.Play = FALSE
  39384. Endif
  39385. *!* Marquee change needs to recreate Control
  39386. If This.ctl32_ControlHwnd <> 0 Then
  39387.   This.ctl32_Destroy()
  39388.   This.ctl32_Create()
  39389. Endif
  39390. ENDPROC
  39391. PROCEDURE visible_assign
  39392. Lparameters vNewVal
  39393. If Type("m.vNewVal") = [N] Then
  39394.   If m.vNewVal = 0 Then
  39395.     m.vNewVal = FALSE
  39396.   Else
  39397.     m.vNewVal = TRUE
  39398.   Endif
  39399. ENDIF
  39400. If Type("m.vNewVal") <> [L] Then
  39401.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  39402.   Return
  39403. Endif
  39404. This.Visible = m.vNewVal
  39405. If This.ctl32_ControlHwnd = 0 Then
  39406.   Return
  39407. ENDIF
  39408. If This.Visible  = TRUE Then
  39409.   _ShowWindow(This.ctl32_ProxyHwnd, SW_SHOWNA)
  39410.   _ShowWindow(This.ctl32_ControlHwnd, SW_SHOWNA)
  39411.   _ShowWindow(This.ctl32_ProxyHwnd, SW_HIDE)
  39412.   _ShowWindow(This.ctl32_ControlHwnd, SW_HIDE)
  39413. Endif
  39414. ENDPROC
  39415. PROCEDURE ctl32_create
  39416. With This
  39417.     If .ctl32_Creating Then
  39418.         Return
  39419.     Endif
  39420.     .ctl32_Creating = TRUE
  39421.     *!* Define parameters for progressbar CreateWindowEx:
  39422.     .ctl32_dwExStyle = 0
  39423.     .ctl32_lpClassName = [msctls_progress32]
  39424.     .ctl32_lpWindowName = .ctl32_lpClassName + Sys(2015)
  39425.     .ctl32_dwStyle = Bitor(WS_CHILD, WS_CLIPSIBLINGS)
  39426.     .ctl32_hWndParent = .ctl32_HostHwnd
  39427.     .ctl32_Left =  .Left
  39428.     .ctl32_Top = .Top
  39429.     .ctl32_Width = .Width
  39430.     .ctl32_Height = .Height
  39431.     *!* Setup Control specific Styles that have to be set at window creation:
  39432.     *!* Marquee
  39433.     If .Marquee = TRUE Then
  39434.         .ctl32_dwStyle = Bitor(.ctl32_dwStyle, PBS_MARQUEE)
  39435.     Endif
  39436.     *!* Smooth
  39437.     If .Smooth = TRUE
  39438.         .ctl32_dwStyle = Bitor(.ctl32_dwStyle, PBS_SMOOTH)
  39439.     Endif
  39440.     *!* Orientation
  39441.     If .Vertical = TRUE Or .Orientation <> 0 Then
  39442.         .ctl32_dwStyle = Bitor(.ctl32_dwStyle, PBS_VERTICAL)
  39443.     Endif
  39444.     .ctl32_hMenu = 0
  39445.     .ctl32_hInstance = GetWindowLong(.ctl32_HostHwnd, GWL_HINSTANCE)
  39446.     .ctl32_lpParam = 0
  39447.     .ctl32_ControlHwnd = CreateWindowEx( ;
  39448.         .ctl32_dwExStyle, ;
  39449.         .ctl32_lpClassName, ;
  39450.         .ctl32_lpWindowName, ;
  39451.         .ctl32_dwStyle, ;
  39452.         .ctl32_Left, ;
  39453.         .ctl32_Top, ;
  39454.         .ctl32_Width, ;
  39455.         .ctl32_Height, ;
  39456.         .ctl32_hWndParent,  ;
  39457.         .ctl32_hMenu, ;
  39458.         .ctl32_hInstance, ;
  39459.         .ctl32_lpParam)
  39460.     *!* If the handle to the Control is 0 then we have a problem!
  39461.     If .ctl32_ControlHwnd = 0
  39462.         Messagebox([Error Creating window ] + .ctl32_lpClassName + [ Host:] + Transform(.ctl32_HostHwnd), 0 + 16, .ctl32_Name)
  39463.     Endif
  39464.     .ctl32_BindEvents()
  39465.     *!* Send Theme message to control:
  39466.     .ctl32_SetTheme()
  39467.     *!* Set Control Minimum and Maximum values:
  39468.     .Min = .Minimum
  39469.     .Max = .Maximum
  39470.     *!* Set Control Step Value
  39471.     .Step = .Step
  39472.     *!* Set Control Value to the Container Value property
  39473.     .Value = .Value
  39474.     *!* .ctl32_SetFlat() Already called by ctl32_SetTheme()
  39475.     .ctl32_SetBorder()
  39476.     *!* Set MarqueeAnimationSpeed Value
  39477.     .MarqueeAnimationSpeed = .MarqueeAnimationSpeed
  39478.     *!* Set Play state
  39479.     .Play = .Play
  39480.     *!* Set Colors
  39481.     .BackColor = .BackColor
  39482.     .BarColor = .BarColor
  39483.     *!* Set Visible state
  39484.     .Visible = .Visible
  39485.     *!* We finish Initialization State
  39486.     .ctl32_Creating = FALSE
  39487. Endwith
  39488. ENDPROC
  39489. PROCEDURE ctl32_destroy
  39490. *!*    Destroy Windows
  39491. If This.ctl32_ControlHwnd > 0 Then
  39492.     DestroyWindow(This.ctl32_ControlHwnd)
  39493. Endif
  39494. If This.ctl32_ProxyHwnd > 0 Then
  39495.     DestroyWindow(This.ctl32_ProxyHwnd)
  39496. Endif
  39497. ENDPROC
  39498. PROCEDURE ctl32_declaredlls
  39499. *!* 20060516 Commented out all unused API declarations
  39500. Local Array laDeclaredDlls(1,3)
  39501. Local lnLen
  39502. m.lnLen = Adlls(m.laDeclaredDlls)
  39503. If Ascan(m.laDeclaredDlls, "CallWindowProc", 1, m.lnLen , 2, 15) = 0
  39504.     Declare Integer CallWindowProc In win32api As CallWindowProc;
  39505.         INTEGER lpPrevWndFunc,;
  39506.         INTEGER HWnd,;
  39507.         INTEGER msg,;
  39508.         INTEGER wParam,;
  39509.         INTEGER Lparam
  39510. Endif
  39511. *!*    If Ascan(m.laDeclaredDlls, "ChildWindowFromPoint", 1, m.lnLen , 2, 15) = 0
  39512. *!*        Declare Integer ChildWindowFromPoint In win32api ;
  39513. *!*            INTEGER hWndParent,;
  39514. *!*            INTEGER px,;
  39515. *!*            INTEGER py
  39516. *!*    Endif
  39517. If Ascan(m.laDeclaredDlls, "CreateWindowEx", 1, m.lnLen , 2, 15) = 0
  39518.     Declare Integer CreateWindowEx In win32api As CreateWindowEx;
  39519.         INTEGER dwExStyle,;
  39520.         STRING lpClassName,;
  39521.         STRING lpWindowName,;
  39522.         INTEGER dwStyle,;
  39523.         INTEGER x,;
  39524.         INTEGER Y,;
  39525.         INTEGER nWidth,;
  39526.         INTEGER nHeight,;
  39527.         INTEGER hWndParent,;
  39528.         INTEGER hMenu,;
  39529.         INTEGER hInstance,;
  39530.         INTEGER lpParam
  39531. Endif
  39532. If Ascan(m.laDeclaredDlls, "DestroyWindow", 1, m.lnLen , 2, 15) = 0
  39533.     Declare Integer DestroyWindow In win32api As DestroyWindow;
  39534.         INTEGER HWnd
  39535. Endif
  39536. If Ascan(m.laDeclaredDlls, "GetClientRect", 1, m.lnLen , 2, 15) = 0
  39537.     Declare Integer GetClientRect In win32api As GetClientRect;
  39538.         INTEGER HWnd,;
  39539.         STRING @ lpRect
  39540. Endif
  39541. *!*    If Ascan(m.laDeclaredDlls, "GetSysColor", 1, m.lnLen , 2, 15) = 0
  39542. *!*        Declare Integer GetSysColor In win32api ;
  39543. *!*            INTEGER nIndex
  39544. *!*    Endif
  39545. If Ascan(m.laDeclaredDlls, "GetWindow", 1, m.lnLen , 2, 15) = 0
  39546.     Declare Integer GetWindow In user32 As GetWindow;
  39547.         INTEGER HWnd,;
  39548.         INTEGER wCmd
  39549. Endif
  39550. If Ascan(m.laDeclaredDlls, "GetWindowLong", 1, m.lnLen , 2, 15) = 0
  39551.     Declare Integer GetWindowLong In win32api As GetWindowLong;
  39552.         INTEGER HWnd, ;
  39553.         INTEGER nIndex
  39554. Endif
  39555. If Not Val(Os(3)) + Val(Os(4))/100 < 5.01 Then
  39556.     If Ascan(m.laDeclaredDlls, "IsThemeActive", 1, m.lnLen , 2, 15) = 0
  39557.         Declare Integer IsThemeActive In uxtheme.Dll As IsThemeActive
  39558.     Endif
  39559. Endif
  39560. *!*    If Ascan(m.laDeclaredDlls, "PostMessage", 1, m.lnLen , 2, 15) = 0
  39561. *!*        Declare Integer PostMessage In win32api ;
  39562. *!*            INTEGER HWnd,;
  39563. *!*            INTEGER Msg,;
  39564. *!*            INTEGER wParam,;
  39565. *!*            INTEGER Lparam
  39566. *!*    Endif
  39567. *!*    If Ascan(m.laDeclaredDlls, "RedrawWindow", 1, m.lnLen , 2, 15) = 0
  39568. *!*        Declare Integer RedrawWindow In win32api ;
  39569. *!*            INTEGER HWnd,;
  39570. *!*            STRING @ lprcUpdate,;
  39571. *!*            INTEGER hrgnUpdate,;
  39572. *!*            INTEGER fuRedraw
  39573. *!*    Endif
  39574. If Ascan(m.laDeclaredDlls, [SendMessageC], 1, m.lnLen , 2, 15) = 0
  39575.     Declare Integer SendMessage In win32api As SendMessageC ;
  39576.         INTEGER HWnd,;
  39577.         INTEGER Msg,;
  39578.         INTEGER wParam,;
  39579.         STRING @ Lparam
  39580. ENDIF
  39581. If Ascan(m.laDeclaredDlls, "SendMessageN", 1, m.lnLen , 2, 15) = 0
  39582.     Declare Integer SendMessage In win32api As SendMessageN;
  39583.         INTEGER HWnd,;
  39584.         INTEGER Msg,;
  39585.         INTEGER wParam,;
  39586.         INTEGER Lparam
  39587. Endif
  39588. If Ascan(m.laDeclaredDlls, "SetWindowLong", 1, m.lnLen , 2, 15) = 0
  39589.     Declare Integer SetWindowLong In win32api As SetWindowLong;
  39590.         INTEGER HWnd,;
  39591.         INTEGER nIndex,;
  39592.         INTEGER dwNewLong
  39593. Endif
  39594. If Ascan(m.laDeclaredDlls, "SetWindowPos", 1, m.lnLen , 2, 15) = 0
  39595.     Declare Integer SetWindowPos In win32api As SetWindowPos;
  39596.         INTEGER HWnd,;
  39597.         INTEGER hWndInsertAfter,;
  39598.         INTEGER x,;
  39599.         INTEGER Y,;
  39600.         INTEGER cx,;
  39601.         INTEGER cy,;
  39602.         INTEGER wFlags
  39603. Endif
  39604. If Val(Os(3)) + Val(Os(4))/100 >= 5.01 Then
  39605.     If Ascan(m.laDeclaredDlls, "SetWindowTheme", 1, m.lnLen , 2, 15) = 0
  39606.         Declare Integer SetWindowTheme In UxTheme As SetWindowTheme;
  39607.             INTEGER HWnd,;
  39608.             STRING pszSubAppName,;
  39609.             STRING pszSubIdList
  39610.     Endif
  39611. Endif
  39612. *#beautify keyword_nochange
  39613. If Ascan(m.laDeclaredDlls, "ShowWindow", 1, m.lnLen , 2, 15) = 0
  39614.     Declare Integer ShowWindow In win32api As ShowWindow ;
  39615.         INTEGER Hwnd,;
  39616.         INTEGER nCmdShow
  39617. ENDIF
  39618. If Ascan(m.laDeclaredDlls, "_ShowWindow", 1, m.lnLen , 2, 15) = 0
  39619.     Declare Integer ShowWindow In win32api As _ShowWindow ;
  39620.         INTEGER Hwnd,;
  39621.         INTEGER nCmdShow
  39622. ENDIF
  39623. *#beautify
  39624. If Ascan(m.laDeclaredDlls, "StrFormatByteSize", 1, m.lnLen , 2, 15) = 0
  39625.     Declare Integer StrFormatByteSize In shlwapi As StrFormatByteSize ;
  39626.         INTEGER qdw,;
  39627.         STRING @ pszBuf,;
  39628.         INTEGER uiBufSize
  39629. Endif
  39630. ENDPROC
  39631. PROCEDURE ctl32_bindevents
  39632. Bindevent(This, [Resize], This, [ctl32_Resize], 1)
  39633. Bindevent(This, [Top],    This, [ctl32_Resize], 1)
  39634. Bindevent(This, [Left],   This, [ctl32_Resize], 1)
  39635. Bindevent(This, [Value],  This, [ctl32_CreateCaption], 1)
  39636. *!*    ?This.ctl32_Hosthwnd, This.ctl32_Controlhwnd 
  39637. *!* Bindevent(This.ctl32_Controlhwnd  , WM_PAINT, This, [ctl32_WM_Paint], 1)
  39638. ENDPROC
  39639. PROCEDURE ctl32_unbindevents
  39640. If This.ctl32_ControlHwnd = 0 Then
  39641.   Return
  39642. Endif
  39643. Unbindevent(This, [RESIZE], This, [CTL32_RESIZE])
  39644. Unbindevent(This, [TOP], This, [CTL32_RESIZE])
  39645. Unbindevent(This, [LEFT], This, [CTL32_RESIZE])
  39646. ENDPROC
  39647. PROCEDURE marqueeanimationspeed_assign
  39648. Lparameters vNewVal
  39649. If Type("m.vNewVal") <> [N]
  39650.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39651.   Return
  39652. Endif
  39653. This.MarqueeAnimationSpeed = m.vNewVal
  39654. If This.ctl32_ControlHwnd = 0 Then
  39655.     Return
  39656. ENDIF
  39657. SendMessageN(This.ctl32_ControlHwnd, PBM_SETMARQUEE, 1, This.MarqueeAnimationSpeed)
  39658. ENDPROC
  39659. PROCEDURE stepit
  39660. Lparameters lnVal
  39661. Local lnOldStep
  39662. *!* If no numeric parameter, use actual step value:
  39663. If Type("m.lnVal") <> "N"
  39664.     m.lnVal = This.Step
  39665. Endif
  39666. If This.Repeat = FALSE And This.Value + m.lnVal > This.Maximum Then
  39667.     This.Value = This.Maximum
  39668.     Return
  39669. Endif
  39670. If This.Repeat = FALSE And This.Value + m.lnVal < This.Minimum Then
  39671.     This.Value = This.Minimum
  39672.     Return
  39673. Endif
  39674. *!* If parameter is different from actual step value:
  39675. If m.lnVal <> This.Step Then
  39676.     This.ctl32_OldStep = This.Step
  39677.     This.Step = m.lnVal
  39678.     This.ctl32_OldStep = 0
  39679. Endif
  39680. If This.ctl32_ControlHwnd <> 0 Then
  39681.     *!* Send StepIt message:
  39682.     This.Value = This.Value + This.Step
  39683.     *SendMessageN(This.ctl32_ControlHwnd, PBM_STEPIT, 0, 0)
  39684. Endif
  39685. *!* Reset Step Value if old value saved:
  39686. If This.ctl32_OldStep <> 0 Then
  39687.     This.Step = This.ctl32_OldStep
  39688. Endif
  39689. *!* Update Container Value Property with the position property of Control,
  39690. *!* forcing Access and Assign Events to fire:
  39691. *!* This.Value = This.Value
  39692. ENDPROC
  39693. PROCEDURE hwnd_access
  39694. *!* Returns the HWnd of the Control
  39695. RETURN This.ctl32_ControlHwnd
  39696. ENDPROC
  39697. PROCEDURE value_access
  39698. Local nValue
  39699. *!* If setting up Control, use Value of Container, not Value of Control
  39700. If This.ctl32_Creating = TRUE OR This.ctl32_ControlHWnd = 0 Then
  39701.   m.nValue = This.Value
  39702.   *!* Ask Control for Value to return:
  39703.   m.nValue = SendMessageN(This.ctl32_ControlHwnd, PBM_GETPOS, 0, 0)
  39704. Endif
  39705. Return m.nValue
  39706. ENDPROC
  39707. PROCEDURE value_assign
  39708. Lparameters vNewVal
  39709. If Type("m.vNewVal") <> [N]
  39710.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39711.   Return
  39712. Endif
  39713. If This.Repeat = FALSE
  39714.   If m.vNewVal > This.Maximum Then
  39715.     Return
  39716.   Endif
  39717.   If m.vNewVal < This.Minimum Then
  39718.     Return
  39719.   Endif
  39720.   If m.vNewVal > This.Maximum Then
  39721.     m.vNewVal = This.Minimum
  39722.   Endif
  39723.   If m.vNewVal < This.Minimum Then
  39724.     m.vNewVal = This.Maximum
  39725.   Endif
  39726. Endif
  39727. This.Value = m.vNewVal
  39728. If This.ctl32_ControlHWnd <> 0 Then
  39729.   SendMessageN(This.ctl32_ControlHwnd, PBM_SETPOS, m.vNewVal, 0)
  39730. Endif
  39731. ENDPROC
  39732. PROCEDURE percent_access
  39733. Return Int(100 * (This.Value - This.Minimum) / (Abs(This.Maximum - This.Minimum)))
  39734. ENDPROC
  39735. PROCEDURE smooth_assign
  39736. Lparameters vNewVal
  39737. If Type("m.vNewVal") = [N] Then
  39738.     If m.vNewVal = 0 Then
  39739.         m.vNewVal = FALSE
  39740.     Else
  39741.         m.vNewVal = TRUE
  39742.     Endif
  39743. Endif
  39744. If Type("m.vNewVal") <> [L] Then
  39745.     Messagebox([Parameter must be Logical: ] + Program(), 16)
  39746.     Return
  39747. Endif
  39748. If This.Smooth = m.vNewVal Then
  39749.     Return
  39750. Endif
  39751. This.Smooth = m.vNewVal
  39752. *!* Smooth change needs to recreate Control
  39753. If This.ctl32_ControlHwnd <> 0 Then
  39754.     This.ctl32_destroy()
  39755.     This.ctl32_Create()
  39756. Endif
  39757. ENDPROC
  39758. PROCEDURE backcolor_assign
  39759. Lparameters vNewVal
  39760. If Type("m.vNewVal") <> [N]
  39761.     Messagebox([Parameter for BackColor must be Numeric])
  39762. Endif
  39763. If m.vNewVal > 16777215 Then
  39764.     m.vNewVal = -1
  39765. Endif
  39766. This.ctl32_BackColor = m.vNewVal
  39767. This.BackColor= m.vNewVal
  39768. If This.ctl32_ControlHwnd = 0 Then
  39769.     Return
  39770. Endif
  39771. If This.ctl32_BackColor = -1 Then
  39772.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBKCOLOR, 0, CLR_DEFAULT)
  39773.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBKCOLOR, 0, This.BackColor)
  39774. Endif
  39775. Return
  39776. ENDPROC
  39777. PROCEDURE barcolor_assign
  39778. Lparameters vNewVal
  39779. If Type("m.vNewVal") <> [N]
  39780.     Messagebox([Parameter for BarColor must be Numeric])
  39781. Endif
  39782. If m.vNewVal > 16777215 Then
  39783.     m.vNewVal = -1
  39784. Endif
  39785. This.BarColor = m.vNewVal
  39786. If This.ctl32_ControlHwnd = 0 Then
  39787.     Return
  39788. Endif
  39789. If This.BarColor = -1 Then
  39790.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBARCOLOR, 0, CLR_DEFAULT)
  39791.     SendMessageN(This.ctl32_ControlHwnd, PBM_SETBARCOLOR, 0, This.BarColor)
  39792. Endif
  39793. Return
  39794. ENDPROC
  39795. PROCEDURE play_assign
  39796. Lparameters vNewVal
  39797. If Type("m.vNewVal") = [N] Then
  39798.   If m.vNewVal = 0 Then
  39799.     m.vNewVal = FALSE
  39800.   Else
  39801.     m.vNewVal = TRUE
  39802.   Endif
  39803. Endif
  39804. If Type("m.vNewVal") <> [L] Then
  39805.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  39806.   Return
  39807. Endif
  39808. If m.vNewVal = TRUE And This.Marquee = TRUE Then
  39809.   Return
  39810. Endif
  39811. This.Play = m.vNewVal
  39812. If This.Play = TRUE Then
  39813.   This.Value = This.Minimum
  39814. Endif
  39815. This.tmrControlTimer.Enabled = This.Play
  39816. ENDPROC
  39817. PROCEDURE scrolling_assign
  39818. Lparameters vNewVal
  39819. If Type("m.vNewVal") <> [N]
  39820.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39821.   Return
  39822. Endif
  39823. This.Srolling = m.vNewVal
  39824. If This.Scrolling = 0 Then
  39825.   This.Smooth = FALSE
  39826.   This.Smooth = TRUE
  39827. Endif
  39828. ENDPROC
  39829. PROCEDURE percent_assign
  39830. Lparameters vNewVal
  39831. Return
  39832. ENDPROC
  39833. PROCEDURE max_assign
  39834. Lparameters vNewVal
  39835. If Type("m.vNewVal") <> [N]
  39836.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39837.   Return
  39838. Endif
  39839. This.Max = m.vNewVal
  39840. This.Maximum = m.vNewVal
  39841. ENDPROC
  39842. PROCEDURE min_assign
  39843. LPARAMETERS vNewVal
  39844. If Type("m.vNewVal") <> [N]
  39845.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39846.   Return
  39847. Endif
  39848. This.Min = m.vNewVal
  39849. This.Minimum = m.vNewVal
  39850. ENDPROC
  39851. PROCEDURE hwnd_assign
  39852. Lparameters vNewVal
  39853. Return
  39854. ENDPROC
  39855. PROCEDURE reset
  39856. This.Value = This.Minimum
  39857. ENDPROC
  39858. PROCEDURE orientation_assign
  39859. Lparameters vNewVal
  39860. If Type("m.vNewVal") <> [N]
  39861.   Messagebox([Parameter must be Numeric: ] + Program(), 16)
  39862.   Return
  39863. Endif
  39864. This.Orientation = m.vNewVal
  39865. If This.Orientation = 0 Then
  39866.   This.Vertical = FALSE
  39867.   This.Vertical = TRUE
  39868. Endif
  39869. ENDPROC
  39870. PROCEDURE vertical_assign
  39871. Lparameters vNewVal
  39872. If Type("m.vNewVal") = [N] Then
  39873.   If m.vNewVal = 0 Then
  39874.     m.vNewVal = FALSE
  39875.   Else
  39876.     m.vNewVal = TRUE
  39877.   Endif
  39878. ENDIF
  39879. If Type("m.vNewVal") <> [L] Then
  39880.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  39881.   Return
  39882. Endif
  39883. This.Vertical = m.vNewVal
  39884. If This.Vertical = TRUE Then
  39885.   This.Orientation = 1
  39886.   This.Orientation = 0
  39887. Endif
  39888. *!* Vertical change needs to recreate Control
  39889. If This.ctl32_ControlHwnd <> 0 Then
  39890.   This.ctl32_destroy()
  39891.   This.ctl32_Create()
  39892. Endif
  39893. ENDPROC
  39894. PROCEDURE bordercolor_assign
  39895. LPARAMETERS vNewVal
  39896. If m.vNewVal = -1 Then
  39897.   m.vNewVal = RGB(0,0,0)
  39898. Endif
  39899. THIS.BorderColor = m.vNewVal
  39900. ENDPROC
  39901. PROCEDURE repeat_assign
  39902. LPARAMETERS vNewVal
  39903. If Type("m.vNewVal") = [N] Then
  39904.   If m.vNewVal = 0 Then
  39905.     m.vNewVal = FALSE
  39906.   Else
  39907.     m.vNewVal = TRUE
  39908.   Endif
  39909. ENDIF
  39910. If Type("m.vNewVal") <> [L] Then
  39911.   Messagebox([Parameter must be Logical: ] + Program(), 16)
  39912.   Return
  39913. Endif
  39914. THIS.Repeat = m.vNewVal
  39915. ENDPROC
  39916. PROCEDURE width_assign
  39917. Lparameters vNewVal
  39918. *To do: Modify this routine for the Assign method
  39919. This.Width = m.vNewVal
  39920. With This
  39921.     If .SizeAdjust = TRUE Then
  39922.         If .Orientation = 0 Or .Vertical = FALSE Then
  39923.             .Width = Round((.Width - 5)/8,0) * 8 + 5
  39924.         Endif
  39925.     Endif
  39926. Endwith
  39927. ENDPROC
  39928. PROCEDURE height_assign
  39929. Lparameters vNewVal
  39930. This.Height = m.vNewVal
  39931. With This
  39932.     If .SizeAdjust = TRUE Then
  39933.         If .Orientation = 1 Or .Vertical = TRUE Then
  39934.             .Height = Round((.Height - 8)/8,0) * 8 + 5
  39935.         Endif
  39936.     Endif
  39937. Endwith
  39938. ENDPROC
  39939. PROCEDURE uisxp
  39940. *!*    Check OS Version and return TRUE if XP or greater - 5.01 is Windows XP
  39941. LOCAL lcXP
  39942. m.lcXP = IIF(Val(Os(3)) + Val(Os(4))/100 < 5.01, FALSE, TRUE)
  39943. Return m.lcXP
  39944. ENDPROC
  39945. PROCEDURE themes_assign
  39946. Lparameters vNewVal
  39947. If Type("m.vNewVal") = [N] Then
  39948.     If m.vNewVal = 0 Then
  39949.         m.vNewVal = FALSE
  39950.     Else
  39951.         m.vNewVal = TRUE
  39952.     Endif
  39953. Endif
  39954. If Type("m.vNewVal") <> [L] Then
  39955.     Messagebox([Parameter must be Logical: ] + Program(), 16)
  39956.     Return
  39957. Endif
  39958. This.Themes = m.vNewVal
  39959. This.ctl32_SetTheme()
  39960. ENDPROC
  39961. PROCEDURE flat_assign
  39962. Lparameters vNewVal
  39963. This.Flat = m.vNewVal
  39964. This.ctl32_SetFlat()
  39965. ENDPROC
  39966. PROCEDURE border_assign
  39967. Lparameters vNewVal
  39968. This.Border = m.vNewVal
  39969. If This.ctl32_Creating = TRUE Then
  39970.     Return
  39971. Endif
  39972. This.ctl32_SetBorder()
  39973. ENDPROC
  39974. PROCEDURE ctl32_settheme
  39975. If This.ctl32_ControlHwnd = 0 Then
  39976.     Return
  39977. Endif
  39978. Local llThemes
  39979. m.llThemes = This.uIsXP() And isThemeActive() = 1 And _Screen.Themes And Thisform.Themes  And This.Themes
  39980. If This.uIsXP() = TRUE
  39981.     If m.llThemes = TRUE Then
  39982.         SetWindowTheme(This.ctl32_ControlHwnd, Null, Null)
  39983.     Else
  39984.         SetWindowTheme(This.ctl32_ControlHwnd, Null, "")
  39985.         *This.ctl32_SetBackColor()
  39986.     Endif
  39987.     This.ctl32_SetFlat()
  39988. Endif
  39989. ENDPROC
  39990. PROCEDURE ctl32_setborder
  39991. Local lnExStyle
  39992. Local llThemes
  39993. m.llThemes = This.uIsXP() And isThemeActive() = 1 And _Screen.Themes And Thisform.Themes  And This.Themes
  39994. With This
  39995.     If .Border = TRUE And m.llThemes = FALSE Then
  39996.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_STYLE)
  39997.         m.lnExStyle = Bitset(m.lnExStyle, WS_BORDER_BIT)
  39998.         SetWindowLong(.ctl32_ControlHwnd, GWL_STYLE, m.lnExStyle)
  39999.     Else
  40000.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_STYLE)
  40001.         m.lnExStyle = BitClear(m.lnExStyle, WS_BORDER_BIT)
  40002.         SetWindowLong(.ctl32_ControlHwnd, GWL_STYLE, m.lnExStyle)
  40003.     Endif
  40004.     *!* Refresh control window so frame change gets redrawn
  40005.     SetWindowPos(.ctl32_ControlHwnd, ;
  40006.         HWND_TOP, ;
  40007.         0, ;
  40008.         0, ;
  40009.         0, ;
  40010.         0, ;
  40011.         BITOR(SWP_NOMOVE, SWP_NOSIZE, SWP_NOZORDER, SWP_FRAMECHANGED))
  40012. Endwith
  40013. ENDPROC
  40014. PROCEDURE ctl32_createcaption
  40015. *!* Bindevent(This, [Value],  This, [ctl32_CreateCaption], 1)
  40016. If Empty(This.Text) Then
  40017.     This.Caption = []
  40018.     Return
  40019. Endif
  40020. Local ;
  40021.     lcBVal, ;
  40022.     lcNVal, ;
  40023.     lcPVal, ;
  40024.     lcBMax, ;
  40025.     lcNMax, ;
  40026.     lcPMax, ;
  40027.     lcBMin, ;
  40028.     lcNMin, ;
  40029.     lcPMin, ;
  40030.     lcCaption
  40031. m.lcNVal = Transform(This.Value,   "999,999,999,999")
  40032. m.lcNMax = Transform(This.Maximum, "999,999,999,999")
  40033. m.lcNMin = Transform(This.Minimum, "999,999,999,999")
  40034. m.lcPVal = Transform(This.Percent, "999%")
  40035. m.lcPMax = "100%"
  40036. m.lcPMin = "0%"
  40037. m.lcBVal = This.uFormatAsBytes(This.Value)
  40038. m.lcBMax = This.uFormatAsBytes(This.Maximum)
  40039. m.lcBMin = This.uFormatAsBytes(This.Minimum)
  40040. m.lcCaption = This.Text
  40041. m.lcCaption = Strtran(m.lcCaption , "<<ValueB>>",   Alltrim(m.lcBVal), 1, 10, 1)
  40042. m.lcCaption = Strtran(m.lcCaption , "<<ValueN>>",   Alltrim(m.lcNVal), 1, 10, 1)
  40043. m.lcCaption = Strtran(m.lcCaption , "<<ValueP>>",   Alltrim(m.lcPVal), 1, 10, 1)
  40044. m.lcCaption = Strtran(m.lcCaption , "<<MaximumB>>", Alltrim(m.lcBMax), 1, 10, 1)
  40045. m.lcCaption = Strtran(m.lcCaption , "<<MaximumN>>", Alltrim(m.lcNMax), 1, 10, 1)
  40046. m.lcCaption = Strtran(m.lcCaption , "<<MaximumP>>", Alltrim(m.lcPMax), 1, 10, 1)
  40047. m.lcCaption = Strtran(m.lcCaption , "<<MinimumB>>", Alltrim(m.lcBMin), 1, 10, 1)
  40048. m.lcCaption = Strtran(m.lcCaption , "<<MinimumN>>", Alltrim(m.lcNMin), 1, 10, 1)
  40049. m.lcCaption = Strtran(m.lcCaption , "<<MinimumP>>", Alltrim(m.lcPMin), 1, 10, 1)
  40050. This.Caption = lcCaption
  40051. ENDPROC
  40052. PROCEDURE uformatasbytes
  40053. Lparameters qdw
  40054. Local pszBuf
  40055. m.pszBuf = Replicate(Chr(0), 254)
  40056. StrFormatByteSize(m.qdw, @m.pszBuf, Len(m.pszBuf))
  40057. m.pszBuf = Alltrim(m.pszBuf)
  40058. * Remove chr(0)
  40059. m.pszBuf = Left(m.pszBuf,Len(m.pszBuf)-1)
  40060. Return Alltrim(m.pszBuf)
  40061. ENDPROC
  40062. PROCEDURE ustrtolong
  40063. *!*    This function converts a four bytes long String to a Long
  40064. Lparameters tcLongStr
  40065. Local lnx, lnRetval As Integer
  40066. *!* Bug Fixed - Doru Constantin
  40067. If Version(5) >= 900 Then
  40068.     m.lnRetval = CToBin(m.tcLongStr,[4RS])
  40069.     m.lnRetval = 0
  40070.     For m.lnx = 0 To 24 Step 8
  40071.         m.lnRetval = m.lnRetval + (Asc(m.tcLongStr) * (2^m.lnx))
  40072.         m.tcLongStr = Right(m.tcLongStr, Len(m.tcLongStr) - 1)
  40073.     Next
  40074. Endif
  40075. Return m.lnRetval
  40076. ENDPROC
  40077. PROCEDURE ctl32_wm_paint
  40078. Lparameters tnHWnd As Integer, tnMsg As Integer, tnwParam As Integer, tnLparam As Integer
  40079. If tnHWnd <> _Screen.HWnd Then
  40080.     ?Transform(tnHWnd,"@0")
  40081. Endif
  40082. With This
  40083.     *!*        If tnMsg = WM_PAINT Then
  40084.     *!*            .CTL32_DrawBorder()
  40085.     *!*        Endif
  40086.     *!*    *SetWindowLong(THIS.ctl32_ControlHwnd, GWL_WNDPROC, This.ctl32_pbProc)
  40087.     m.lnResult  = CallWindowProc(This.ctl32_OldProc, tnHWnd, tnMsg, tnwParam, tnLparam)
  40088.     *!*    *SetWindowLong(THIS.ctl32_ControlHwnd, GWL_WNDPROC, This.ctl32_OldProc)
  40089.     *!*    *This.ctl32_pbProc = SetWindowLong(THIS.ctl32_ControlHwnd, GWL_WNDPROC, This.ctl32_OldProc)
  40090. Endwith
  40091. Return m.lnResult
  40092. ENDPROC
  40093. PROCEDURE ctl32_setflat
  40094. If This.ctl32_ControlHwnd = 0 Then
  40095.     Return
  40096. Endif
  40097. Local lnExStyle
  40098. Local llThemes
  40099. m.llThemes = This.uIsXP() And isThemeActive() = 1 And _Screen.Themes And Thisform.Themes  And This.Themes
  40100. With This
  40101.     If .Flat = TRUE Or m.llThemes = TRUE Then
  40102.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  40103.         m.lnExStyle = Bitclear(m.lnExStyle, WS_EX_STATICEDGE_BIT) && WS_EX_STATICEDGE
  40104.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  40105.     Else
  40106.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  40107.         m.lnExStyle = Bitset(m.lnExStyle, WS_EX_STATICEDGE_BIT)      && WS_EX_STATICEDGE
  40108.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  40109.     Endif
  40110.     *!* Refresh control window so frame change gets redrawn
  40111.     SetWindowPos(.ctl32_ControlHwnd, ;
  40112.         HWND_TOP, ;
  40113.         0, ;
  40114.         0, ;
  40115.         0, ;
  40116.         0, ;
  40117.         BITOR(SWP_NOMOVE, SWP_NOSIZE, SWP_NOZORDER, SWP_FRAMECHANGED))
  40118. Endwith
  40119. ENDPROC
  40120. PROCEDURE righttoleft_assign
  40121. Lparameters vNewVal
  40122. Local lnExStyle
  40123. If Type("m.vNewVal") = [N] Then
  40124.     If m.vNewVal = 0 Then
  40125.         m.vNewVal = FALSE
  40126.     Else
  40127.         m.vNewVal = TRUE
  40128.     Endif
  40129. Endif
  40130. If Type("m.vNewVal") <> [L] Then
  40131.     Messagebox([Parameter must be Logical: ] + Program(), 16)
  40132.     Return
  40133. Endif
  40134. This.RightToLeft = m.vNewVal
  40135. This.ctl32_SetRightToLeft()
  40136. This.ctl32_SetRightToLeft()
  40137. ENDPROC
  40138. PROCEDURE ctl32_setrighttoleft
  40139. With This
  40140.     If .RightToLeft = FALSE Then
  40141.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  40142.         m.lnExStyle = Bitclear(m.lnExStyle, WS_EX_LAYOUTRTL_BIT) && WS_EX_LAYOUTRTL
  40143.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  40144.     Else
  40145.         m.lnExStyle = GetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE)
  40146.         m.lnExStyle = Bitset(m.lnExStyle, WS_EX_LAYOUTRTL_BIT) && WS_EX_LAYOUTRTL
  40147.         SetWindowLong(.ctl32_ControlHwnd, GWL_EXSTYLE, m.lnExStyle)
  40148.     Endif
  40149. Endwith
  40150. ENDPROC
  40151. PROCEDURE marqueespeed_access
  40152. Return This.MarqueeAnimationSpeed
  40153. ENDPROC
  40154. PROCEDURE marqueespeed_assign
  40155. LPARAMETERS vNewVal
  40156. THIS.marqueespeed = m.vNewVal
  40157. This.MarqueeAnimationSpeed = m.vNewVal
  40158. ENDPROC
  40159. PROCEDURE Destroy
  40160. This.Ctl32_Destroy()
  40161. ENDPROC
  40162. PROCEDURE Init
  40163. *!*    Ctl32_ProgressBar
  40164. *!*    Control creado por Carlos Alloatti - calloatti@gmail.com
  40165. *!*    Utiliza funciones API de Windows
  40166. *!*    Probado con Windows XP, 98 y VFP 9
  40167. *!*    Versi
  40168. n  1.00 - 2005-12-01
  40169. *!*    Versi
  40170. n  2.00 - 2006-04-01
  40171. *!*    Versi
  40172. n  3.00 - 2006-05-01
  40173. *!* This parameter is passed from host ctl32 control
  40174. Lparameters tnParentHwnd
  40175. This.lblControlNameH.Caption = ""
  40176. This.lblControlNameV.Caption = ""
  40177. This.BackStyle = 0
  40178. With This
  40179.     *!* Check if object instantiated with a -1 parameter, that means no Init yet
  40180.     If Pcount() > 0 And m.tnParentHwnd = -1 Then
  40181.         Return
  40182.     Endif
  40183.     If Type([ThisForm]) <> [O] Then
  40184.         Messagebox([USAGE: _Screen.Newobject("oProgressBar","ctl32_progressbar","ctl32_progressbar.vcx")],16)
  40185.         Return
  40186.     Endif
  40187.     .ctl32_declaredlls()
  40188.     *!* Save VFP Proc
  40189.     .ctl32_OldProc = GetWindowLong(_vfp.HWnd, GWL_WNDPROC)
  40190.     *!* Determine the type of container the StaturBar is in:
  40191.     *!*    CTL32_FORMTYPE_DEFAULT              0
  40192.     *!*    CTL32_FORMTYPE_TOPLEVEL      1
  40193.     *!*    CTL32_FORMTYPE_SCREEN            2
  40194.     .ctl32_FormType = CTL32_FORMTYPE_DEFAULT
  40195.     *!*    If container is a TLF, must have ShowWindow = 2
  40196.     If Thisform.ShowWindow = SHOWWINDOW_ASTOPLEVELFORM Then
  40197.         This.ctl32_FormType = CTL32_FORMTYPE_TOPLEVEL
  40198.     Endif
  40199.     *!*    If ThisForm.Name equals the _Screen.Name, then container is _Screen
  40200.     If Thisform.Name = _Screen.Name Then
  40201.         This.ctl32_FormType = CTL32_FORMTYPE_SCREEN
  40202.     Endif
  40203.     If Pcount() > 0 Then
  40204.         .ctl32_HostHwnd = m.tnParentHwnd
  40205.         *!*    Just in case its geting recreated by a parent ctl32_statusbar
  40206.         This.ctl32_Destroy()
  40207.     Else
  40208.         If .ctl32_FormType = CTL32_FORMTYPE_TOPLEVEL Then    && TLF
  40209.             *!* Get Hwnd of client window of Top Level Form //Craig Boyd//
  40210.             If Version(5) >= 900 Then
  40211.                 .ctl32_HostHwnd = Sys(2327, Sys(2325, Sys(2326, Thisform.HWnd)))
  40212.             Else
  40213.                 .ctl32_HostHwnd = GetWindow(Thisform.HWnd, GW_CHILD)
  40214.             Endif
  40215.         Else
  40216.             .ctl32_HostHwnd = Thisform.HWnd
  40217.         Endif
  40218.     Endif
  40219.     If .Parent.BaseClass <> "Form" And .ctl32_HostHwnd = 0 Then
  40220.         Return
  40221.     Endif
  40222.     If .SizeAdjust = TRUE Then
  40223.         If .Orientation = 1 Or .Vertical = TRUE Then
  40224.             .Height = Round((.Height - 8)/8,0) * 8 + 5
  40225.         Else
  40226.             .Width = Round((.Width - 5)/8,0) * 8 + 5
  40227.         Endif
  40228.     Endif
  40229.     .ctl32_Create()
  40230. Endwith
  40231. ENDPROC
  40232. GWidth = 301
  40233. Height = 18
  40234. ForeColor = 0,0,0
  40235. ctl32_controlhwnd = 0
  40236. ctl32_dwexstyle = 0
  40237. ctl32_dwstyle = 0
  40238. ctl32_hosthwnd = 0
  40239. ctl32_hinstance = 0
  40240. minimum = 0
  40241. maximum = 100
  40242. step = 1
  40243. ctl32_name = ctl32_progressbar
  40244. marqueeanimationspeed = 100
  40245. hwnd = 0
  40246. value = 0
  40247. percent = 0
  40248. parenthwnd = 0
  40249. ctl32_hmenu = 0
  40250. ctl32_lpparam = 0
  40251. ctl32_lpwindowname = 0
  40252. barcolor = -1
  40253. max = 0
  40254. min = 0
  40255. scrolling = 0
  40256. orientation = 0
  40257. ctl32_oldstep = 0
  40258. themes = .T.
  40259. ctl32_version = 3.0
  40260. ctl32_proxyhwnd = 0
  40261. flat = .F.
  40262. ctl32_left = 0
  40263. ctl32_top = 0
  40264. ctl32_width = 0
  40265. ctl32_height = 0
  40266. builderx = (home() + "wizards\ctl32_progressbar_builder.app")
  40267. ctl32_backcolor = 0
  40268. border = .F.
  40269. ctl32_formtype = 0
  40270. ctl32_hwndparent = 0
  40271. text = 
  40272. caption = 
  40273. ctl32_oldproc = 
  40274. ctl32_pbproc = 
  40275. righttoleft = .F.
  40276. marqueespeed = 100
  40277. Name = "ctl32_progressbar"
  40278. control
  40279. This.LabelStyleb
  40280. LabelStyle Property must be Character: Ct
  40281. .Value
  40282. 999,999,999,999_
  40283. .Maximum
  40284. 999,999,999,999_
  40285. .Minimum
  40286. 999,999,999,999_
  40287. .Percent
  40288. 999%_
  40289. .Value
  40290. .Maximum
  40291. .Minimum
  40292. .Value
  40293. 999,999,999,999_
  40294. .Maximum
  40295. 999,999,999,999_
  40296. .Minimum
  40297. 999,999,999,999_
  40298. <<Value>>C
  40299. <<Maximum>>C
  40300. <<Minimum>>C
  40301. BUDDYCONTROL
  40302. LCVALUE    
  40303. LCMAXIMUM    
  40304. LCCAPTION
  40305. LABELSTYLE    
  40306. LCMINIMUM
  40307. UFORMATASBYTES
  40308. LABELCAPTION
  40309. CAPTION
  40310. REFRESH
  40311. StrFormatByteSize
  40312. StrFormatByteSize
  40313. shlwapiQ
  40314. StrFormatByteSize
  40315. LADECLAREDDLLS
  40316. LNLEN
  40317. STRFORMATBYTESIZE
  40318. SHLWAPI}
  40319. PSZBUF
  40320. STRFORMATBYTESIZE1
  40321. CAPTION
  40322. CTL32_DECLARES
  40323. CTL32_BIND
  40324. CTL32_UPDATE
  40325. ThisForm.
  40326. VALUE
  40327. CTL32_UPDATE
  40328. BUDDYCONTROLE
  40329. VALUE
  40330. CTL32_UPDATE
  40331. BUDDYCONTROL
  40332. CTL32_INIT
  40333. CTL32_UNBIND
  40334. ctl32_update,
  40335. ctl32_declares
  40336. uformatasbytes
  40337. ctl32_init
  40338. ctl32_bind
  40339. ctl32_unbind
  40340. Init    
  40341. Destroy,
  40342. TALKv
  40343. ClsCPZero
  40344. SET TALK &mtalk
  40345. FNAME
  40346. CPBYTE
  40347. MTALK
  40348. SET_CPW
  40349. error_array[C
  40350. The table could not be opened.
  40351. Invalid code page specified.
  40352. Not a FoxPro table.
  40353. cpnums[C
  40354. ADDPROPERTY
  40355. ERROR_ARRAY
  40356. CPNUMS
  40357. DBF|SCX|VCX|FRX|LBX|MNX
  40358. Table:
  40359. FNAME
  40360. CPBYTE
  40361. FP_IN
  40362. FOUND_ONE
  40363. OUTBYTE
  40364. CPNUMS
  40365. ERRORMSG
  40366. ERROR_ARRAY
  40367. INIT0
  40368. SET_CP
  40369. DESTROY
  40370. errormsg
  40371. MOLDTALK    
  40372. ClsCPZero
  40373. session
  40374. PLATFORM
  40375. UNIQUEID
  40376. TIMESTAMP
  40377. CLASS
  40378. CLASSLOC
  40379. BASECLASS
  40380. OBJNAME
  40381. PARENT
  40382. PROPERTIES
  40383. PROTECTED
  40384. METHODS
  40385. OBJCODE
  40386. RESERVED1
  40387. RESERVED2
  40388. RESERVED3
  40389. RESERVED4
  40390. RESERVED5
  40391. RESERVED6
  40392. RESERVED7
  40393. RESERVED8
  40394.  COMMENT Class               
  40395.  WINDOWS _1DH1108MW1027325085Z
  40396.  COMMENT RESERVED            
  40397.  WINDOWS _17X12M0M51027478705F
  40398.  WINDOWS _17X136SEA1027478705`
  40399.  WINDOWS _17X136SEQ 879329379
  40400.  WINDOWS _17X136SER1027478705U
  40401.  WINDOWS _17X136SES1027344043
  40402.  WINDOWS _17X136SET1027344043"    
  40403.  COMMENT RESERVED            
  40404.  WINDOWS _11R0TYA321027478809
  40405.  COMMENT RESERVED            
  40406.  WINDOWS _1DH112XF91061424829H
  40407.  COMMENT RESERVED            
  40408. VERSION =   3.00
  40409. pr_proofshape
  40410. Pixels
  40411. Class
  40412. shape
  40413. pr_proofshape
  40414. <pageno Provides the current page number for report output.
  40415. shape
  40416. pr_proofsheet
  40417. ;Height = 110
  40418. Width = 85
  40419. pageno = 0
  40420. Name = "proofshape"
  40421. Pixels
  40422. Class
  40423. pr_foxyhelper.vcx
  40424. "Tahoma, 0, 8, 5, 13, 11, 23, 2, 0
  40425. pr_baseform
  40426. frxpreview.h
  40427. Pixels
  40428. Class
  40429. pr_baseform
  40430. iscreendpi
  40431. *checkforlargefonts Called in the Init() to set font attributes if Large Fonts are detected.
  40432. Height = 238
  40433. Width = 367
  40434. DoCreate = .T.
  40435. AutoCenter = .T.
  40436. Caption = "Form"
  40437. FontName = "Tahoma"
  40438. FontSize = 8
  40439. Icon = 
  40440. screendpi = 96
  40441. Name = "pr_baseform"
  40442. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  40443. shape
  40444. shape
  40445. pr_gotopageform
  40446. spinner
  40447. CTahoma, 0, 8, 5, 13, 11, 23, 2, 0
  40448. Arial, 0, 9, 5, 15, 12, 32, 3, 0
  40449. pr_gotopageform
  40450. frxpreview.h
  40451. Pixels
  40452. Class
  40453. pr_baseform
  40454. pr_gotopageform
  40455. .PROCEDURE Click
  40456. THIS.Parent.Hide()
  40457. ENDPROC
  40458. pr_gotopageform
  40459.     cmdCancel
  40460. fHeight = 21
  40461. InputMask = "9999"
  40462. Left = 64
  40463. Top = 36
  40464. Width = 126
  40465. ZOrderSet = 1
  40466. Name = "spnPageno"
  40467. commandbutton
  40468. gTop = 15
  40469. Left = 12
  40470. Height = 66
  40471. Width = 224
  40472. BackStyle = 0
  40473. ZOrderSet = 0
  40474. Style = 3
  40475. Name = "Shp1"
  40476. lblCaption
  40477. pr_gotopageform
  40478. commandbutton
  40479. |pageno Provides the current page number for report output.
  40480. pagetotal Provides a PageTotal for report output.
  40481. oparentform
  40482. spinner
  40483. tTop = 47
  40484. Left = 248
  40485. Height = 27
  40486. Width = 84
  40487. Cancel = .T.
  40488. Caption = "Cancel"
  40489. ZOrderSet = 4
  40490. Name = "cmdCancel"
  40491. commandbutton
  40492. commandbutton
  40493. pr_gotopageform
  40494. cmdOK
  40495. label
  40496. pr_proofsheet
  40497. mTop = 15
  40498. Left = 248
  40499. Height = 27
  40500. Width = 84
  40501. Caption = "OK"
  40502. Default = .T.
  40503. ZOrderSet = 3
  40504. Name = "cmdOK"
  40505.     spnPageno
  40506. ]Caption = " Go to page "
  40507. Left = 20
  40508. Top = 8
  40509. ZOrderSet = 2
  40510. Style = 3
  40511. Name = "lblCaption"
  40512. pr_gotopageform
  40513. PARENT
  40514. Click,
  40515. label
  40516. 5currentpage
  40517. reportlistener
  40518. *execute 
  40519. *setreport 
  40520. `PROCEDURE Click
  40521. THIS.Parent.pageNo = THIS.Parent.spnPageNo.Value
  40522. THIS.Parent.Hide()
  40523. ENDPROC
  40524. bPROCEDURE Click
  40525. THISFORM.CurrentPage = THIS.PageNo
  40526. THISFORM.Hide()
  40527. activate screen
  40528. ENDPROC
  40529. frxpreview.h
  40530. foxpro_reporting.h
  40531. frxpreview_loc.h
  40532. PROCEDURE LostFocus
  40533. if THIS.Value < THIS.SpinnerLowValue
  40534.     THIS.Value = 1
  40535. endif
  40536. if THIS.Value > THIS.SpinnerHighValue
  40537.     THIS.Value = THIS.SpinnerHighValue
  40538. endif
  40539. dodefault()
  40540. ENDPROC
  40541. PARENT
  40542. PAGENO    
  40543. SPNPAGENO
  40544. VALUE
  40545. Click,
  40546. Top = 14
  40547. Left = 12
  40548. Height = 92
  40549. Width = 345
  40550. ShowWindow = 1
  40551. DoCreate = .T.
  40552. AutoCenter = .F.
  40553. BorderStyle = 2
  40554. Closable = .F.
  40555. MaxButton = .F.
  40556. MinButton = .F.
  40557. AlwaysOnTop = .T.
  40558. AllowOutput = .F.
  40559. pageno = 0
  40560. pagetotal = 0
  40561. oparentform = (.NULL.)
  40562. Name = "pr_gotopageform"
  40563. PROCEDURE Show
  40564. LPARAMETERS nStyle
  40565. *-----------------------------------------
  40566. * Fix for SP1: Handle positioning in top-level form
  40567. * See frxPreviewForm::ActionGoToPage()
  40568. * Addresses bug# 474691
  40569. *-----------------------------------------
  40570. THIS.pageNo    = THIS.oParentForm.currentPage
  40571. THIS.pageTotal = THIS.oParentForm.pageTotal
  40572. THIS.Caption   = DEFAULT_MBOX_TITLE_LOC
  40573. THIS.lblCaption.Caption = REPORT_PREVIEW_GOTO_PAGE_LOC + " " + "(1-" + transform(THIS.pageTotal) + ")"
  40574. if THIS.oParentForm.ShowWindow = 2 && as top-level form
  40575.     *-----------------------------------
  40576.     * If parent preview window is a top-level form,
  40577.     * center the child window in the view port:
  40578.     *-----------------------------------
  40579.     THIS.AutoCenter = .F.
  40580.     THIS.Left = THIS.oParentForm.ViewPortLeft + int(THIS.oParentForm.Width/2  - THIS.Width/2)  
  40581.     THIS.Top  = THIS.oParentForm.ViewPortTop  + int(THIS.oParentForm.Height/2 - THIS.Height/2)
  40582.     THIS.AutoCenter = .T.
  40583. endif
  40584. *--------------
  40585. THIS.spnPageNo.SpinnerLowValue = 1
  40586. THIS.spnPageNo.SpinnerHighValue = THIS.pageTotal
  40587. *THIS.spnPageNo.KeyboardLowValue = 1
  40588. *THIS.spnPageNo.KeyboardHighValue = THIS.pageTotal
  40589. THIS.spnPageNo.Value = THIS.pageNo
  40590. dodefault(m.nStyle)
  40591. ENDPROC
  40592. Height = 274
  40593. Width = 622
  40594. DoCreate = .T.
  40595. AutoCenter = .T.
  40596. Caption = "Report Proof Sheet"
  40597. currentpage = 0
  40598. reportlistener = .NULL.
  40599. Name = "pr_proofsheet"
  40600. VALUE
  40601. SPINNERLOWVALUE
  40602. SPINNERHIGHVALUE    
  40603. LostFocus,
  40604. THISFORM
  40605. CURRENTPAGE
  40606. PAGENO
  40607. Click,
  40608. frxpreview.h
  40609. foxpro_reporting.h
  40610. frxpreview_loc.h
  40611. MPROCEDURE checkforlargefonts
  40612. *====================================================================
  40613. * CheckForLargeFonts()
  40614. * This is invoked from the .Init() to set all contained objects to
  40615. * use the "large font"-safe font, "MS Shell Dlg" which maps to the 
  40616. * appropriate font in Windows.
  40617. *====================================================================
  40618. *----------------------------------------------------------------
  40619. * Initial, default font setting:
  40620. *----------------------------------------------------------------
  40621. do case 
  40622. case OS(3) = "6" or DEBUG_FORCE_SEGOE_UI
  40623.     THIS.SetAll("FontName","Segoe UI")
  40624.     THIS.SetAll("FontSize",9)
  40625.     THIS.SetAll("Margin",0,"txt")
  40626.     THIS.SetAll("Margin",0,"edt")
  40627.     THIS.SetAll("Margin",0,"Editbox")
  40628.     THIS.SetAll("Margin",0,"Textbox")
  40629. case OS(3) = "5"
  40630.     THIS.SetAll("FontName","MS Shell Dlg 2")
  40631.     THIS.SetAll("FontSize",8)
  40632. otherwise
  40633.     THIS.SetAll("FontName","Tahoma")
  40634.     THIS.SetAll("FontSize",8)
  40635. endcase
  40636. *----------------------------------------------------------------
  40637. * Optional Fontname override:
  40638. *----------------------------------------------------------------
  40639. if not empty(DIALOG_FONTNAME_OVERRIDE)
  40640.     THIS.SetAll("FontName", DIALOG_FONTNAME_OVERRIDE )
  40641.     THIS.FontName = DIALOG_FONTNAME_OVERRIDE
  40642. endif    
  40643. *----------------------------------------------------------------
  40644. * Adjustments for "large fonts":
  40645. *----------------------------------------------------------------
  40646. do case
  40647. case DIALOG_FONTSIZE_OVERRIDE > 0
  40648.     *----------------------------------------------------------------
  40649.     * We can force the use of a specific font size:
  40650.     *----------------------------------------------------------------
  40651.     this.SetAll("FontSize", DIALOG_FONTSIZE_OVERRIDE )
  40652.     this.FontSize = DIALOG_FONTSIZE_OVERRIDE 
  40653. *-----------------------
  40654. * SP1 Fix: 
  40655. *-----------------------
  40656. case DEBUG_FORCE_LARGE_FONTS or ;
  40657.      (DIALOG_ADJUST_FOR_LARGE_FONTS and THIS.screenDPI >= 120)
  40658.     *----------------------------------------------------------------
  40659.     * Use a slightly larger font in 120 dpi to match the other 
  40660.     * native VFP dialogs
  40661.     *----------------------------------------------------------------
  40662.     this.SetAll("FontSize", 10 )
  40663.     this.FontSize = 10
  40664. endcase
  40665. ENDPROC
  40666. PROCEDURE Init
  40667. *====================================================================
  40668. * Init()
  40669. * Make sure that if large fonts are in effect, to switch all controls
  40670. * to use a large-font-safe font.
  40671. *====================================================================
  40672. *---------------------------------
  40673. * SP1 - improve "large font" handling:
  40674. * Determine the screen DPI:
  40675. *---------------------------------
  40676. #define LOGPIXELSX 88
  40677. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  40678. declare integer GetDC         in WIN32API integer hWnd
  40679. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  40680. local hdc, screenDPI
  40681. hdc    = GetDC(0)
  40682. THIS.screenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX )
  40683. ReleaseDC( 0, m.hdc )
  40684. *---------------------------------
  40685. * Adjust object font sizes if necessary:
  40686. *---------------------------------
  40687. this.checkForLargeFonts()
  40688. ENDPROC
  40689. OREPORT
  40690. REPORTLISTENER
  40691. REPORTLISTENERx
  40692. ProofShape
  40693. proofsheet.vcx
  40694. NSTYLE
  40695. IROWOFFSET
  40696. ICOLOFFSET    
  40697. ICOLCOUNT
  40698. REPORTLISTENER
  40699. OUTPUTPAGECOUNT    
  40700. NEWOBJECT
  40701. OBJECTS
  40702. VISIBLE
  40703. PAGENO
  40704. HEIGHT
  40705. WIDTHh
  40706. REPORTLISTENER
  40707. OUTPUTPAGECOUNT
  40708. OUTPUTPAGE
  40709. OBJECTS
  40710. HIDE    
  40711. setreport,
  40712. Destroyk
  40713. Paint
  40714. QueryUnloadQ
  40715. FontName
  40716. Segoe UI
  40717. FontSize
  40718. Margin
  40719. Margin
  40720. Margin
  40721. Editbox
  40722. Margin
  40723. Textbox
  40724. FontName
  40725. MS Shell Dlg 2
  40726. FontSize
  40727. FontName
  40728. Tahoma
  40729. FontSize
  40730. FontName
  40731. FontSize
  40732. FontSize
  40733. SETALL
  40734. FONTNAME
  40735. FONTSIZE    
  40736. SCREENDPI
  40737. GetDeviceCaps
  40738. WIN32API
  40739. GetDC
  40740. WIN32API
  40741. ReleaseDC
  40742. WIN32API
  40743. GETDEVICECAPS
  40744. WIN32API
  40745. GETDC    
  40746. RELEASEDC
  40747. SCREENDPI
  40748. CHECKFORLARGEFONTS
  40749. checkforlargefonts,
  40750. Report Preview
  40751. Go to page number:
  40752. NSTYLE
  40753. PAGENO
  40754. OPARENTFORM
  40755. CURRENTPAGE    
  40756. PAGETOTAL
  40757. CAPTION
  40758. LBLCAPTION
  40759. SHOWWINDOW
  40760. AUTOCENTER
  40761. VIEWPORTLEFT
  40762. WIDTH
  40763. VIEWPORTTOP
  40764. HEIGHT    
  40765. SPNPAGENO
  40766. SPINNERLOWVALUE
  40767. SPINNERHIGHVALUE
  40768. VALUE
  40769. Show,
  40770. @PROCEDURE setreport
  40771. lparameters oReport
  40772. THIS.ReportListener = m.oReport
  40773. ENDPROC
  40774. PROCEDURE Destroy
  40775. THIS.ReportListener = null
  40776. ENDPROC
  40777. PROCEDURE Show
  40778. LPARAMETERS nStyle
  40779. #define SPACE_PIXELS 10
  40780. iRowOffset = SPACE_PIXELS
  40781. iColOffset = SPACE_PIXELS
  40782. iColCount  = 6
  40783. for m.i = 1 to min(36,THIS.ReportListener.OutputPageCount)
  40784.     THIS.NewObject(sys(2015),"ProofShape","proofsheet.vcx")
  40785.     THIS.Objects[m.i].Visible = .T.
  40786.     THIS.Objects[m.i].PageNo = m.i
  40787.     * Arrange shapes on form:
  40788.     THIS.Objects[m.i].Top  = iRowOffset
  40789.     THIS.Objects[m.i].Left = iColOffset
  40790.     if mod(m.i,iColCount) = 0
  40791.         iRowOffset = iRowOffset + SPACE_PIXELS + THIS.Objects[m.i].Height
  40792.         iColOffset = SPACE_PIXELS
  40793.     else
  40794.         iColOffset = iColOffset + THIS.Objects[m.i].Width + SPACE_PIXELS
  40795.     endif
  40796. endfor
  40797. dodefault(nStyle)
  40798. ENDPROC
  40799. PROCEDURE Paint
  40800. if not isnull( THIS.ReportListener )
  40801.     for m.i = 1 to min(36,THIS.ReportListener.OutputPageCount)
  40802.         THIS.ReportListener.OutputPage( m.i, THIS.Objects[m.i],2)
  40803.     endfor
  40804. endif
  40805. ENDPROC
  40806. PROCEDURE QueryUnload
  40807. THIS.Hide()
  40808. activate screen
  40809. ENDPROC
  40810. PLATFORM
  40811. UNIQUEID
  40812. TIMESTAMP
  40813. CLASS
  40814. CLASSLOC
  40815. BASECLASS
  40816. OBJNAME
  40817. PARENT
  40818. PROPERTIES
  40819. PROTECTED
  40820. METHODS
  40821. OBJCODE
  40822. RESERVED1
  40823. RESERVED2
  40824. RESERVED3
  40825. RESERVED4
  40826. RESERVED5
  40827. RESERVED6
  40828. RESERVED7
  40829. RESERVED8
  40830.  COMMENT Class               
  40831.  WINDOWS _1PC0NFKPY 877020253)
  40832.  COMMENT RESERVED            
  40833.  WINDOWS _1Q40K9H6C 877293344
  40834.  COMMENT RESERVED            
  40835.  WINDOWS _1Q20UZXVD 878213316E
  40836.  COMMENT RESERVED            
  40837.  WINDOWS _1PQ0P76WP 878213455
  40838.  COMMENT RESERVED            
  40839.  WINDOWS _14110GV5X 894986900}
  40840.  COMMENT RESERVED            
  40841.  WINDOWS _1QM0BUK5J 923837222
  40842.  COMMENT RESERVED            
  40843.  WINDOWS _2220SN8V0 924994991
  40844.  COMMENT RESERVED            
  40845.  WINDOWS _1L50OW0FK1029178301{
  40846.  WINDOWS _1L50TVYFO1029178301
  40847.  WINDOWS _1L50TX61Q1029178301
  40848.  WINDOWS _1L50UUD6E1029178301
  40849.  COMMENT RESERVED            
  40850.  WINDOWS _13T0MHHPZ1055765084
  40851.  COMMENT RESERVED            
  40852.  WINDOWS _1Q210400D1059808531H
  40853.  COMMENT RESERVED            
  40854.  WINDOWS _1L50LCL981063655944F
  40855.  COMMENT RESERVED            
  40856.  WINDOWS _13T0OHG0F1065533100U
  40857.  COMMENT RESERVED            
  40858.  WINDOWS _1530WWJY41065533134D
  40859.  COMMENT RESERVED            
  40860.  WINDOWS _13E0OB2YR1065533157
  40861.  COMMENT RESERVED            
  40862.  WINDOWS _16E19GTD61065533169j
  40863.  COMMENT RESERVED            
  40864.  WINDOWS _19G1CFR951065549836;
  40865.  COMMENT RESERVED            
  40866.  WINDOWS _39L029YY01076037228y
  40867.  COMMENT RESERVED            
  40868.  WINDOWS _31B1DMQ8L1081191826c
  40869.  COMMENT RESERVED            
  40870.  WINDOWS _1L50OW0FK1086504165
  40871.  WINDOWS _31E1B3BDT1086504166
  40872.  WINDOWS _31E1B3BEU1086504166
  40873.  COMMENT RESERVED            
  40874.  WINDOWS _3101B46YT1086831092
  40875.  COMMENT RESERVED            
  40876. VERSION =   3.00
  40877. fxabstract
  40878. Pixels
  40879. 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.
  40880. reportlisteners.h
  40881. foxpro_reporting.h
  40882. reportlisteners_locs.h
  40883. gfxoutputclip
  40884. pr_htmllistener
  40885. reportlisteners.h
  40886. reportlisteners.h
  40887. fxmemberdatascript
  40888. fxabstract
  40889. Pixels
  40890. Class
  40891. Class
  40892. ZExecutes script stored in FRX Memberdata, reading it from a cursor in the FRX datasession.
  40893. Pixels
  40894. reportlisteners.h
  40895. custom
  40896. Class
  40897. fxmemberdatascript
  40898. custom
  40899. gfxoutputclip
  40900. Pixels
  40901. PR_ReportListener.vcx
  40902. custom
  40903. _reportlistener
  40904. custom
  40905. fxabstract
  40906. o_memberdata XML Metadata for customizable properties
  40907. *applyfx Required method to implement the FX interface.
  40908. PROCEDURE applyfx
  40909. LPARAMETERS m.toListener, m.tcMethodToken,;
  40910.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  40911.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  40912.             
  40913. ENDPROC
  40914. _memberdata = <VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/></VFPData>
  40915. Name = "fxabstract"
  40916. custom
  40917. Boldpageimagetype
  40918. oldtextareasetting
  40919. getdefaultuserxsltasstring
  40920. eApplies custom specifications, tuned to HTML production, to its parent class' XML generation process.
  40921. Class
  40922. pr_xmldisplaylistener
  40923. pr_htmllistener
  40924. TOLISTENER
  40925. TCMETHODTOKEN
  40926. applyfx,
  40927. reportlistener
  40928. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  40929. fxabstract
  40930. pr_reportlistener.vcx
  40931. PR_ReportListener.vcx
  40932. fxtherm
  40933. reportlisteners.h
  40934. foxpro_reporting.h
  40935. reportlisteners_locs.h
  40936. pr_xmldisplaylistener
  40937. reportlisteners.h
  40938. reportlisteners.h
  40939. Pixels
  40940. Pixels
  40941. fxresetpagetotal
  40942. custom
  40943. Class
  40944. dFX interface-conformant object derived from form class, providing user feedback during a report run.
  40945. foxylistener
  40946. Class
  40947. Pixels
  40948. Class
  40949. Class
  40950. Pixels
  40951. Jresetcount
  40952. oldpass
  40953. dothisrun
  40954. resetalias
  40955. dobeforeband
  40956. dobeforereport
  40957. fxresetpagetotal
  40958. reportlisteners.h
  40959. dbflistener
  40960. debuglistener
  40961. foxylistener
  40962. h*drawstringjustified 
  40963. *drawstringintf 
  40964. *tfprocess 
  40965. *tfaddtoarray 
  40966. ^atfwords[1,0] 
  40967. *tfaddtooutput 
  40968. gTunes XML settings suitably for presentation output needs, and adds image-file-publishing capabilities.
  40969. pr_xmllistener
  40970. reportlisteners.h
  40971. foxpro_reporting.h
  40972. reportlisteners_locs.h
  40973. Pixels
  40974. reportlisteners.h
  40975. $targetalias
  40976. dodebugcommandclauses
  40977. Pixels
  40978. jProvides debugging output to help developers understand what happens during an object-assisted report run.
  40979. Class
  40980. Class
  40981. pr_xmldisplaylistener
  40982. dbflistener
  40983. reportlistener
  40984. pr_reportlistener.vcx
  40985. gfxnorender
  40986. reportlisteners.h
  40987. utilityreportlistener
  40988. debuglistener
  40989. reportlisteners.h
  40990. foxpro_reporting.h
  40991. reportlisteners_locs.h
  40992. ,listener
  40993. norenderdataalias
  40994. omitrendering
  40995. Pixels
  40996. pr_xmllistener
  40997. reportlisteners.h
  40998. Class
  40999. reportlistener
  41000. PR_ReportListener.vcx
  41001. Pixels
  41002. Class
  41003. Conditionally eliminates default rendering behavior for report layout controls by evaluating a ReportListener-referencing expression specified in MemberData.
  41004. cincludeloadandunload Indicates whether the debug information should include values from the LoadReport and UnloadReport events.
  41005. 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.
  41006. targetalias Holds the target alias during the processing of a detail band.
  41007. *dodebug Provides debug information for a ReportListener event or method.
  41008. *dodebugcommandclauses Provides debug information for the CommandClauses object and ReportListener member properties.
  41009. *verbose_assign 
  41010. 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.
  41011. fxtherm
  41012. Pixels
  41013. fxtherm.
  41014. THERMSHAPE
  41015. shape
  41016. shape
  41017. reportlistener
  41018. fxtherm.
  41019. &Provides XML output from a report run.
  41020. fxlistener
  41021. THERMLABEL
  41022. dbflistener
  41023. reportlistener
  41024. label
  41025. Class
  41026. pr_reportlistener.vcx
  41027. label
  41028. fxtherm.
  41029. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  41030. fxabstract
  41031. gfxnorender
  41032. custom
  41033.     THERMBACK
  41034. jpgclsid
  41035. oldsendgdiplusimage
  41036. oldexternalfilelocation
  41037. imagefieldinstance
  41038. imagefieldtofile
  41039. utilityimage
  41040. checkreportforgeneralfields
  41041. initializefilecopysettings
  41042. adjustshapeaspectratio
  41043. lexpandfields
  41044. *storefrxdata 
  41045. *getfullfrxdata 
  41046. *erasetempfiles 
  41047. *updateproperties 
  41048. *getdynamicsfromfrx 
  41049. *getprinterinfo 
  41050. *getstringfromxml 
  41051. *processdynamics 
  41052. *onpreviewclose_bind 
  41053. *addtolog 
  41054.     foxytherm
  41055. shape
  41056. _reportlistener
  41057. 8listener Holds a ReportListener reference during applyFX processing for use in evaluating "Render When" conditions.
  41058. norenderdataalias Alias of private cursor for gfxNoRender subset of memberdata.
  41059. *omitrendering Evaluates Rendering requirements, returning True or False, in both current and frx data sessions.
  41060. gfxexample
  41061. Pixels
  41062. 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. 
  41063. Class
  41064. fxabstract
  41065. gfxexample
  41066. custom
  41067. reportlistener
  41068. reportlisteners.h
  41069. foxpro_reporting.h
  41070. reportlisteners_locs.h
  41071. shape
  41072. reportlistener
  41073. reportlisteners.h
  41074. pr_reportlistener.vcx
  41075. vsuccessorsys2024
  41076. currentrecord
  41077. designateddriver
  41078. drivingaliascurrentrecno
  41079. escapereference
  41080. frxbandrecno
  41081. onescapecommand
  41082. percentdone
  41083. setescape
  41084. setnotifycursor
  41085. isrunning
  41086. drivingalias
  41087. getparentwindowref
  41088. getreportscopedriver
  41089. resetuserfeedback
  41090. setthermformcaption
  41091. synchstatus
  41092. pushuserfeedbackglobalsets
  41093. popuserfeedbackglobalsets
  41094. synchuserinterface
  41095. setupreport
  41096. Pixels
  41097. dFX interface-conformant object derived from form class, providing user feedback during a report run.
  41098. AutoSize = .T.
  41099. DefTop = 
  41100. BackStyle = 1
  41101. Caption = ""
  41102. Left = 8
  41103. Top = ( (THISFORM.Height - THIS.Height) /2)
  41104. Visible = .T.
  41105. Width = 2
  41106. ForeColor = 0,0,0
  41107. Name = "THERMLABEL"
  41108. Class
  41109.     foxytherm
  41110. HAlignment = 2
  41111. Left = 98
  41112. Top = 13
  41113. Visible = .F.
  41114. Name = "ThermLabel"
  41115.     foxytherm.
  41116. ThermLabel
  41117. label
  41118. pr_ctl32_progressbar.vcx
  41119. ctl32_progressbarlabel
  41120. pr_utilityreportlistener
  41121.     foxytherm.
  41122. Therm
  41123. reportlisteners.h
  41124. foxpro_reporting.h
  41125. reportlisteners_locs.h
  41126. fxlistener
  41127. reportlisteners.h
  41128. pr_xmllistener
  41129. showdatasessionissue Toggles demonstration of proper datasession handling in this example GFX class.
  41130. *showdatasessionissue_assign 
  41131. reportlistener
  41132. PR_ReportListener.vcx
  41133. Top = 2
  41134. Left = 1
  41135. Visible = .F.
  41136. Name = "Therm"
  41137. lblControlNameH.Name = "lblControlNameH"
  41138. tmrControlTimer.Name = "tmrControlTimer"
  41139. lblControlNameV.Name = "lblControlNameV"
  41140. pr_reportlistener.vcx
  41141. Pixels
  41142. Class
  41143. showdatasessionissue = .T.
  41144. _memberdata = <VFPData><memberdata name="applyfx" type="property" display="applyFX" favorites="True"/><memberdata name="showdatasessionissue" display="showDataSessionIssue" favorites="True" type="property"/></VFPData>
  41145. Name = "gfxexample"
  41146. 1DefTop = 
  41147. DefLeft = 
  41148. DefHeight = 
  41149. Top = (THISFORM.ThermBack.Top + 1)
  41150. Left = (THISFORM.ThermBack.Left + 1)
  41151. Height = (THISFORM.ThermBack.Height -2)
  41152. Width = 0
  41153. BorderStyle = 0
  41154. DrawMode = 14
  41155. FillStyle = 0
  41156. Visible = .T.
  41157. BackColor = (THISFORM.BackColor)
  41158. FillColor = 178,180,191
  41159. Name = "THERMSHAPE"
  41160. PR_ReportListener.vcx
  41161. pr_reportlistener.vcx
  41162. reportlisteners.h
  41163. foxpro_reporting.h
  41164. reportlisteners_locs.h
  41165. reportlisteners.h
  41166. foxpro_reporting.h
  41167. reportlisteners_locs.h
  41168. DefTop = 
  41169. DefLeft = 
  41170. DefHeight = 
  41171. DefWidth = 
  41172. Top = 5
  41173. Left = 0
  41174. Height = 30
  41175. Width = 276
  41176. BackStyle = 0
  41177. Visible = .T.
  41178. Name = "THERMBACK"
  41179. pr_updatelistener
  41180. 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.
  41181. scriptalias
  41182. usememberdata
  41183. processmemberdatascript
  41184. processdynamicmethodscript
  41185. gatherscripts
  41186. adjustdynamiccalls
  41187. findparametersstatement
  41188. reportlisteners.h
  41189. Pixels
  41190. 8Provides user feedback while report output is generated.
  41191.     gfxrotate
  41192. reportlisteners.h
  41193. Pixels
  41194. oimagesrc
  41195. oimagedest
  41196. oprivategraphics
  41197. opoint
  41198. orect
  41199. lonthisrun
  41200. iimageinstanceindex
  41201. snamespace
  41202. simagepath
  41203. simagefullpath
  41204. aimagecopies
  41205. saveimageclips
  41206. getimageext
  41207. setup
  41208. listenersupportssaveclip
  41209. cleanup
  41210. resetcount Internal processing variable.
  41211. oldpass Internal processing variable.
  41212. dothisrun Holds assessment of whether this object must perform its function during the current report run.
  41213. resetalias Alias of cursor used to accumulate page counts for groups.
  41214. *dobeforeband Accumulates page counts into the ResetAlias cursor as the report run progresses.
  41215. *dobeforereport Initializes page count activity at the start of a report run.
  41216. thermform
  41217. setnotifycursor
  41218. setescape
  41219. escapereference
  41220. onescapecommand
  41221. percentdone
  41222. currentrecord
  41223. drivingaliascurrentrecno
  41224. frxbandrecno
  41225. designateddriver
  41226. successorsys2024
  41227. createtherm
  41228. getparentwindowref
  41229. setthermformcaption
  41230. resetuserfeedback
  41231. getreportscopedriver
  41232. synchstatus
  41233. 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).
  41234. wHeight = 17
  41235. Width = 98
  41236. listener = (.NULL.)
  41237. norenderdataalias = ("GNR"+SYS(2015))
  41238. _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>
  41239. Name = "gfxnorender"
  41240. Class
  41241. _reportlistener
  41242. pr_updatelistener
  41243. _reportlistener
  41244. fxlistener
  41245. reportlistener
  41246. reportlistener
  41247. pr_reportlistener.vcx
  41248. reportlisteners.h
  41249. foxpro_reporting.h
  41250. reportlisteners_locs.h
  41251. `Height = 23
  41252. Width = 23
  41253. FRXDataSession = -1
  41254. includeloadandunload = .T.
  41255. targetalias = ("")
  41256. _memberdata = 
  41257.      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>
  41258. Name = "debuglistener"
  41259. uscriptalias The alias of a cursor holding script information during the report run.
  41260. 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.. 
  41261. *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.
  41262. *processmemberdatascript Executes MemberData script from the main MemberData row for the current FRX layout element.
  41263. *processdynamicmethodscript Processes specialized MemberData rows for the current layout control for dynamic methods EvaluateContents and AdjustObjectSize.
  41264. *gatherscripts Sets up script elements at the beginning of a report run.
  41265. *adjustdynamiccalls Ensures that dynamic method calls are made if there is relevant MemberData script attached to them.
  41266. *removescriptonfailure_assign 
  41267. *findparametersstatement Checks FX scripts for a parameter statement as required for ApplyFX() method.
  41268. scriptalias = ("S"+SYS(2015))
  41269. removescriptonfailure = .T.
  41270. _memberdata = 
  41271.      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>
  41272. Name = "fxmemberdatascript"
  41273. resetcount = 0
  41274. oldpass = 0
  41275. dothisrun = .F.
  41276. resetalias = ("GR"+SYS(2015))
  41277. _memberdata = 
  41278.      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>
  41279. Name = "fxresetpagetotal"
  41280. PROCEDURE dobeforeband
  41281. LPARAMETERS m.toListener,m.tnBandCode
  41282. LOCAL m.liSession, m.liSelect
  41283. IF m.tnBandCode = 1 && pageheader
  41284.    m.liSession = SET("DATASESSION")
  41285.    SET DATASESSION TO (m.toListener.FRXDataSession )
  41286.    liSelect = SELECT(0)      
  41287.    SELECT (THIS.resetAlias)
  41288.    IF _PAGENO = 1 && user reset occurred
  41289.       IF THIS.oldPass = 0 AND toListener.CurrentPass = 1
  41290.          * we're entering the rendering pass
  41291.          THIS.resetCount = 1
  41292.          THIS.oldPass = 1
  41293.          IF TYPE("_ReportPageTotal") = "N"
  41294.             CALCULATE SUM(ResetPageTotal) TO _ReportPageTotal
  41295.          ENDIF
  41296.       ELSE
  41297.          THIS.resetCount = THIS.resetCount + 1       
  41298.       ENDIF
  41299.       IF m.toListener.CurrentPass = 0 
  41300.          INSERT INTO (THIS.resetAlias) VALUES (THIS.ResetCount, 1)
  41301.       ENDIF          
  41302.    ELSE
  41303.       * we're not starting a set of page numbers,
  41304.       * so we need to keep track of the pages in 
  41305.       * this particular group.
  41306.       IF m.toListener.CurrentPass = 0
  41307.          SEEK THIS.ResetCount 
  41308.          REPLACE ResetPageTotal WITH ResetPageTotal + 1 
  41309.       ENDIF              
  41310.    ENDIF
  41311.    IF m.toListener.CurrentPass = 1
  41312.       * make the current group's page total available
  41313.       * for display/output
  41314.       SEEK THIS.ResetCount 
  41315.       _ResetPageTotal = ResetPageTotal
  41316.       _ReportPageNo = m.toListener.PageNo && don't even worry about whether the var has been declared
  41317.    ENDIF
  41318.    SELECT (m.liSelect)
  41319.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  41320. ENDIF     
  41321. ENDPROC
  41322. PROCEDURE dobeforereport
  41323. LPARAMETERS m.toListener
  41324. LOCAL liSession, liSelect
  41325. liSession = SET("DATASESSION")
  41326. SET DATASESSION TO (m.toListener.FRXDataSession )
  41327. liSelect = SELECT(0)      
  41328. SELECT 0
  41329. CREATE CURSOR (THIS.resetAlias) (ResetsNo i, ResetPageTotal i)
  41330. INDEX ON ResetsNo TAG Resets
  41331. THIS.resetCount = 0
  41332. THIS.oldPass = 0
  41333. _ResetPageTotal = 0
  41334. SELECT (liSelect)
  41335. SET DATASESSION TO (m.toListener.CurrentDataSession)
  41336. ENDPROC
  41337. PROCEDURE applyfx
  41338. LPARAMETERS m.toListener, m.tcMethodToken, ;
  41339.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6,   ;
  41340.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  41341.             
  41342. DO CASE
  41343.    CASE m.tcMethodToken == "BEFOREREPORT" AND ;
  41344.         TYPE("_ResetPageTotal") # "U"
  41345.        * we can turn on behavior explicitly
  41346.         toListener.TwoPassProcess = .T.
  41347.         THIS.doThisRun = .T.
  41348.         THIS.doBeforeReport(toListener)
  41349.    CASE m.tcMethodToken == "BEFOREREPORT" AND ;
  41350.        (TYPE("_ResetPageTotal") = "U")
  41351.         THIS.doThisRun = .F.
  41352.    CASE NOT THIS.DoThisRun          
  41353.         * do nothing
  41354.    CASE m.tcMethodToken == "BEFOREBAND"
  41355.         THIS.doBeforeBand(toListener,tP1)          
  41356.    OTHERWISE
  41357.         * do nothing
  41358. ENDCASE
  41359.                         
  41360. ENDPROC
  41361. ;PROCEDURE showdatasessionissue_assign
  41362. LPARAMETERS m.vNewVal
  41363. IF VARTYPE(m.vNewVal) = "L"
  41364.   THIS.showDataSessionIssue = m.vNewVal
  41365. ENDIF  
  41366. ENDPROC
  41367. PROCEDURE applyfx
  41368. LPARAMETERS m.toListener, m.tcMethodToken,;
  41369.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6,;
  41370.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  41371.             
  41372. IF m.tcMethodToken == "BEFOREREPORT" AND ;
  41373.    THIS.showDataSessionIssue AND ;
  41374.    (m.toListener.CurrentDataSession = m.toListener.CommandClauses.StartDataSession)
  41375.    MESSAGEBOX("This report does not use a private data session," + CHR(13) + ;
  41376.               "so you won't see the problem.")                          
  41377. ENDIF              
  41378. IF m.tcMethodToken == "BEFOREBAND" 
  41379.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  41380.    m.toListener.doStatus("working here... ")
  41381.    IF THIS.showDataSessionIssue 
  41382.       * no switch back here.
  41383. *!*       ELSE
  41384. *!*          SET DATASESSION TO (m.toListener.ListenerDataSession)
  41385.    ENDIF      
  41386. ENDIF               
  41387. IF (NOT THIS.showDataSessionIssue) AND ;
  41388.    m.tcMethodToken == "AFTERREPORT"
  41389.    * if the following is not included,
  41390.    * a "stuck" datasession results unless
  41391.    * some additional object later in 
  41392.    * the collection did the switch back
  41393.    m.toListener.removeCollectionMember(THIS.Name,.T.)
  41394.    RELEASE THIS
  41395. ENDIF
  41396. ENDPROC
  41397. 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.
  41398. RENDER
  41399. DATASESSIONv
  41400. Microsoft.VFP.Reporting.Builder.Rotate
  41401. TOLISTENER
  41402. TCMETHODTOKEN
  41403. TP12    
  41404. LISESSION
  41405. LIANGLE
  41406. LISELECT
  41407. LIFRXRECNO
  41408. LIRETURN
  41409. FFCGRAPHICS    
  41410. GETHANDLE
  41411. NEXTERNALGDIPLUSGFX    
  41412. SETHANDLE
  41413. FRXDATASESSION
  41414. MEMBERDATAALIAS
  41415. GETFRXRECNO
  41416. FRXRECNO
  41417. EXECUTE
  41418. TRANSLATETRANSFORM
  41419. ROTATETRANSFORM
  41420. applyfx,
  41421. DATASESSIONv
  41422. TOLISTENER
  41423. TCEXPR
  41424. LLNORENDER    
  41425. LISESSION
  41426. LISTENER
  41427. CURRENTDATASESSION
  41428. FRXDATASESSION
  41429. EXCEPTION
  41430. RENDER
  41431. DATASESSIONv
  41432. LOADREPORT
  41433. 09.00.0000.3504
  41434. DATASESSIONv
  41435. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  41436. ListenerRef.Preprocess.NoRenderWhen
  41437. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  41438. ListenerRef.Preprocess.NoRenderWhen
  41439. BEFOREREPORT
  41440. DATASESSIONv
  41441. (ExecWhen == '
  41442. ListenerRef.Preprocess.NoRenderWhen
  41443. ' OR 
  41444.  ExecWhen == '
  41445. ListenerRef.NoRenderWhen
  41446. 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.           
  41447. UNLOADREPORT
  41448. DATASESSIONv
  41449. TOLISTENER
  41450. TCMETHODTOKEN
  41451. TP12    
  41452. LISESSION
  41453. LISELECT
  41454. LIFRXRECNO
  41455. LIRETURN
  41456. LLNORENDER
  41457. LLSWAP
  41458. LCCONDITIONS
  41459. FFCGRAPHICS
  41460. FRXDATASESSION
  41461. NORENDERDATAALIAS
  41462. GETFRXRECNO
  41463. FRXRECNO
  41464. PREPROCESS
  41465. OMITRENDERING
  41466. EXECUTE
  41467. COMMANDCLAUSES
  41468. ISDESIGNERLOADED
  41469. COMMANDCLAUSESFILE
  41470. FRXCURSOR
  41471. UNPACKFRXMEMBERDATA
  41472. MEMBERDATAALIAS
  41473. EXECWHEN
  41474. ISFRXSWAPCOPYPRESENT
  41475. PREPAREFRXSWAPCOPY
  41476. LIRECNO
  41477. REMOVEFRXSWAPCOPY
  41478. LISTENER
  41479. omitrendering,
  41480. applyfx
  41481. Destroy+
  41482. pr_utilityreportlistener
  41483. reportlisteners.h
  41484. Pixels
  41485. Class
  41486. vsuccessorsys2024
  41487. currentrecord
  41488. designateddriver
  41489. drivingaliascurrentrecno
  41490. escapereference
  41491. frxbandrecno
  41492. onescapecommand
  41493. percentdone
  41494. setescape
  41495. setnotifycursor
  41496. isrunning
  41497. drivingalias
  41498. getparentwindowref
  41499. getreportscopedriver
  41500. resetuserfeedback
  41501. setthermformcaption
  41502. synchstatus
  41503. pushuserfeedbackglobalsets
  41504. popuserfeedbackglobalsets
  41505. synchuserinterface
  41506. setupreport
  41507. Changes default rendering behavior for report layout controls by rotating them according to a MemberData-specified number of degrees.
  41508. Class
  41509. fxabstract
  41510.     gfxrotate
  41511. Name = "gfxrotate"
  41512. custom
  41513. pr_reportlistener.vcx
  41514. isrunning
  41515. lasterrormessage
  41516. isrunningreports
  41517. reportfilenames
  41518. reportclauses
  41519. listeners
  41520. drivingalias
  41521. runcollector
  41522. frxheaderrecno
  41523. pushglobalsets
  41524. popglobalsets
  41525. setfrxdatasessionenvironment
  41526. resetdatasession
  41527. setfrxdatasession
  41528. setcurrentdatasession
  41529. getfrxstartupinfo
  41530. setfrxrunstartupconditions
  41531. resetdynamicmethodcalls
  41532. resetcalladjustobjectsize
  41533. resetcallevaluatecontents
  41534. resetruncollector
  41535. fillruncollector
  41536. adjustreportpagesinfo
  41537. fxlistener
  41538. reportlisteners.h
  41539. foxpro_reporting.h
  41540. reportlisteners_locs.h
  41541. reportlistener
  41542. pr_htmllistener15
  41543. reportlisteners.h
  41544. foxpro_reporting.h
  41545. reportlisteners_locs.h
  41546. reportlisteners.h
  41547. foxpro_reporting.h
  41548. reportlisteners_locs.h
  41549. reportlisteners.h
  41550. foxpro_reporting.h
  41551. reportlisteners_locs.h
  41552. configurationtable
  41553. pageimageextension
  41554. opentargetfile
  41555. closetargetfile
  41556. getpageimageextension
  41557. generatepageimagefilename
  41558. supportspageimages
  41559. outputpageimage
  41560. makeexternalfilelocationreachable
  41561. UAdds configuration table handling and output target file handling to fxListener class
  41562. reportlisteners.h
  41563. foxpro_reporting.h
  41564. reportlisteners_locs.h
  41565. pr_utilityreportlistener
  41566. VNEWVAL
  41567. SHOWDATASESSIONISSUE
  41568. BEFOREREPORT
  41569. This report does not use a private data session,C
  41570. so you won't see the problem.
  41571. BEFOREBAND
  41572. working here... 
  41573. AFTERREPORT
  41574. TOLISTENER
  41575. TCMETHODTOKEN
  41576. SHOWDATASESSIONISSUE
  41577. CURRENTDATASESSION
  41578. COMMANDCLAUSES
  41579. STARTDATASESSION
  41580. DOSTATUS
  41581. REMOVECOLLECTIONMEMBER
  41582. showdatasessionissue_assign,
  41583. applyfx
  41584. dbflistener
  41585. pr_reportlistener.vcx
  41586. reportlistener
  41587. pr_reportlistener.vcx
  41588. createhelperobjects
  41589. needgfxs
  41590. sendfx
  41591. checkcollectionmembers
  41592. uppermethodname
  41593. getfeedbackfxobject
  41594. getobjectinstance
  41595. getmemberdatascriptfxobject
  41596. creatememberdatacursor
  41597. getrotategfxobject
  41598. evaluateuserexpression
  41599. getnorendergfxobject
  41600. ensurecollection
  41601. 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.
  41602. anchorattr Supplies the name of the XML attribute used to supply HTML anchor instructions to the node representing an FRX layout control or band.
  41603. titleattr Supplies the name of the XML attribute used to supply alternate text or tooltip information to a node representing an FRX layout control.
  41604. 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.
  41605. 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.
  41606. 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.
  41607. 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.
  41608. lobjtypemode
  41609. lopenviewer
  41610. *getdefaultuserxsltasstring Supplies default User XSLT document o the getDefaultUserXslt method as a string.
  41611. *cssclassattr_assign 
  41612. *anchorattr_assign 
  41613. *titleattr_assign 
  41614. *linkattr_assign 
  41615. *cssclassoverrideattr_assign 
  41616. *urlstringencode Encode string for purposes of using it as part of a link in an HTML page.
  41617. *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.
  41618. *updateproperties 
  41619. pagenodes
  41620. currentband
  41621. currentpage
  41622. columnnodes
  41623. currentcolumn
  41624. datanodes
  41625. includepage
  41626. evaluatecontentsvalues
  41627. applyrdltransform
  41628. successorgfxnorender
  41629. xmlrawtag
  41630. xmlrawnode
  41631. xmlrawconv
  41632. writeraw
  41633. resetreport
  41634. verifynodenames
  41635. verifyattributenames
  41636. loadprocessorobject
  41637. getrawformattinginfo
  41638. getvfprdlcontents
  41639. getpathedimageinfo
  41640. applyusertransformtooutput
  41641. getdefaultuserxslt
  41642. setdomformattinginfo
  41643. synchxsltprocessoruser
  41644. insertxmlconfigrecords
  41645. getfrxlayoutobjectfieldlist
  41646. preparefrxcopy
  41647. removefrxcopy
  41648. getrunnodecontents
  41649. addrunnode
  41650. initializeformattingchangescursor
  41651. formatdatavalue
  41652. evaluatestringtoboolean
  41653. fixmsxmlobjectfordtds
  41654. frxcharsetsinuse
  41655. verifytargetfile
  41656. FRXRecno
  41657. TIFRXRECNO
  41658. LLUSEMEMBERDATA
  41659. LISELECT
  41660. SCRIPTALIAS
  41661. .Execute
  41662. .ExecWhen
  41663. TOLISTENER
  41664. TCMETHODTOKEN
  41665. SCRIPTALIAS    
  41666. LLEXECUTE    
  41667. LCEXECUTE
  41668. LCEXECWHEN
  41669. CURRENTDATASESSION
  41670. REMOVESCRIPTONFAILURE
  41671. FRXDATASESSION
  41672. EXECUTE
  41673. .UserScript
  41674. TOLISTENER
  41675. TNFRXRECNO
  41676. TOPROPS
  41677. SCRIPTALIAS
  41678. LCSCRIPT
  41679. REMOVESCRIPTONFAILURE
  41680. FRXDATASESSION
  41681. USERSCRIPT
  41682. WINDOWS
  41683. LPARAMETERS toFX, toListener, tcMethodToken,;C
  41684. tP1, tP2, tP3, tP4, tP5, tP6,
  41685. tP7, tP8, tP9, tP10, tP11, tP12
  41686. Microsoft.VFP.Reporting.Builder.AdjustObjectSize
  41687. Microsoft.VFP.Reporting.Builder.EvaluateContents
  41688. TOLISTENER
  41689. LCTEMP1
  41690. LCTEMP2
  41691. LCTEMP3
  41692. LISELECT
  41693. FRXDATASESSION
  41694. SCRIPTALIAS
  41695. FRXRECNO
  41696. EXECWHEN
  41697. EXECUTE
  41698. USERSCRIPT
  41699. MEMBERDATAALIAS
  41700. PLATFORM
  41701. STYLE
  41702. FINDPARAMETERSSTATEMENT
  41703. OBJTYPE    
  41704. FRXCURSOR
  41705. GENERATEADJUSTOBJECTSIZESCRIPT
  41706. GENERATEEVALUATECONTENTSSCRIPT
  41707. WINDOWS
  41708. EvaluateContents
  41709. EvaluateContents
  41710. WINDOWS
  41711. AdjustObjectSize
  41712. AdjustObjectSize
  41713. TOLISTENER
  41714. FRXDATASESSION
  41715. CALLEVALUATECONTENTS
  41716. OBJTYPE
  41717. PLATFORM
  41718. USEMEMBERDATA
  41719. SCRIPTALIAS
  41720. EXECWHEN
  41721. EXECUTE
  41722. USERSCRIPT
  41723. CALLADJUSTOBJECTSIZE7
  41724. VNEWVAL
  41725. REMOVESCRIPTONFAILURE-
  41726. PARAM
  41727. TCSCRIPT
  41728. LALINES
  41729. LILINE
  41730. LCLINE
  41731. LLFOUND
  41732. BEFOREREPORT
  41733. EVALUATECONTENTS
  41734. ADJUSTOBJECTSIZE
  41735. TOLISTENER
  41736. TCMETHODTOKEN
  41737. FRXDATASESSION
  41738. LIFRXRECNO
  41739. GATHERSCRIPTS
  41740. ADJUSTDYNAMICCALLS
  41741. GETFRXRECNO
  41742. USEMEMBERDATA
  41743. PROCESSMEMBERDATASCRIPT
  41744. PROCESSDYNAMICMETHODSCRIPT
  41745. LISTENERDATASESSION
  41746. usememberdata,
  41747. processmemberdatascript
  41748. processdynamicmethodscript~
  41749. gatherscripts$
  41750. adjustdynamiccallsk
  41751. removescriptonfailure_assign
  41752. findparametersstatemente
  41753. applyfx
  41754. ZListenerType = 2
  41755. FRXDataSession = -1
  41756. cssclassattr = ("css")
  41757. anchorattr = ("anchor")
  41758. titleattr = ("title")
  41759. linkattr = ("hlink")
  41760. cssclassoverrideattr = ("CSS")
  41761. oldpageimagetype = -1
  41762. oldtextareasetting = -1
  41763. lobjtypemode = .F.
  41764. lopenviewer = .F.
  41765. applyusertransform = .T.
  41766. targetfileext = ("HTM")
  41767. _memberdata = 
  41768.     2036<VFPData>
  41769.     <memberdata name="imagefieldinstance" type="property" display="imageFieldInstance" favorites="False"/>
  41770.     <memberdata name="imagefieldtofile" type="property" display="imageFieldToFile" favorites="False"/>
  41771.     <memberdata name="imagefilebasename" type="property" display="imageFileBaseName" favorites="True"/>
  41772.     <memberdata name="imagesrcattr" type="property" display="imageSrcAttr" favorites="True"/>
  41773.     <memberdata name="jpgclsid" type="property" display="JPGclsid" favorites="False"/>
  41774.     <memberdata name="oldexternalfilelocation" type="property" display="oldExternalFileLocation" favorites="False"/>
  41775.     <memberdata name="oldsendgdiplusimage" type="property" display="oldSendGDIPlusImage" favorites="False"/>
  41776.     <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>
  41777. Name = "pr_htmllistener"
  41778. FRXDataSession = -1
  41779. jpgclsid = (.NULL.)
  41780. oldsendgdiplusimage = 0
  41781. oldexternalfilelocation = ("")
  41782. imagefieldinstance = 0
  41783. imagefieldtofile = ("")
  41784. imagesrcattr = ("img")
  41785. imagefilebasename = ("")
  41786. utilityimage = .NULL.
  41787. fillalphaattr = ("FA")
  41788. fillredattr = ("FR")
  41789. fillgreenattr = ("FG")
  41790. fillblueattr = ("FB")
  41791. penalphaattr = ("PA")
  41792. penredattr = ("PR")
  41793. pengreenattr = ("PG")
  41794. penblueattr = ("PB")
  41795. fontnameattr = ("FNAME")
  41796. fontstyleattr = ("FSTYLE")
  41797. fontsizeattr = ("FSIZE")
  41798. externalfilelocation = ("")
  41799. includeformattinginlayoutobjects = .T.
  41800. includebandswithnoobjects = .T.
  41801. _memberdata = 
  41802.     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>
  41803. Name = "xmldisplaylistener"
  41804. PROCEDURE usememberdata
  41805. LPARAMETERS m.tiFRXRecno
  41806. LOCAL m.llUseMemberData, m.liSelect
  41807. IF (m.tiFRXRecno > 0) 
  41808.    IF USED(THIS.scriptAlias) 
  41809.       m.liSelect = SELECT(0)
  41810.       SELECT (THIS.scriptAlias)
  41811.       m.llUseMemberData = ;
  41812.          SEEK(m.tiFRXRecno,THIS.scriptAlias,"FRXRecno") 
  41813.       SELECT (m.liSelect)    
  41814.    ENDIF
  41815. ENDIF
  41816. RETURN m.llUseMemberData
  41817. ENDPROC
  41818. PROCEDURE processmemberdatascript
  41819. LPARAMETERS m.toListener, m.tcMethodToken,;
  41820.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  41821.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  41822.             
  41823. * we are already positioned on the correct MemberData record
  41824. * in the FRXDataSession in the script alias
  41825. * by the calling method.
  41826. IF (NOT EOF(THIS.scriptAlias))
  41827.    LOCAL llExecute, lcExecute, lcExecWhen
  41828.    m.lcExecute = EVALUATE(THIS.scriptAlias + ".Execute")
  41829.    m.lcExecWhen = EVALUATE(THIS.scriptAlias + ".ExecWhen")
  41830.    SET DATASESSION TO (m.toListener.CurrentDataSession)
  41831.    DO CASE
  41832.    CASE EMPTY(m.lcExecute)
  41833.        * nothing to execute
  41834.    CASE EMPTY(m.lcExecWhen)
  41835.        * always execute
  41836.        m.llExecute = .T.
  41837.    CASE UPPER(m.lcExecWhen)== m.tcMethodToken
  41838.         * simple event evaluation
  41839.         * ExecWhen contains an event name
  41840.         * Note that each event, via script,
  41841.         * could potentially change the contents of
  41842.         * ExecWhen to hold another value (the next
  41843.         * event during which this script should be evaluated)
  41844.         m.llExecute = .T.
  41845.    CASE (TYPE(m.lcExecWhen) = "L") AND ;
  41846.         EVALUATE(m.lcExecWhen)
  41847.         * ExecWhen contains a logical expression to be evaluated
  41848.         m.llExecute = .T.
  41849.    CASE ATC("|"+m.tcMethodToken+"|","|" + m.lcExecWhen + "|") > 0
  41850.         * ExecWhen contains a delimited string of events
  41851.         m.llExecute = .T.
  41852.    ENDCASE
  41853.    IF m.llExecute 
  41854.       TRY
  41855.          ExecScript(m.lcExecute,;
  41856.                     THIS, m.toListener, m.tcMethodToken,;
  41857.                     @tP1, @tP2, @tP3, @tP4, @tP5, @tP6, ;
  41858.                     @tP7, @tP8, @tP9, @tP10, @tP11, @tP12)
  41859.       CATCH TO err
  41860.          IF THIS.removeScriptOnFailure AND ;
  41861.             (m.toListener.FRXDataSession > 0)
  41862.              SET DATASESSION TO (m.toListener.FRXDataSession)
  41863.              REPLACE Execute WITH "" IN (THIS.scriptAlias)
  41864.          ENDIF      
  41865.          #IF OUTPUTCLASS_DEBUGGING 
  41866.              SUSPEND
  41867.          #ENDIF
  41868.       ENDTRY                    
  41869.    ENDIF
  41870.    IF m.toListener.FRXDataSession > 0
  41871.       SET DATASESSION TO (m.toListener.FRXDataSession)
  41872.    ENDIF      
  41873. ENDIF   
  41874. ENDPROC
  41875. PROCEDURE processdynamicmethodscript
  41876. LPARAMETERS m.toListener,  m.tnFRXRecno, m.toProps 
  41877. * we are already positioned on the correct MemberData record
  41878. * in the script alias and in the FRXDataSession
  41879. * by the calling method.
  41880. IF (NOT EOF(THIS.scriptAlias))
  41881.    LOCAL lcScript
  41882.    m.lcScript = EVALUATE(THIS.scriptAlias + ".UserScript" ) 
  41883.    IF NOT EMPTY(m.lcScript)
  41884.       TRY
  41885.          EXECSCRIPT(m.lcScript,m.toListener, m.tnFRXRecno, m.toProps )
  41886.       CATCH TO err
  41887.          IF THIS.removeScriptOnFailure AND ;
  41888.             (m.toListener.FRXDataSession > 0)
  41889.              SET DATASESSION TO (m.toListener.FRXDataSession)
  41890.              REPLACE UserScript WITH "" IN (THIS.scriptAlias)
  41891.          ENDIF
  41892.          #IF OUTPUTCLASS_DEBUGGING 
  41893.              SUSPEND
  41894.          #ENDIF
  41895.       FINALLY
  41896.          IF m.toListener.FRXDataSession > 0
  41897.             SET DATASESSION TO (m.toListener.FRXDataSession)
  41898.          ENDIF
  41899.       ENDTRY
  41900.    ENDIF
  41901. ENDIF
  41902. ENDPROC
  41903. PROCEDURE gatherscripts
  41904. LPARAMETERS m.toListener
  41905. LOCAL lcTemp1, lcTemp2, lcTemp3, liSelect
  41906. SET DATASESSION TO (m.toListener.FRXDataSession)
  41907. m.liSelect = SELECT(0)
  41908. SELECT 0
  41909. CREATE CURSOR (THIS.scriptAlias) ;
  41910.    (FRXRecno i, ExecWhen M, Execute M, UserScript M)
  41911. IF USED(m.toListener.MemberDataAlias) AND ;
  41912.    RECCOUNT(m.toListener.MemberDataAlias) > 0
  41913.    SELECT FRX   
  41914.    GO TOP
  41915.    SCAN FOR Platform = FRX_PLATFORM_WINDOWS AND NOT EMPTY(Style)
  41916.       SELECT (m.toListener.MemberDataAlias)
  41917.       LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  41918.          EMPTY(Name) AND Type = FRX_BLDR_MEMBERDATATYPE   
  41919.       m.lcTemp1 = ExecWhen         
  41920.       m.lcTemp2 = Execute         
  41921.       m.lcTemp3 = ""
  41922.       IF NOT EMPTY(m.lcTemp2)
  41923.          IF NOT THIS.findParametersStatement(m.lcTemp2)
  41924.             * add a parameters statement
  41925.             m.lcTemp2 =  "LPARAMETERS toFX, toListener, tcMethodToken,;"+ CHR(13) + CHR(10) + ;
  41926.                          "tP1, tP2, tP3, tP4, tP5, tP6,"+;
  41927.                          "tP7, tP8, tP9, tP10, tP11, tP12" + CHR(13) + CHR(10) + ;
  41928.                          m.lcTemp2  
  41929.          ENDIF            
  41930.       ENDIF        
  41931.       DO CASE
  41932.       CASE INLIST(FRX.ObjType,FRX_OBJTYP_LINE,FRX_OBJTYP_RECTANGLE,FRX_OBJTYP_PICTURE)
  41933.           LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  41934.                      Type = FRX_BLDR_MEMBERDATATYPE   AND ;
  41935.                      Name == FRX_BLDR_NAMESPACE_ADJUSTOBJECTSIZE 
  41936.           IF NOT EOF()           
  41937.              m.lcTemp3 = ;
  41938.                m.toListener.FRXCursor.GenerateAdjustObjectSizeScript("frx",m.toListener.MemberDataAlias,m.toListener.FRXDataSession)
  41939.           ENDIF               
  41940.       CASE FRX.ObjType = FRX_OBJTYP_FIELD 
  41941.           LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  41942.                      Type = FRX_BLDR_MEMBERDATATYPE   AND ;
  41943.                      Name == FRX_BLDR_NAMESPACE_EVALUATECONTENTS
  41944.           IF NOT EOF()           
  41945.              m.lcTemp3 = ;          
  41946.                m.toListener.FRXCursor.GenerateEvaluateContentsScript("frx",m.toListener.MemberDataAlias,m.toListener.FRXDataSession)         
  41947.           ENDIF               
  41948.       OTHERWISE
  41949.           m.lcTemp3 = ""
  41950.       ENDCASE            
  41951.       SET DATASESSION TO (m.toListener.FRXDataSession)      
  41952.       IF NOT EMPTY(m.lcTemp1 + m.lcTemp2 + m.lcTemp3)
  41953.          INSERT INTO (THIS.scriptAlias) ;
  41954.             VALUES (RECNO("FRX"),m.lcTemp1, m.lcTemp2, m.lcTemp3)
  41955.       ENDIF                   
  41956.       SELECT FRX      
  41957.    ENDSCAN
  41958. ENDIF
  41959. SELECT (THIS.scriptAlias)
  41960. INDEX ON FrxRecno TAG FrxRecno
  41961. SELECT (m.liSelect)
  41962. ENDPROC
  41963. PROCEDURE adjustdynamiccalls
  41964. LPARAMETERS m.toListener
  41965. * change m.toListener.CallEvaluateContents and 
  41966. * m.toListener.CallAdjustObjectSize if necessary
  41967. SET DATASESSION TO (m.toListener.FRXDataSession)
  41968. IF INLIST(m.toListener.callEvaluateContents,;
  41969.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  41970.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  41971.    SELECT FRX    
  41972.    GO TOP
  41973.    SCAN FOR ObjType = FRX_OBJTYP_FIELD AND Platform = FRX_PLATFORM_WINDOWS
  41974.       IF THIS.useMemberData(RECNO())
  41975.          SELECT (THIS.scriptAlias)
  41976.          IF ATC("EvaluateContents",ExecWhen) > 0 OR ;
  41977.             ATC("EvaluateContents",Execute) > 0 OR ;
  41978.             (NOT EMPTY(UserScript))
  41979.             * UserScript for a Field-type item
  41980.             * has to be EvaluateContents
  41981.             m.toListener.callEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  41982.             EXIT
  41983.          ENDIF
  41984.       ENDIF    
  41985.       SELECT FRX
  41986.    ENDSCAN
  41987. ENDIF          
  41988. IF INLIST(m.toListener.callAdjustObjectSize,;
  41989.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  41990.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  41991.    SELECT FRX    
  41992.    GO TOP
  41993.    SCAN FOR Platform = FRX_PLATFORM_WINDOWS AND INLIST(ObjType,FRX_OBJTYP_LINE,FRX_OBJTYP_RECTANGLE,FRX_OBJTYP_PICTURE)          
  41994.       IF THIS.useMemberData(RECNO())
  41995.          SELECT (THIS.scriptAlias)
  41996.          IF ATC("AdjustObjectSize",ExecWhen) > 0 OR ;
  41997.             ATC("AdjustObjectSize",Execute) > 0 OR ;
  41998.             (NOT EMPTY(UserScript))
  41999.             * UserScript for a Shape-Picture-type item
  42000.             * has to be AdjustObjectSize
  42001.             m.toListener.callAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  42002.             EXIT
  42003.          ENDIF
  42004.       ENDIF    
  42005.       SELECT FRX
  42006.    ENDSCAN
  42007. ENDIF          
  42008. ENDPROC
  42009. PROCEDURE removescriptonfailure_assign
  42010. LPARAMETERS vNewVal
  42011. IF VARTYPE(m.vNewVal) = "L"
  42012.    THIS.removeScriptOnFailure = m.vNewVal
  42013. ENDIF   
  42014. ENDPROC
  42015. PROCEDURE findparametersstatement
  42016. LPARAMETERS m.tcScript
  42017. LOCAL laLines[1], liLine, lcLine, llFound
  42018. IF VARTYPE(m.tcScript) = "C" AND NOT EMPTY(m.tcScript) 
  42019.    FOR m.liLine = 1 TO ALINES(laLines,CHRTRAN(m.tcScript,CHR(10),CHR(13)),1+4,CHR(13))
  42020.       m.lcLine = ALLTRIM(UPPER(m.laLines[liLine]))
  42021.       DO CASE
  42022.       CASE LEFT(m.lcLine,1) == "*" OR LEFT(m.lcLine,2) == REPLICATE(CHR(38),2)
  42023.          * skip leading comments
  42024.       CASE BETWEEN(ATC("PARAM",m.lcLine),1,2)
  42025.          m.llFound = .T.
  42026.          EXIT
  42027.       OTHERWISE
  42028.          EXIT
  42029.       ENDCASE
  42030.    ENDFOR
  42031. ENDIF   
  42032. RETURN m.llFound 
  42033. ENDPROC
  42034. PROCEDURE applyfx
  42035. LPARAMETERS m.toListener, m.tcMethodToken,;
  42036.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  42037.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  42038.    IF m.toListener.FRXDataSession > 0
  42039.       SET DATASESSION TO (m.toListener.FRXDataSession)
  42040.    ENDIF      
  42041.    LOCAL m.liFRXRecno
  42042.    IF m.tcMethodToken == "BEFOREREPORT"
  42043.       THIS.gatherScripts(m.toListener)
  42044.       THIS.adjustDynamicCalls(m.toListener)
  42045.    ENDIF
  42046.    IF m.toListener.FRXDataSession > 0
  42047.       SET DATASESSION TO (m.toListener.FRXDataSession)
  42048.    ENDIF
  42049.    m.liFRXRecno = m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  42050.    IF USED("FRX") AND m.liFRXRecno > 0
  42051.       GO (m.liFRXRecno) IN FRX
  42052.    ENDIF
  42053.             
  42054.    IF THIS.useMemberData(m.liFRXRecno)
  42055.       THIS.processMemberDataScript(m.toListener, m.tcMethodToken,;
  42056.                @m.tP1, @m.tP2, @m.tP3, @m.tP4, @m.tP5, @m.tP6, ;
  42057.                @m.tP7, @m.tP8, @m.tP9, @m.tP10, @m.tP11, @m.tP12)
  42058.       IF INLIST(m.tcMethodToken,"EVALUATECONTENTS","ADJUSTOBJECTSIZE")
  42059.          THIS.processDynamicMethodScript(m.toListener,m.tP1, m.tP2)
  42060.       ENDIF  
  42061.    ENDIF    
  42062.    IF m.toListener.FRXDataSession > 0
  42063.       SET DATASESSION TO (m.toListener.FRXDataSession)
  42064.    ENDIF
  42065.    IF USED("FRX")
  42066.       SELECT FRX        
  42067.    ENDIF      
  42068.    SET DATASESSION TO (m.toListener.ListenerDataSession)
  42069. CATCH TO err
  42070.    #IF OUTPUTCLASS_DEBUGGING 
  42071.        SUSPEND
  42072.    #ENDIF
  42073. ENDTRY            
  42074. ENDPROC
  42075. oimagesrc Helper object for image-copy process.
  42076. oimagedest Helper object for image-copy process.
  42077. oprivategraphics Helper object for image-copy process.
  42078. opoint Helper object for image-copy process.
  42079. orect Helper object for image-copy process.
  42080. lonthisrun Logical value determining whether the object should take action during this run.
  42081. iimageinstanceindex Index of the current image copy file.
  42082. 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.
  42083. 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.
  42084. mimetype Mimetype to use for image-copy files the object creates.
  42085. 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. 
  42086. gdipluslib Class library to use for instantation of point, rect, and other helper objects.
  42087. _memberdata XML Metadata for customizable properties
  42088. gdipluslibmodule Optional APP or EXE file (module) from which to instantiate helper objects in the gdiPlusLib class library.
  42089. 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.
  42090. 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.
  42091. ^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).
  42092. *gdipluslib_assign 
  42093. *mimetype_assign 
  42094. *forceon_assign 
  42095. *applyfx Implementation of required method for the FX interface.
  42096. *getcurrentclipfilename Provides generated output image copy filename for the current copy action.
  42097. *outputpageclip Bindable procedure to save image copy files at the correct moment (the OutputPage event) during a paged report run.
  42098. *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.
  42099. *saveimageclips Performs image copy procedures on the page regions requested for one or more pages.
  42100. *getimageext Derive file extension from current mimetype value.
  42101. *setup Setup code for each report run specific to this object.
  42102. *gdipluslibmodule_assign 
  42103. *listenersupportssaveclip Evaluates whether the object can handle image copy processing in the current ReportListener output mode and during the current ReportListener event.
  42104. *cleanup Cleanup code for each report run specific to this object.
  42105. *margin_assign 
  42106. DATASESSIONv
  42107. _ReportPageTotalb
  42108. TOLISTENER
  42109. TNBANDCODE    
  42110. LISESSION
  42111. LISELECT
  42112. FRXDATASESSION
  42113. RESETALIAS
  42114. OLDPASS
  42115. CURRENTPASS
  42116. RESETCOUNT
  42117. RESETPAGETOTAL
  42118. _REPORTPAGETOTAL
  42119. _RESETPAGETOTAL
  42120. _REPORTPAGENO
  42121. PAGENO
  42122. CURRENTDATASESSION
  42123. DATASESSIONv
  42124. TOLISTENER    
  42125. LISESSION
  42126. LISELECT
  42127. FRXDATASESSION
  42128. RESETALIAS
  42129. RESETSNO
  42130. RESETPAGETOTAL
  42131. RESETS
  42132. RESETCOUNT
  42133. OLDPASS
  42134. _RESETPAGETOTAL
  42135. CURRENTDATASESSIONj
  42136. BEFOREREPORT
  42137. _ResetPageTotalb
  42138. BEFOREREPORT
  42139. _ResetPageTotalb
  42140. BEFOREBAND
  42141. TOLISTENER
  42142. TCMETHODTOKEN
  42143. TWOPASSPROCESS
  42144. THIS    
  42145. DOTHISRUN
  42146. DOBEFOREREPORT
  42147. DOBEFOREBAND
  42148. dobeforeband,
  42149. dobeforereport
  42150. applyfx|
  42151. )jpgclsid Provides the GUID used when accessing GDI+ to request a file to be saved as JPG type.
  42152. 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.
  42153. 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.
  42154. imagefieldinstance Keeps count of image instances for use in generating unique filenames for disk versions of non-filebased images in the report.
  42155. imagefieldtofile Holds generated filename for image being rendered to disk from a non-filebased image.
  42156. imagesrcattr Supplies the name of the XML attribute used to show filename copied, or generated for non-filebased images, at runtime.
  42157. 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
  42158. 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.
  42159. utilityimage Utility image object for handling aspect ratio of scale-and-retain filebased images.
  42160. 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.
  42161. 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.
  42162. 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.
  42163. 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.
  42164. 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.
  42165. 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.
  42166. 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.
  42167. 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.
  42168. 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.
  42169. 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.
  42170. 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.
  42171. *checkreportforgeneralfields Performs startup chores necessary to save out copies of general fields on disk when a report is rendered.
  42172. *imagesrcattr_assign 
  42173. *imagefilebasename_assign 
  42174. *copyimagefilestoexternalfilelocation_assign 
  42175. *initializefilecopysettings Provides required environment settings for non-filebased images to be copied to files at runtime.
  42176. *adjustshapeaspectratio Adjust the height and width for the rendered contents of a Picture layout control to give accurate aspect ratio for the current file.
  42177. *fillalphaattr_assign 
  42178. *fillredattr_assign 
  42179. *fillgreenattr_assign 
  42180. *fillblueattr_assign 
  42181. *penalphaattr_assign 
  42182. *penredattr_assign 
  42183. *pengreenattr_assign 
  42184. *penblueattr_assign 
  42185. *fontnameattr_assign 
  42186. *fontstyleattr_assign 
  42187. *fontsizeattr_assign 
  42188. ListenerType = 3
  42189. FRXDataSession = -1
  42190. lexpandfields = .F.
  42191. _memberdata = 
  42192.      419<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"/></VFPData>
  42193. Name = "foxylistener"
  42194. reportlisteners.h
  42195. foxpro_reporting.h
  42196. reportlisteners_locs.h
  42197. pr_htmllistener15
  42198. }oimagesrc = NULL
  42199. oimagedest = NULL
  42200. oprivategraphics = NULL
  42201. opoint = NULL
  42202. orect = NULL
  42203. lonthisrun = .F.
  42204. iimageinstanceindex = 0
  42205. margin = 10
  42206. snamespace = ("")
  42207. mimetype = ("image/png")
  42208. forceon = .F.
  42209. gdipluslib = ("")
  42210. _memberdata = 
  42211.     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>
  42212. gdipluslibmodule = ("")
  42213. simagepath = ("")
  42214. simagefullpath = ("")
  42215. Name = "gfxoutputclip"
  42216. TVVALUE
  42217. GDIPLUSLIBI
  42218. TVVALUE
  42219. MIMETYPE9
  42220. TVVALUE
  42221. FORCEON
  42222. EXCEPTION
  42223. DATASESSIONv
  42224. BEFOREREPORT
  42225. RENDER
  42226. AFTERREPORT
  42227. TOLISTENER
  42228. TCMETHODTOKEN
  42229. TP12    
  42230. LISESSION
  42231. LISELECT
  42232. LIFRXRECNO
  42233. LVRETURN
  42234. LIDRIVER
  42235. LISTENERSUPPORTSSAVECLIP
  42236. FRXDATASESSION
  42237. AIMAGECOPIES
  42238. IIMAGEINSTANCEINDEX
  42239. MEMBERDATAALIAS
  42240. SNAMESPACE
  42241. LONTHISRUN
  42242. FORCEON
  42243. SETUP
  42244. FFCGRAPHICS
  42245. GETFRXRECNO
  42246. FRXRECNO
  42247. SETUPIMAGECLIP
  42248. OBJTYPE
  42249. SAVEIMAGECLIPS
  42250. CLEANUPX
  42251. IIMAGEINSTANCEINDEX
  42252. AIMAGECOPIES
  42253. NPAGENO
  42254. EDEVICE
  42255. NDEVICETYPE
  42256. NLEFT
  42257. NWIDTH
  42258. NHEIGHT    
  42259. NCLIPLEFT
  42260. NCLIPTOP
  42261. NCLIPWIDTH
  42262. NCLIPHEIGHT
  42263. LABIND
  42264. SAVEIMAGECLIPS
  42265. TOLISTENER
  42266. TNLEFT
  42267. TNTOP
  42268. TNWIDTH
  42269. TNHEIGHT
  42270. TVCONTENTSTOBERENDERED
  42271. TLIMAGECONTROL
  42272. LCFILENAME
  42273. IIMAGEINSTANCEINDEX
  42274. AIMAGECOPIES
  42275. CLASS
  42276. GETIMAGEEXT
  42277. SIMAGEPATH
  42278. PAGENO
  42279. targetFileName
  42280. OutputPage
  42281. outputPageClip
  42282. TOLISTENER
  42283. TIPAGE
  42284. LISTENERSUPPORTSSAVECLIP
  42285. LCTEMPFILE
  42286. LIPAGEINDEX
  42287. LIIMAGEINDEX
  42288. LISTARTPAGE    
  42289. LIENDPAGE
  42290. OPOINT
  42291. PAGETOTAL
  42292. SIMAGEFULLPATH
  42293. TARGETFILENAME
  42294. SIMAGEPATH
  42295. AIMAGECOPIES
  42296. IIMAGEINSTANCEINDEX
  42297. OUTPUTPAGE    
  42298. OIMAGESRC
  42299. CREATEFROMFILE
  42300. OIMAGEDEST
  42301. CREATE
  42302. MARGIN
  42303. OPRIVATEGRAPHICS
  42304. CREATEFROMIMAGE
  42305. ORECT
  42306. DRAWIMAGEPORTIONAT
  42307. SAVETOFILE
  42308. MIMETYPE!
  42309. MIMETYPE
  42310. gpPoint
  42311. _gdiplus.vcx
  42312. gpPoint
  42313. externalFileLocation
  42314. OutputPage
  42315. outputPageClip
  42316. gpBitMap
  42317. gpBitMap
  42318. gpPoint
  42319. gpRectangle
  42320. gpGraphics
  42321. TOLISTENER
  42322. LONTHISRUN
  42323. GDIPLUSLIB
  42324. FFCGRAPHICS
  42325. CLASSLIBRARY
  42326. LOTEMP
  42327. GDIPLUSLIBMODULE
  42328. EXTERNALFILELOCATION
  42329. SIMAGEPATH
  42330. SIMAGEFULLPATH
  42331. LISTENERSUPPORTSSAVECLIP    
  42332. OIMAGESRC
  42333. OIMAGEDEST
  42334. OPOINT
  42335. ORECT
  42336. OPRIVATEGRAPHICSv
  42337. TVVALUE
  42338. GDIPLUSLIBMODULE
  42339. TOLISTENER
  42340. TLACTINPAGEDMODE
  42341. LISTENERTYPE
  42342. TOLISTENER
  42343. LONTHISRUN
  42344. LISTENERSUPPORTSSAVECLIP
  42345. SIMAGEPATH
  42346. SIMAGEFULLPATH    
  42347. OIMAGESRC
  42348. OIMAGEDEST
  42349. OPRIVATEGRAPHICS
  42350. OPOINT
  42351. ORECT;
  42352. TVNEWVAL
  42353. MARGIN.
  42354. Spacefold.LSN.gfxOutputClip
  42355. SNAMESPACE
  42356. CLEANUP
  42357. gdipluslib_assign,
  42358. mimetype_assign
  42359. forceon_assign`
  42360. applyfx
  42361. getcurrentclipfilename
  42362. outputpageclip
  42363. setupimageclip
  42364. saveimageclipsH
  42365. getimageext
  42366. setup
  42367. gdipluslibmodule_assign
  42368. listenersupportssaveclipl
  42369. cleanupB
  42370. margin_assignp
  42371. Destroy
  42372. Class
  42373. Pixels
  42374. reportlisteners.h
  42375. FRXDataSession = -1
  42376. thermform = .NULL.
  42377. thermformheight = 40
  42378. thermformwidth = 356
  42379. thermmargin = 5
  42380. thermformcaption = ("")
  42381. reportstartrundatetime = (DTOT({}))
  42382. reportstoprundatetime = (DTOT({}))
  42383. includeseconds = .T.
  42384. secondstext = ("secs")
  42385. escapereference = ("")
  42386. onescapecommand = ("")
  42387. thermcaption = 
  42388.      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)]
  42389. initstatustext = ("")
  42390. prepassstatustext = ("")
  42391. runstatustext = ("")
  42392. percentdone = (0)
  42393. currentrecord = (0)
  42394. drivingaliascurrentrecno = (0)
  42395. frxbandrecno = (0)
  42396. designateddriver = ("")
  42397. successorsys2024 = ("N")
  42398. thermprecision = (0)
  42399. _memberdata = 
  42400.     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>
  42401. Name = "updatelistener"
  42402. control
  42403. pr_ctl32_progressbar.vcx
  42404. ctl32_progressbar
  42405. xmlmode 0 = data only, 1 = RDL only, 2 = data and RDL
  42406. 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
  42407. pagenodes Holds page-level output during a report run.
  42408. currentband Holds information about the band for which output is currently being generated during a report run.
  42409. currentdocument Holds information about the XML document for which output is currently being generated during a report run.
  42410. currentpage Holds information about the page for which output is currently being generated during a report run.
  42411. columnnodes Holds column-level output during a report run.
  42412. currentcolumn Holds information about the column for which output is currently being generated during a report run.
  42413. 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.
  42414. 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.
  42415. xsltprocessorrdl Holds an RDL-specific processor object, reserved for future use.
  42416. 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.
  42417. datanodes Holds non-formatting output (title, detail, group, and summary band objects) during a report run.
  42418. includeformattinginlayoutobjects Indicates whether formatting information such as positioning attributes should be included in the report XML.
  42419. includebandswithnoobjects Indicates whether band-level information for bands with no contents should be included in the XML.
  42420. 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.
  42421. topattr Supplies the name of the XML attribute used to show topmost position for a layout object.
  42422. leftattr Supplies the name of the XML attribute used to show leftmost position for a layout object.
  42423. heightattr Supplies the name of the XML attribute used to show height for a layout object.
  42424. widthattr Supplies the name of the XML attribute used to show width for a layout object.
  42425. contattr Supplies the name of the attribute used to show continuation type for a layout object that can span bands or pages.
  42426. includedatasourcesinvfprdl Indicates whether information about the source tables, relations, indexes, etc should be included in the VFPRDL metadata section of the report XML.
  42427. applyusertransform Indicates whether XMLListener should automatically apply an XSLT transform at the conclusion of a report run.
  42428. 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.
  42429. includepage Evaluates whether the current page is part of the output page set and should be included in the XML document result.
  42430. includedatatypeattributes Indicates whether Data Type and Text information available in EvaluateContents should be included in the XML nodes generated for Field controls.
  42431. datatypeattr Supplies the name of the XML attribute used to show the datatype of the evaluated expression for a field control layout object.
  42432. 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.
  42433. 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.
  42434. evaluatecontentsvalues An EMPTY object reference to hold changed formatting values during Rendering.
  42435. pageimageattr Supplies the name of the XML attribute used to show the filename for an associated generated page image file.
  42436. applyrdltransform Indicates whether an RDL-Only transformation is available and should be applied to XML output after an RDL-Only report run.
  42437. successorgfxnorender Private gfxNoRender object instance used for rendering checks specific to this output target when this reportListener is a Successor.
  42438. *xmlrawtag Used to formulate the contents of an XML tag when XML Listener is writing the XML document as raw data to a file.
  42439. *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.
  42440. *xmlrawconv Used to convert any control characters to entity references when XML Listener is writing raw XML data to a file.
  42441. *writeraw Used to write raw XML data to a file.
  42442. *includebreaksindata_assign 
  42443. *xmlmode_assign 
  42444. *resetreport Resets information for a report-level node during the production of an XML document that may span multiple reports.
  42445. *applyxslt Provides generic facilities for applying XSLT to XML.
  42446. *currentdocument_assign 
  42447. *idattribute_assign 
  42448. *idrefattribute_assign 
  42449. *xsltprocessorrdl_assign 
  42450. *xsltprocessoruser_assign 
  42451. *resetdocument Resets the XML document after a report run.
  42452. *verifyncname Generic method to validate strings as XML-standard NCNames.
  42453. *includeformattinginlayoutobjects_assign 
  42454. *includebandswithnoobjects_assign 
  42455. *verifynodenames Method called during XML Listener's augmented version of VerifyConfigTable to check all node values in the configuration table for XML validity.
  42456. *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.
  42457. *nopageeject_assign 
  42458. *loadprocessorobject Provides a generic means to load an XSLT processor object from a string representing an XSLT document or a filename.
  42459. *getrawformattinginfo Formulates the appropriate formatting attributes for an element when XMLListener is streaming XML to a file.
  42460. *topattr_assign 
  42461. *leftattr_assign 
  42462. *heightattr_assign 
  42463. *widthattr_assign 
  42464. *contattr_assign 
  42465. *getvfprdlcontents Translates report definition layout metadata, from the FRX and the current report run, into an XML format useful to other applications.
  42466. *includedatasourcesinvfprdl_assign 
  42467. *getpathedimageinfo Supplies a fully-pathed filename for an image file included in the report, using the original relative-path information stored in the FRX.
  42468. *applyusertransformtooutput Applies a user-specified XSLT to XML output at the conclusion of a report run.
  42469. *applyusertransform_assign 
  42470. *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.
  42471. *setdomformattinginfo Formulates the appropriate formatting attributes for an element when XMLListener is using the DOM to create XML.
  42472. *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.
  42473. *insertxmlconfigrecords Adds a record to the configuration table describing a default XML node when XML Listener is creating or editing a shared configuration table.
  42474. *xsltparameters_assign 
  42475. *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.
  42476. *preparefrxcopy Prepares FRX alias or copy for use in creating VFP-RDL contents.
  42477. *removefrxcopy Removes FRX copy used in preparing VFP-RDL.
  42478. *adjustxsltparameter Adds, changes, or removes a parameter in the XSLT Parameter Collection, creating the collection if necessary. Params: tvValue, tsKey, tlRemoveOnly.
  42479. *getrunnodecontents Translates information dynamically generated and provided in the runCollector member into an XML format useful to other applications.
  42480. *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.
  42481. *includedatatypeattributes_assign 
  42482. *datatypeattr_assign 
  42483. *datatextattr_assign 
  42484. *initializeformattingchangescursor Evaluates requirements for a cursor to hold information gathered for Field layout controls during this report run and creates it if necessary.
  42485. *formatdatavalue Provides opportunity to re-format data value delivered in EvaluateContents appropriately for text/TRANSFORM'd version.
  42486. *pageimageattr_assign 
  42487. *evaluatestringtoboolean Casts a string to .T. or .F..
  42488. *applyrdltransform_access 
  42489. *fixmsxmlobjectfordtds Adjust MSXML document objects to load XML with embedded DTDs properly.
  42490. *frxcharsetsinuse Determine whether the FRX for a report run has layout elements with explicit charset instructions.
  42491. thermform Holds an object reference to the user feedback form.
  42492. thermformheight Holds the height of the user feedback form, in pixels.  
  42493. thermformwidth Holds the width of the user feedback form, in pixels.  
  42494. 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.
  42495. thermformcaption Holds the value used to set the title of the user feedback form.
  42496. reportstartrundatetime A datetime value indicating when the last report generation run began.
  42497. 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.
  42498. includeseconds Indicates whether the default user feedback message should include timing data.
  42499. secondstext Provides the text message included to describe the time value in the default user feedback message during a report, when IncludeSeconds is .T.
  42500. setnotifycursor Saves the state of SET NOTIFY CURSOR previous to the report run, for later restoration.
  42501. setescape Saves the state of SET ESCAPE previous to the report run, for later restoration.
  42502. escapereference Holds the name of a public variable used to facilitate interrupting a report run.
  42503. onescapecommand Saves the user's previous ON ESCAPE command, if any, for restoration after the report run.
  42504. 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.
  42505. initstatustext Provides the user message shown when user feedback first appears.
  42506. prepassstatustext User feedback message for use when the report is in a pre-generation pass to calculate _RECORDTOTAL.
  42507. runstatustext Provides a user message shown during the course of a report run.
  42508. 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.
  42509. currentrecord Holds the current record relative to the recordtotal in scope for the current report run.
  42510. 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.
  42511. 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.
  42512. designateddriver Original selected alias for the report.
  42513. 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.
  42514. thermprecision The number of places (precision) to use for evaluating and (by default) showing the percentage done.
  42515. *createtherm Creates and configures the "update" feedback window.
  42516. *secondstext_assign 
  42517. *thermformcaption_assign 
  42518. *thermformheight_assign 
  42519. *thermformwidth_assign 
  42520. *thermmargin_assign 
  42521. *includeseconds_assign 
  42522. *getparentwindowref Provides a window reference for the top form in which the user feedback window should appear.
  42523. *setthermformcaption Sets the user feedback window title using the ThermFormCaption property.
  42524. *thermcaption_assign 
  42525. *initstatustext_assign 
  42526. *prepassstatustext_assign 
  42527. *runstatustext_assign 
  42528. *resetuserfeedback Sets user feedback to an initialized state.
  42529. *getreportscopedriver Adjusts the alias driving CommandClauses.RecordTotal at the beginning of a report  when the DrivingAlias is engaged in one-to-many relationships.
  42530. *synchstatus Compares driving recno with currrently-saved information to evaluate need to update user feedback.
  42531. *thermprecision_assign 
  42532. FRXDataSession = -1
  42533. lexpandfields = .F.
  42534. _memberdata = 
  42535.      619<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"/></VFPData>
  42536. Name = "dbflistener"
  42537. FRXDataSession = -1
  42538. readconfiguration = (0)
  42539. targetfileext = ("TXT")
  42540. targetfilename = (FORCEPATH(SYS(2015),SYS(2023)))
  42541. targethandle = -1
  42542. configurationobjtype = 1000
  42543. configurationtable = ("")
  42544. externalfilelocation = ("")
  42545. pageimagetype = 0
  42546. pageimageextension = ("")
  42547. currentpageimagefilename = ("")
  42548. _memberdata = 
  42549.     2143<VFPData>
  42550.  <memberdata name="closetargetfile" type="method" display="closeTargetFile" favorites="False" />
  42551.  <memberdata name="configurationobjtype" type="property" display="configurationObjtype" favorites="True" />
  42552.  <memberdata name="configurationtable" type="property" display="configurationTable" favorites="False" />
  42553.  <memberdata name="createconfigtable" type="method" display="createConfigTable" favorites="True" />
  42554.  <memberdata name="getconfigtable" type="method" display="getConfigTable" favorites="True" />
  42555.  <memberdata name="opentargetfile" type="method" display="openTargetFile" favorites="False" />
  42556.  <memberdata name="readconfiguration" type="property" display="readConfiguration" favorites="True" />
  42557.  <memberdata name="setconfiguration" type="method" display="setConfiguration" favorites="True" />
  42558.  <memberdata name="targetfileext" type="property" display="targetFileExt" favorites="True" />
  42559.  <memberdata name="targetfilename" type="property" display="targetFileName" favorites="True" />
  42560.  <memberdata name="targethandle" type="property" display="targetHandle" favorites="True" />
  42561.  <memberdata name="verifyconfigtable" type="property" display="verifyConfigTable" favorites="True" />
  42562.  <memberdata name="verifytargetfile" type="method" display="verifyTargetFile" favorites="True" />
  42563. <memberdata name="externalfilelocation" type="property" display="externalFileLocation" favorites="True" />
  42564. <memberdata name="pageimagetype" type="property" display="pageImageType" favorites="True"/>
  42565. <memberdata name="getpageimageextension" type="method" display="getPageImageExtension"/>
  42566. <memberdata name="pageimageextension" type="property" display="pageImageExtension"/>
  42567. <memberdata name="generatepageimagefilename" type="method" 
  42568. display="generatePageImageFileName"/>
  42569. <memberdata name="supportspageimages" type="method" display="supportsPageImages"/>
  42570. <memberdata name="outputpageimage" type="method" display="outputPageImage"/>
  42571. <memberdata name="currentpageimagefilename" display="currentPageImageFilename" type="property"/>
  42572. <memberdata name="makeexternalfilelocationreachable" display="makeExternalFileLocationReachable" type="method"/>
  42573. </VFPData>
  42574. Name = "utilityreportlistener"
  42575. B_memberdata XML Metadata for customizable properties
  42576. 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.
  42577. currentrecord Holds the current record relative to the recordtotal in scope for the current report run.
  42578. designateddriver Original selected alias for the report.
  42579. 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.
  42580. escapereference Holds the name of a public variable used to facilitate interrupting a report run.
  42581. 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.
  42582. includeseconds Indicates whether the default user feedback message should include timing data.
  42583. initstatustext Provides the user message shown when user feedback first appears.
  42584. onescapecommand Saves the user's previous ON ESCAPE command, if any, for restoration after the report run.
  42585. 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.
  42586. prepassstatustext User feedback message for use when the report is in a pre-generation pass to calculate _RECORDTOTAL.
  42587. reportstartrundatetime A datetime value indicating when the last report generation run began.
  42588. 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.
  42589. runstatustext Provides a user message shown during the course of a report run.
  42590. secondstext Provides the text message included to describe the time value in the default user feedback message during a report, when IncludeSeconds is .T.
  42591. 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.
  42592. thermformcaption Holds the value used to set the title of the user feedback form.
  42593. thermformheight Holds the height of the user feedback form, in pixels.  
  42594. thermformwidth Holds the width of the user feedback form, in pixels.  
  42595. 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.
  42596. setescape Saves the state of SET ESCAPE previous to the report run, for later restoration.
  42597. setnotifycursor Saves the state of SET NOTIFY CURSOR previous to the report run, for later restoration.
  42598. isrunning Indicates whether a report run is in progress.
  42599. drivingalias Stores the effective driving alias for a report from the point of view of the therm update.
  42600. thermprecision The number of places (precision) to use for evaluating and (by default) showing the percentage done.
  42601. 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.
  42602. *applyfx Implements required API for an object included in the FXListener FXs collection.
  42603. *includeseconds_assign 
  42604. *initstatustext_assign 
  42605. *prepassstatustext_assign 
  42606. *runstatustext_assign 
  42607. *secondstext_assign 
  42608. *thermcaption_assign 
  42609. *thermformcaption_assign 
  42610. *thermformheight_assign 
  42611. *thermformwidth_assign 
  42612. *thermmargin_assign 
  42613. *getparentwindowref Provides a window reference for the top form in which the user feedback window should appear.
  42614. *getreportscopedriver Adjusts the alias driving CommandClauses.RecordTotal at the beginning of a report  when the DrivingAlias is engaged in one-to-many relationships.
  42615. *resetuserfeedback Sets user feedback to an initialized state.
  42616. *setthermformcaption Sets the user feedback window title using the ThermFormCaption property.
  42617. *synchstatus Compares driving recno with currrently-saved information to evaluate need to update user feedback.
  42618. *dostatus Delegate for ReportListener DoStatus method.
  42619. *clearstatus Delegate for ReportListener ClearStatus method.
  42620. *updatestatus Delegate for ReportListener UpdateStatus method.
  42621. *pushuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  42622. *popuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  42623. *synchuserinterface Set up therm form to match latest user specifications.
  42624. *setupreport Handles ReportListener's BeforeReport status preparation chores.
  42625. *thermprecision_assign 
  42626. *persistbetweenruns_assign 
  42627. 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.
  42628. targetfileext Provides the default file extension for file output.
  42629. 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.
  42630. 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 .
  42631. configurationobjtype Holds the reserved value used to indicate that a configuration table row provides dynamic configuration information at runtime.
  42632. configurationtable Holds the name of the current configuration table.
  42633. 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. 
  42634. 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.
  42635. pageimageextension Caches appropriate image file extension for current pageImageType.
  42636. 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.
  42637. *readconfiguration_assign 
  42638. *setconfiguration Checks the current configuration table for dynamic information in records of appropriate type, and executes these instructions if found.
  42639. *getconfigtable Assesses and provides the name of the current configuration table, optionally creating it on disk if it is not available. 
  42640. *createconfigtable Creates a configuration table on demand.
  42641. *opentargetfile Initializes a file for output purposes.
  42642. *verifytargetfile Assures that the nominated filename and its network location are available at the beginning of a file-based report run.
  42643. *targetfileext_assign 
  42644. *targetfilename_assign 
  42645. *targethandle_assign 
  42646. *closetargetfile Finalizes file output.
  42647. *verifyconfigtable Ascertains that the format and and contents of the configuration meet requirements, adjusting it if necessary.
  42648. *configurationobjtype_access 
  42649. *externalfilelocation_assign 
  42650. *pageimagetype_assign 
  42651. *getpageimageextension Provides the appropriate file extension for the current pageImageType value.
  42652. *generatepageimagefilename Creates a filename for a generated page image file.
  42653. *supportspageimages Evaluates whether the current reporting mode supports generating page images.
  42654. *outputpageimage Use OutputPage method to create a page image file according to current report's requirements.
  42655. *currentpageimagefilename_assign 
  42656. *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.
  42657. lignoreerrors Provides a flag to determine how this class handles activities subsequent to an error.
  42658. appname Localizable application name string for use in user feedback.
  42659. 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.
  42660. lasterrormessage
  42661. isrunningreports Provides a flag to indicate this ReportListener is running a series of reports using its collection.
  42662. reportfilenames Stores the filenames of reports to be managed and executed in a series.
  42663. reportclauses Stores REPORT FORM command clauses associated with each report in the ReportFileNames collection.
  42664. listeners Collection of ReportListeners associated with each report in this Listener's ReportFileNames collection.
  42665. listenerdatasession Saves the DataSessionID in which the Listener originated.
  42666. reportusesprivatedatasession Provides a flag to indicate whether this report shares the data session from which it was executed or maintains a private data session.
  42667. 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.
  42668. successor An object reference to the next Listener in a succession chain.
  42669. sharedgdiplusgraphics Provides a readwrite copy of the the Engine's GDIPlusGraphics handle which the Listener can share with a succession chain.
  42670. sharedpageheight Shares information gathered by the GetPageHeight method with other Listeners linked in a succession chain.
  42671. sharedpagewidth Shares information gathered by the GetPageWidth method with other Listeners linked in a succession chain.
  42672. drivingalias Holds the alias of the table or cursor driving the report scope.
  42673. _memberdata XML Metadata for customizable properties
  42674. sharedoutputpagecount Provides a readwrite copy of the the Engine's OutputPageCount property which the Listener can share with a succession chain.
  42675. sharedpageno Provides a readwrite copy of the the Engine's PageNo property which the Listener can share with a succession chain.
  42676. sharedpagetotal Provides a readwrite copy of the the Engine's PageTotal property which the Listener can share with a succession chain.
  42677. 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
  42678. 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.
  42679. 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. 
  42680. pagelimitquietmode Indicates whether the class provides user feedback when the report results are limited because the run exceeded the specified pageLimit.
  42681. 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.
  42682. 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.
  42683. frxheaderrecno Stores the header record number for the Windows platform in cross-platform FRXs.
  42684. sharedlistenertype Provides a readwrite copy of the the Engine's ListenerType property which the Listener can share with a succession chain.
  42685. commandclausesfile Allows saving and restoring of the original CommandClauses.File value by any derived class that permits dynamic FRX-fileswapping during LoadReport.
  42686. haderror Provides a flag indicating whether an error occurred.
  42687. *allowmodalmessages_assign 
  42688. *lignoreerrors_assign 
  42689. *prepareerrormessage Organizes common error information values (nError, cMethod, nLine, cName, cMessage, cCodeLine) into a coherent string for presentation to the user.
  42690. *pushglobalsets Provides a hook for Listeners to save global settings not scoped to a data session for later restoration with PopGlobalSets.
  42691. *popglobalsets Provides a hook for Listeners to restore global settings not scoped to a data session after saving them with PushGlobalSets.
  42692. *clearerrors Resets the class's error status.
  42693. *getlasterrormessage Provides information about the last error that occurred.
  42694. *addreport Adds to the class's collection of ReportFileNames, optionally associating REPORT FORM clauses and a listener for the specified report.
  42695. *removereports Removes report filenames as well as associated clauses and listeners from this Listeners' various collections.
  42696. *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.
  42697. *setfrxdatasessionenvironment Provides a hook for classes to determine the datasession-scoped SETs they wish to add to the private FRX data session.
  42698. ^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.
  42699. *invokeoncurrentpass Provides a hook for listeners to evaluate whether they wish to generate output or perform other actions during the current report execution pass.
  42700. *resetdatasession Sets the DataSessionID to the session where the Listener originated.
  42701. *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.
  42702. *setcurrentdatasession Sets the DataSessionID to the data session holding report's data tables.
  42703. *quietmode_assign 
  42704. *issuccessor_assign 
  42705. *successor_assign 
  42706. *getfrxstartupinfo Provides a hook for gathering FRX information during BeforeReport method processing.
  42707. *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.
  42708. *appname_assign 
  42709. *sharedgdiplusgraphics_assign 
  42710. *sharedpageheight_assign 
  42711. *sharedpagewidth_assign 
  42712. *listenertype_assign 
  42713. *outputtype_assign 
  42714. *sharedoutputpagecount_assign Provides a readwrite copy of the the Engine's OutputPageCount property which the Listener can share with a succession chain.
  42715. *sharedpageno_assign 
  42716. *sharedpagetotal_assign 
  42717. *setfrxrunstartupconditions Hook method called in BeforeReport, allowing you to set up CommandClauses properties or other attributes required by your class.
  42718. *pagelimit_assign 
  42719. *pagetoplimit_assign 
  42720. *pagetaillimit_assign 
  42721. *pagelimitquietmode_assign 
  42722. *pagelimitinsiderange_assign 
  42723. *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.
  42724. *resetcalladjustobjectsize Evaluates whether this reportlistener's activity requires calls to AdjustObjectSize method for any layout controls on this report run.
  42725. *resetcallevaluatecontents Evaluates whether this reportlistener's activity requires calls to EvaluateContents method for any layout controls on this report run.
  42726. *resetruncollector Abstract method to clean up runCollector object at whatever point is appropriate in a given implementation.
  42727. *fillruncollector Abstract method to set up up runCollector object with contents at whatever point is appropriate in a given implementation.
  42728. *sharedlistenertype_assign 
  42729. *commandclausesfile_assign 
  42730. *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.
  42731. *removefrxswapcopy Removes an FRX file and its matching FRT file from disk, if present.
  42732. *isfrxswapcopypresent Indicates whether the original CommandClauses.File value has been swapped for a temporary copy during a report run.
  42733. *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.
  42734. *shellexec 
  42735. BorderStyle = 2
  42736. Height = 40
  42737. Width = 356
  42738. DoCreate = .T.
  42739. AutoCenter = .T.
  42740. Caption = "ThermForm"
  42741. ControlBox = .F.
  42742. HalfHeightCaption = .T.
  42743. MaxButton = .F.
  42744. MinButton = .F.
  42745. AlwaysOnTop = .T.
  42746. AllowOutput = .F.
  42747. _memberdata = 
  42748.     3665<VFPDATA><memberdata name="applyfx" display="applyFX" type="method"/>
  42749. <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" /> 
  42750. <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"/>
  42751. </VFPDATA>
  42752. successorsys2024 = ("N")
  42753. currentrecord = (0)
  42754. designateddriver = ("")
  42755. drivingaliascurrentrecno = (0)
  42756. escapereference = ("")
  42757. frxbandrecno = (0)
  42758. includeseconds = .T.
  42759. initstatustext = ("")
  42760. onescapecommand = ("")
  42761. percentdone = (0)
  42762. prepassstatustext = ("")
  42763. reportstartrundatetime = (DTOT({}))
  42764. reportstoprundatetime = (DTOT({}))
  42765. runstatustext = ("secs")
  42766. secondstext = ("")
  42767. thermcaption = 
  42768.      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)]
  42769. thermformcaption = ("")
  42770. thermformheight = (40)
  42771. thermformwidth = (356)
  42772. thermmargin = (5)
  42773. setescape = .F.
  42774. setnotifycursor = .F.
  42775. isrunning = .F.
  42776. drivingalias = ("")
  42777. thermprecision = (2)
  42778. persistbetweenruns = .F.
  42779. Name = "fxtherm"
  42780. +tPROCEDURE dodebug
  42781. 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
  42782. IF THIS.TargetHandle > 0 
  42783.    LOCAL m.liIndex, m.loObj, m.lvParam, m.liObjIndex, m.liMembers, laMembers[1]
  42784.    FWRITE( THIS.TargetHandle, m.p0 )
  42785.    FOR m.liIndex = 1 TO m.pcount
  42786.       m.lvParam = EVAL("p"+TRANS(liIndex))
  42787.       IF THIS.Verbose AND VARTYPE(m.lvParam) = "O"
  42788.          m.liMembers = AMEMBERS(laMembers, m.lvParam) && ,0,"G"
  42789.          FOR m.liIndex = 1 TO m.liMembers
  42790.             IF TYPE("lvParam."+laMembers[m.liIndex]) # "U"
  42791.                FWRITE(THIS.TargetHandle, ;
  42792.                   ",Obj."+laMembers[m.liIndex]+"="+TRANSFORM(EVAL("lvParam."+laMembers[m.liIndex])) )
  42793.             ENDIF
  42794.      
  42795.          ENDFOR
  42796.       ELSE
  42797.          FWRITE(THIS.TargetHandle, ","+TRANSF(m.lvParam))
  42798.       ENDIF
  42799.    ENDFOR
  42800.    FPUTS(THIS.TargetHandle, "")
  42801.    IF THIS.Verbose
  42802.       THIS.setCurrentDataSession()
  42803.       FWRITE(THIS.TargetHandle, ;
  42804.           "Listener.PageNo=" + IIF(THIS.sharedPageNo=0,;
  42805.                                    TRANSFORM(THIS.PageNo),  ;
  42806.                                    TRANSFORM(THIS.sharedPageNo))+ ", " + ;
  42807.           "_PAGENO="+TRANSFORM(_PAGENO))
  42808.       IF (NOT EMPTY(THIS.DrivingAlias)) AND USED(THIS.DrivingAlias)
  42809.          FWRITE(THIS.TargetHandle, ", " + THIS.DrivingAlias + " recno=" + TRANSFORM(RECNO(THIS.Drivingalias)))   
  42810.       ENDIF   
  42811.       
  42812.       IF NOT EMPTY(THIS.TargetAlias)
  42813.       
  42814.          FWRITE(THIS.TargetHandle, ", TargetAlias=" + THIS.TargetAlias + ", targetRecno=" + TRANSFORM(RECNO(THIS.TargetAlias)))         
  42815.       
  42816.       ENDIF
  42817.       FPUTS(THIS.TargetHandle, "")   
  42818.       THIS.resetDataSession()
  42819.    ENDIF
  42820.    FFLUSH(THIS.targetHandle)
  42821. ENDIF   
  42822. ENDPROC
  42823. PROCEDURE dodebugcommandclauses
  42824. LPARAMETERS m.tvCommand, m.tcHeader
  42825. IF VARTYPE(m.tvCommand) = "O" AND THIS.TargetHandle > 0 
  42826.    LOCAL m.liIndex, laMembers[1], m.liMembers
  42827.    FPUTS( THIS.TargetHandle, REPL("-",30) )   
  42828.    FPUTS( THIS.TargetHandle, "MEMBERS:" )
  42829.    m.liMembers = AMEMBERS(laMembers, THIS) && ,0,"G"
  42830.    FOR m.liIndex = 1 TO m.liMembers
  42831.       IF TYPE("THIS."+laMembers[m.liIndex]) # "U"
  42832.          FPUTS(THIS.TargetHandle, "."+laMembers[m.liIndex]+"="+TRANSFORM(EVAL("THIS."+laMembers[m.liIndex])) )
  42833.       ENDIF
  42834.    ENDFOR
  42835.    FPUTS( THIS.TargetHandle, REPL("-",30) )   
  42836.    FPUTS( THIS.TargetHandle, tcHeader )
  42837.       
  42838.    m.liMembers = AMEMBERS(laMembers, m.tvCommand)   
  42839.    IF m.liMembers = 0
  42840.       FPUTS(THIS.TargetHandle, "... NO MEMBERS")
  42841.    ELSE
  42842.       FOR m.liIndex = 1 TO m.liMembers
  42843.         FPUTS(THIS.TargetHandle, "."+laMembers[m.liIndex]+"="+TRANSFORM(EVAL("tvCommand."+laMembers[m.liIndex])) )
  42844.       ENDFOR
  42845.      
  42846.    ENDIF   
  42847.    FPUTS( THIS.TargetHandle, REPL("-",30) )      
  42848.    FFLUSH(THIS.targetHandle)
  42849. ENDIF
  42850. ENDPROC
  42851. PROCEDURE verbose_assign
  42852. LPARAMETERS m.vNewVal
  42853. IF VARTYPE(m.vNewVal) = "L"
  42854.    THIS.Verbose = m.vNewVal
  42855. ENDIF   
  42856. ENDPROC
  42857. PROCEDURE OutputPage
  42858. 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
  42859. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42860.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42861. ENDPROC
  42862. PROCEDURE IncludePageInOutput
  42863. 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
  42864. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42865.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42866. RETURN DODEFAULT(m.p1)
  42867. ENDPROC
  42868. PROCEDURE EvaluateContents
  42869. 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
  42870. DODEFAULT(m.p1, m.p2)
  42871. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42872.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42873. ENDPROC
  42874. PROCEDURE CancelReport
  42875. 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
  42876. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42877.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42878. DODEFAULT()
  42879. ENDPROC
  42880. PROCEDURE UnloadReport
  42881. 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
  42882. IF THIS.includeLoadAndUnload 
  42883.    LOCAL lcProgram
  42884.    lcProgram = PROGRAM()
  42885.    THIS.DoDebug(lcProgram, PCOUNT(),;
  42886.         m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42887.    THIS.DoDebugCommandClauses(THIS.CommandClauses,m.lcProgram+ " current CommandClauses")
  42888. ENDIF   
  42889. IF THIS.TargetHandle > 0 AND (NOT THIS.CommandClauses.NoPageEject)
  42890.    THIS.CloseTargetFile()
  42891.    IF NOT THIS.QuietMode
  42892.       MODI FILE (THIS.Targetfilename) NOWAIT
  42893.    ENDIF
  42894. ENDIF   
  42895. DODEFAULT()
  42896. ENDPROC
  42897. PROCEDURE LoadReport
  42898. 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
  42899. DODEFAULT()
  42900. IF THIS.IncludeLoadandUnload 
  42901.   IF THIS.TargetHandle = -1
  42902.      THIS.OpenTargetFile()
  42903.   ENDIF
  42904.   THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42905.       m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42906.   THIS.DoDebugCommandClauses(THIS.CommandClauses,PROGRAM()+ " received CommandClauses")
  42907. ENDIF  
  42908. ENDPROC
  42909. PROCEDURE WriteMethod
  42910. 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
  42911. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42912.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42913. ENDPROC
  42914. PROCEDURE WriteExpression
  42915. 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
  42916. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42917.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42918. ENDPROC
  42919. PROCEDURE UpdateStatus
  42920. 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
  42921. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42922.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42923. DODEFAULT()
  42924. ENDPROC
  42925. PROCEDURE SupportsListenerType
  42926. 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
  42927. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42928.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42929. ENDPROC
  42930. PROCEDURE SaveAsClass
  42931. 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
  42932. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42933.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42934. ENDPROC
  42935. PROCEDURE ResetToDefault
  42936. 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
  42937. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42938.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42939. ENDPROC
  42940. PROCEDURE ReadMethod
  42941. 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
  42942. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42943.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42944. ENDPROC
  42945. PROCEDURE ReadExpression
  42946. 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
  42947. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42948.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42949. ENDPROC
  42950. PROCEDURE OnPreviewClose
  42951. 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
  42952. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42953.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42954. ENDPROC
  42955. PROCEDURE ClearStatus
  42956. 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
  42957. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42958.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42959. DODEFAULT()
  42960. ENDPROC
  42961. PROCEDURE Render
  42962. 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
  42963. IF DODEFAULT( m.p1, @m.p2, @m.p3, @m.p4, @m.p5, @m.p6, @m.p7,@m.p8) #  OUTPUTFX_BASERENDER_NORENDER
  42964.     THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42965.         m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42966. ENDIF
  42967. ENDPROC
  42968. PROCEDURE DoStatus
  42969. 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
  42970. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42971.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42972. DODEFAULT(m.p1)
  42973. ENDPROC
  42974. PROCEDURE BeforeBand
  42975. 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
  42976. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42977.     m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42978. DODEFAULT(m.p1, m.p2)
  42979. IF THIS.Verbose
  42980.    THIS.TargetAlias = ""
  42981.    IF m.p1 = FRX_OBJCOD_DETAIL
  42982.       THIS.SetFRXDataSession()
  42983.       GO m.p2 IN FRX
  42984.       IF NOT EMPTY(FRX.Expr)
  42985.          THIS.TargetAlias = UPPER(EVALUATE(FRX.Expr))
  42986.       ENDIF
  42987.       THIS.resetDataSession()
  42988.    ENDIF
  42989. ENDIF   
  42990. ENDPROC
  42991. PROCEDURE AfterBand
  42992. 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
  42993. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  42994.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  42995. DODEFAULT(m.p1, m.p2)
  42996. ENDPROC
  42997. PROCEDURE AdjustObjectSize
  42998. 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
  42999. DODEFAULT(m.p1, m.p2)
  43000. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  43001.      m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  43002. ENDPROC
  43003. PROCEDURE AddProperty
  43004. 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
  43005. THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  43006.              m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  43007. ENDPROC
  43008. PROCEDURE AfterReport
  43009. 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
  43010. LOCAL m.lcProgram
  43011. m.lcProgram = PROGRAM()
  43012. THIS.DoDebug(m.lcProgram, PCOUNT(), ;
  43013.    m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  43014. THIS.DoDebugCommandClauses(THIS.CommandClauses,m.lcProgram+ " current CommandClauses")
  43015. IF NOT (THIS.IncludeLoadAndUnload OR THIS.CommandClauses.NoPageEject)
  43016.    THIS.CloseTargetFile()
  43017.    IF NOT THIS.QuietMode
  43018.       MODI COMM (THIS.TargetFileName) NOWAIT
  43019.    ENDIF   
  43020. ENDIF   
  43021. DODEFAULT()
  43022. ENDPROC
  43023. PROCEDURE BeforeReport
  43024. 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
  43025.    LOCAL m.lcProgram
  43026.    m.lcProgram = PROGRAM()
  43027.    DODEFAULT()
  43028.    IF THIS.Verbose
  43029.       THIS.setCurrentDataSession()
  43030.    ENDIF
  43031.    IF THIS.TargetHandle = -1 
  43032.       THIS.OpenTargetFile()
  43033.    ENDIF
  43034.   THIS.DoDebug(PROGRAM(), PCOUNT(), ;
  43035.        m.p1, m.p2, m.p3, m.p4, m.p5, m.p6, m.p7, m.p8, m.p9, m.p10, m.p11, m.p12)
  43036.   THIS.DoDebugCommandClauses(THIS.CommandClauses,m.lcProgram+ " received CommandClauses")
  43037.    IF THIS.verbose
  43038.       THIS.resetDataSession()
  43039.    ENDIF      
  43040. ENDPROC
  43041. PROCEDURE opentargetfile
  43042. IF WEXIST(JUSTSTEM(THIS.targetFileName))
  43043.    * because of the MODI FILE NOWAIT,
  43044.    * generate a new filename:
  43045.    THIS.targetFileName = SYS(2015)
  43046. ENDIF
  43047. DODEFAULT()   
  43048. ENDPROC
  43049. PROCEDURE Init
  43050. IF DODEFAULT()
  43051.    THIS.AppName = OUTPUTCLASS_APPNAME_LOC
  43052.    RETURN NOT THIS.hadError 
  43053.    RETURN .F.   
  43054. ENDIF
  43055. ENDPROC
  43056. o_memberdata XML Metadata for customizable properties
  43057. 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.
  43058. currentrecord Holds the current record relative to the recordtotal in scope for the current report run.
  43059. designateddriver Original selected alias for the report.
  43060. 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.
  43061. escapereference Holds the name of a public variable used to facilitate interrupting a report run.
  43062. 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.
  43063. includeseconds Indicates whether the default user feedback message should include timing data.
  43064. initstatustext Provides the user message shown when user feedback first appears.
  43065. onescapecommand Saves the user's previous ON ESCAPE command, if any, for restoration after the report run.
  43066. 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.
  43067. prepassstatustext User feedback message for use when the report is in a pre-generation pass to calculate _RECORDTOTAL.
  43068. reportstartrundatetime A datetime value indicating when the last report generation run began.
  43069. 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.
  43070. runstatustext Provides a user message shown during the course of a report run.
  43071. secondstext Provides the text message included to describe the time value in the default user feedback message during a report, when IncludeSeconds is .T.
  43072. 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.
  43073. thermformcaption Holds the value used to set the title of the user feedback form.
  43074. thermformheight Holds the height of the user feedback form, in pixels.  
  43075. thermformwidth Holds the width of the user feedback form, in pixels.  
  43076. 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.
  43077. setescape Saves the state of SET ESCAPE previous to the report run, for later restoration.
  43078. setnotifycursor Saves the state of SET NOTIFY CURSOR previous to the report run, for later restoration.
  43079. isrunning Indicates whether a report run is in progress.
  43080. drivingalias Stores the effective driving alias for a report from the point of view of the therm update.
  43081. thermprecision The number of places (precision) to use for evaluating and (by default) showing the percentage done.
  43082. 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.
  43083. ndelay
  43084. *applyfx Implements required API for an object included in the FXListener FXs collection.
  43085. *includeseconds_assign 
  43086. *initstatustext_assign 
  43087. *prepassstatustext_assign 
  43088. *runstatustext_assign 
  43089. *secondstext_assign 
  43090. *thermcaption_assign 
  43091. *thermformcaption_assign 
  43092. *thermformheight_assign 
  43093. *thermformwidth_assign 
  43094. *thermmargin_assign 
  43095. *getparentwindowref Provides a window reference for the top form in which the user feedback window should appear.
  43096. *getreportscopedriver Adjusts the alias driving CommandClauses.RecordTotal at the beginning of a report  when the DrivingAlias is engaged in one-to-many relationships.
  43097. *resetuserfeedback Sets user feedback to an initialized state.
  43098. *setthermformcaption Sets the user feedback window title using the ThermFormCaption property.
  43099. *synchstatus Compares driving recno with currrently-saved information to evaluate need to update user feedback.
  43100. *dostatus Delegate for ReportListener DoStatus method.
  43101. *clearstatus Delegate for ReportListener ClearStatus method.
  43102. *updatestatus Delegate for ReportListener UpdateStatus method.
  43103. *pushuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  43104. *popuserfeedbackglobalsets Handles non-session-specific user feedback SETtings and behavior.
  43105. *synchuserinterface Set up therm form to match latest user specifications.
  43106. *setupreport Handles ReportListener's BeforeReport status preparation chores.
  43107. *thermprecision_assign 
  43108. *persistbetweenruns_assign 
  43109. *createtherm 
  43110. *bringwindowtofront 
  43111. FRXDataSession = -1
  43112. QuietMode = .F.
  43113. noutfile = -1
  43114. npagewidth = 0
  43115. npageheight = 0
  43116. nscreendpi = 0
  43117. ldebug = .F.
  43118. ctargetfilename = 
  43119. oactivelistener = .NULL.
  43120. ldefaultmode = .F.
  43121. nimgcounter = 0
  43122. nx0 = 0
  43123. ny0 = 0
  43124. nw0 = 0
  43125. nh0 = 0
  43126. _ctempfolder = .F.
  43127. oimages = 
  43128. cexternalfilelocation = 
  43129. lcopyimagefilestoexternalfilelocation = .T.
  43130. lobjtypemode = .F.
  43131. lopenviewer = .F.
  43132. targetfilename = .F.
  43133. _memberdata = <VFPData><memberdata name="prepareoutput" display="PrepareOutput"/><memberdata name="lobjtypemode" display="lObjTypeMode"/><memberdata name="lopenviewer" display="lOpenViewer"/><memberdata name="targetfilename" display="TargetFileName"/></VFPData>
  43134. Name = "pr_htmllistener15"
  43135. noutfile
  43136. npagewidth
  43137. npageheight
  43138. nscreendpi
  43139. ldebug
  43140. ctargetfilename
  43141. oactivelistener
  43142. ldefaultmode
  43143. nimgcounter
  43144. _ctempfolder
  43145. oimages
  43146. cexternalfilelocation
  43147. lcopyimagefilestoexternalfilelocation
  43148. lobjtypemode
  43149. lopenviewer
  43150. targetfilename
  43151. *outputfromdata 
  43152. *getbandname 
  43153. *getfontstyle 
  43154. *rgbtohex 
  43155. *getcontinuationtype 
  43156. *getpageimg 
  43157. *getpicturefromlistener 
  43158. *processimages 
  43159. *processtext 
  43160. *processlines 
  43161. *processshapes 
  43162. *getlinescnt 
  43163. *cropimage 
  43164. ^apagesimgs[1,0] 
  43165. *renderhtml 
  43166. *prepareoutput 
  43167. %Height = 23
  43168. Width = 23
  43169. FRXDataSession = -1
  43170. AllowModalMessages = (INLIST(_VFP.Startmode, 0, 4))
  43171. QuietMode = (NOT INLIST(_VFP.Startmode, 0, 4))
  43172. appname = ("VFP Report Listener")
  43173. lasterrormessage = ("")
  43174. reportfilenames = (NULL)
  43175. reportclauses = (NULL)
  43176. listeners = (NULL)
  43177. listenerdatasession = 1
  43178. successor = (NULL)
  43179. sharedgdiplusgraphics = 0
  43180. sharedpageheight = 0
  43181. sharedpagewidth = 0
  43182. drivingalias = ("")
  43183. _memberdata = 
  43184.     5169<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"/>
  43185.     <memberdata name="isfrxswapcopypresent" display="isFRXSwapCopyPresent" type="method"/>
  43186.     <memberdata name="adjustreportpagesinfo" display="adjustReportPagesInfo" type="method"/>
  43187.     <memberdata name="haderror" display="hadError"/><memberdata name="shellexec" display="ShellExec"/></VFPData>
  43188. sharedoutputpagecount = 0
  43189. sharedpageno = 0
  43190. sharedpagetotal = 0
  43191. pagelimit = -1
  43192. pagetoplimit = -1
  43193. pagetaillimit = -1
  43194. pagelimitquietmode = .F.
  43195. pagelimitinsiderange = .F.
  43196. runcollector = (NULL)
  43197. frxheaderrecno = 1
  43198. sharedlistenertype = -1
  43199. commandclausesfile = .NULL.
  43200. haderror = .F.
  43201. Name = "_reportlistener"
  43202. PROCEDURE omitrendering
  43203. LPARAMETERS m.toListener, m.tcExpr
  43204. LOCAL m.llNoRender, m.liSession
  43205. IF VARTYPE(m.tcExpr) = "C"
  43206.    m.liSession = SET("DATASESSION")
  43207.    THIS.listener = m.toListener               
  43208.    SET DATASESSION TO m.toListener.CurrentDataSession
  43209.    IF TYPE(m.tcExpr) = "L"
  43210.       m.llNoRender = EVALUATE(m.tcExpr)
  43211.       SET DATASESSION TO m.toListener.FRXDataSession               
  43212.    ELSE
  43213.       SET DATASESSION TO m.toListener.FRXDataSession
  43214.       IF TYPE(m.tcExpr) = "L"
  43215.          m.llNoRender = EVALUATE(m.tcExpr)                 
  43216.      ENDIF
  43217.    ENDIF
  43218.    THIS.listener = NULL
  43219.    SET DATASESSION TO (m.liSession)
  43220. ENDIF            
  43221. RETURN m.llNoRender
  43222. ENDPROC
  43223. PROCEDURE applyfx
  43224. LPARAMETERS m.toListener, m.tcMethodToken, ;
  43225.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  43226.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  43227. LOCAL m.liSession, m.liSelect, m.liFRXRecno, m.liReturn, ;
  43228.       m.llNoRender, m.llSwap, m.lcConditions, m.err AS Exception 
  43229. m.liReturn = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR  
  43230. DO CASE
  43231. CASE m.tcMethodToken == "RENDER" AND ;
  43232.    NOT ISNULL(m.toListener.FFCGraphics)
  43233.    TRY
  43234.       m.liSession = SET("DATASESSION")
  43235.       SET DATASESSION TO m.toListener.FRXDataSession
  43236.       m.liSelect = SELECT(0)
  43237.       IF USED(THIS.noRenderDataAlias) 
  43238.          SELECT (THIS.noRenderDataAlias)
  43239.          m.liFRXRecno =  m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  43240.          LOCATE FOR FrxRecno = m.liFRXRecno AND PreProcess 
  43241.          * there won't be any if it's a Sedna-type build, unless it was a built-in report
  43242.          * to another app and we couldn't make the swap.                    
  43243.          IF FOUND()
  43244.             m.llNoRender = THIS.omitRendering(m.toListener, ALLTRIM(Execute))
  43245.          ENDIF                          
  43246.          IF NOT (m.llNoRender)
  43247.             * rendering override for this instance in the report
  43248.             LOCATE FOR FrxRecno = m.liFRXRecno AND NOT PreProcess
  43249.             IF FOUND()        
  43250.                m.llNoRender = THIS.omitRendering(m.toListener, ALLTRIM(Execute))
  43251.             ENDIF   
  43252.          ENDIF           
  43253.          IF m.llNoRender
  43254.             m.liReturn = OUTPUTFX_BASERENDER_NORENDER
  43255.          ENDIF
  43256.       ENDIF
  43257.    CATCH TO m.err 
  43258.       #IF OUTPUTCLASS_DEBUGGING
  43259.          m.toListener.DoMessage(m.err.Message)
  43260.       #ELSE
  43261.          * could expose this error but won't,
  43262.          * we'll just swallow it
  43263.          * code line here for suspend capabilities
  43264.          m.liReturn = m.liReturn
  43265.       #ENDIF
  43266.    FINALLY
  43267.        SELECT (m.liSelect)
  43268.        SET DATASESSION TO (m.liSession)
  43269.    ENDTRY            
  43270. CASE m.tcMethodToken == "LOADREPORT" AND ;
  43271.     VERSION(4) > "09.00.0000.3504" AND ;
  43272.    (NOT m.toListener.CommandClauses.IsDesignerLoaded) AND ;
  43273.    FILE(m.toListener.CommandClauses.File)
  43274.     * We can't do this in a design session because
  43275.     * of the Designer's lock on the original file.
  43276.     * We also can't do this in SP1 or below, 
  43277.     * or when the report is built in to a different app.
  43278.     * (Note the use of FILE() rather than SYS(2000) here, 
  43279.     * it's okay if it's not on disk.)
  43280.     * We will still handle this at render time if we can't make the swap;
  43281.     * (we just won't get the performance benefits of preprocess-deletion)
  43282.    TRY
  43283.       m.liSession = SET("DATASESSION")
  43284.       SET DATASESSION TO m.toListener.FRXDataSession
  43285.       m.liSelect = SELECT(0)
  43286.       * nb: this is before memberdata is normally available.
  43287.       SELECT 0
  43288.         
  43289.       USE (m.toListener.CommandClausesFile) ;
  43290.           AGAIN NOUPDATE SHARED ALIAS  FRX
  43291.       m.toListener.FRXCursor.UnpackFrxMemberData("FRX",;
  43292.                    m.toListener.MemberDataAlias, m.toListener.FRXDataSession)
  43293.       USE IN FRX
  43294.       IF USED(m.toListener.MemberDataAlias) 
  43295.          SELECT (m.toListener.MemberDataAlias)
  43296.          LOCATE FOR Type = FRX_BLDR_MEMBERDATATYPE AND ;
  43297.                     Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  43298.                     ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER AND ;
  43299.                     NOT EMPTY(Execute)  
  43300.          IF FOUND()           
  43301.             * check to see if we are already working on 
  43302.             * a temporary report.
  43303.             IF (NOT m.toListener.isFRXSwapCopyPresent())
  43304.                * must perform the swap, storing
  43305.                * CommandClauses.File for later use
  43306.                m.llSwap = .T.               
  43307.                m.toListener.prepareFRXSwapCopy(,,.T.)
  43308.             ENDIF   
  43309.             * After creating swap report or ascertaining that
  43310.             * we are already working with a temp report, 
  43311.             * delete the items in that report as required.
  43312.             * BUT FIRST make sure the swap went through as planned.
  43313.             IF m.llSwap AND ;
  43314.                (EMPTY(m.toListener.CommandClauses.File) OR ;
  43315.                 EMPTY(SYS(2000,m.toListener.CommandClauses.File)))
  43316.                m.llSwap = .F.
  43317.                m.toListener.CommandClauses.File = ;
  43318.                  m.toListener.commandClausesFile
  43319.             ENDIF
  43320.             * now if we're positive we're in the right place
  43321.             * and that we have possible memberdata content
  43322.             * we can start deleting records out of the swap copy:
  43323.             IF USED(m.toListener.MemberDataAlias) AND ;
  43324.                NOT (m.toListener.CommandClauses.File == ;
  43325.                     m.toListener.commandClausesFile)
  43326.                USE (m.toListener.CommandClauses.File) IN 0 ;
  43327.                       AGAIN EXCLU ALIAS FRX 
  43328.                       * can't do a NOUP to do the delete.
  43329.                       * since we're in a private copy,  
  43330.                       * we switch this to an
  43331.                       * EXCLU and PACK although it doesn't appear
  43332.                       * to be necessary for the engine's POV.
  43333.                       * This means users of this copy of the 
  43334.                       * FRX don't have to pay attention to
  43335.                       * whether some records are potentially-deleted.
  43336.                SELECT (m.toListener.MemberDataAlias)                
  43337.                SCAN FOR Type = FRX_BLDR_MEMBERDATATYPE AND ;
  43338.                         Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  43339.                         ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER AND ;
  43340.                         NOT EMPTY(Execute)  
  43341.                   m.liRecno = FRXRecno                    
  43342.                   m.llNoRender = THIS.omitRendering(m.toListener,ALLTRIM(Execute))
  43343.                   IF m.llNoRender
  43344.                      SELECT FRX
  43345.                      DELETE ALL FOR RECNO() = m.liRecno
  43346.                      SELECT (m.toListener.MemberDataAlias)
  43347.                   ENDIF   
  43348.                ENDSCAN
  43349.                SELECT FRX
  43350.                PACK
  43351.             ENDIF   
  43352.          ENDIF
  43353.       ENDIF
  43354.    CATCH TO m.err 
  43355.       * revert the swap if we did one
  43356.       * being careful not to remove the original report
  43357.       #IF OUTPUTCLASS_DEBUGGING
  43358.       m.toListener.DoMessage(OUTPUTFX_CONDITIONALRENDERING_UNAVAILABLE_LOC + ;
  43359.                              CHR(13) + m.err.Message )
  43360.       #ENDIF
  43361.       IF m.llSwap 
  43362.           m.toListener.removeFRXSwapCopy(,OUTPUTCLASS_DEBUGGING )           
  43363.       ENDIF   
  43364.    FINALLY
  43365.        IF USED("FRX")
  43366.           USE IN FRX
  43367.        ENDIF
  43368.        * we must close this early version of the
  43369.        * memberdata cursor -- later its frxrecno values
  43370.        * will be re-created correctly
  43371.        IF USED(m.toListener.MemberDataAlias)
  43372.           USE IN (m.toListener.MemberDataAlias)
  43373.        ENDIF
  43374.        SELECT (m.liSelect)
  43375.        SET DATASESSION TO (m.liSession)
  43376.    ENDTRY            
  43377. CASE m.tcMethodToken == "BEFOREREPORT"
  43378.    m.liSession = SET("DATASESSION")
  43379.    SET Datasession TO m.toListener.FRXDataSession  
  43380.    IF USED(m.toListener.MemberDataAlias)
  43381.       m.liSelect = SELECT(0)
  43382.       m.lcConditions = "(ExecWhen == '" + FRX_BLDR_ADVPROP_PREPROCESS_NORENDER + "' OR " + ;
  43383.                        " ExecWhen == '" + FRX_BLDR_ADVPROP_INSTANCE_NORENDER +"' ) "
  43384.       SELECT FrxRecno,ExecWhen,Execute, ;
  43385.             IIF(ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER, .T., .F.) AS PreProcess ;
  43386.          FROM (m.toListener.MemberDataAlias) ;
  43387.          INTO CURSOR (THIS.noRenderDataAlias) ;         
  43388.          WHERE Type = FRX_BLDR_MEMBERDATATYPE AND ;
  43389.                Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  43390.                (NOT EMPTY(Execute)) AND &lcConditions.           
  43391.       IF RECCOUNT(THIS.noRenderDataAlias) = 0
  43392.          USE IN (THIS.noRenderDataAlias)
  43393.       ELSE
  43394.          SELECT (THIS.noRenderDataAlias)
  43395.          INDEX ON FrxRecno TAG FrxRecno
  43396.       ENDIF                    
  43397.       SELECT (m.liSelect)
  43398.    ENDIF   
  43399.    SET Datasession TO (m.liSession)
  43400. CASE m.tcMethodToken == "UNLOADREPORT"
  43401.    * if swap was performed, and if the temporary
  43402.    * report is still "in place" 
  43403.    * as commandClausesFile 
  43404.    * get rid of temporary report 
  43405.    * if there is one and if it still exists
  43406.    * and return CommandClauses.File to its original value
  43407.    * it should not matter what order objects handle this
  43408.    IF m.toListener.isFRXSwapCopyPresent()
  43409.       m.liSession = SET("DATASESSION")
  43410.       SET DATASESSION TO m.toListener.FRXDataSession
  43411.       IF USED(THIS.noRenderDataAlias)
  43412.          USE IN (THIS.noRenderDataAlias)
  43413.       ENDIF
  43414.       m.liSelect = SELECT(0)
  43415.       IF USED("FRX")
  43416.          m.llSwap = .T.
  43417.          SELECT FRX
  43418.          USE
  43419.       ENDIF              
  43420.       m.toListener.removeFRXSwapCopy(,OUTPUTCLASS_DEBUGGING )           
  43421.       IF m.llSwap
  43422.         SELECT 0
  43423.         USE (m.toListener.CommandClauses.File) ALIAS FRX NOUPDATE
  43424.       ENDIF
  43425.       SELECT (m.liSelect)
  43426.       SET DATASESSION TO (m.liSession)
  43427.    ENDIF           
  43428. ENDCASE   
  43429. RETURN  m.liReturn
  43430. ENDPROC
  43431. PROCEDURE Destroy
  43432. THIS.listener = NULL
  43433. ENDPROC
  43434. FRXDataSession = -1
  43435. fxs = (NULL)
  43436. gfxs = (NULL)
  43437. ffcgraphics = (NULL)
  43438. cancelrequested = .F.
  43439. fxfeedbackclass = ("FoxyTherm")
  43440. fxfeedbackclasslib = (THIS.ClassLibrary)
  43441. fxfeedbackmodule = ("")
  43442. classpath = ("")
  43443. fxmemberdatascriptclass = ("fxMemberDataScript")
  43444. fxmemberdatascriptclasslib = (THIS.ClassLibrary)
  43445. fxmemberdatascriptmodule = ("")
  43446. frxcursor = (NULL)
  43447. memberdataalias = ("M"+SYS(2015))
  43448. runcollectorresetlevel = 0
  43449. gfxrotateclass = ("gfxRotate")
  43450. gfxrotateclasslib = (THIS.ClassLibrary)
  43451. gfxrotatemodule = ("")
  43452. reportstoprundatetime = (DTOT({}))
  43453. reportstartrundatetime = (DTOT({}))
  43454. gfxnorenderclass = ("gfxNoRender")
  43455. gfxnorenderclasslib = (THIS.ClassLibrary)
  43456. gfxnorendermodule = ("")
  43457. nexternalgdiplusgfx = 0
  43458. _memberdata = 
  43459.     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"/>
  43460.     <memberdata name="checkcollectionforspecifiedmember" type="method" display="checkCollectionForSpecifiedMember" favorites="True"/><memberdata name="addcollectionmember" type="method" display="addCollectionMember" favorites="True"/>
  43461.     <memberdata name="getpathforexternals" type="method" display="getPathForExternals" favorites="True"/>
  43462.     <memberdata name="loadfrxcursor" type="property" display="loadFrxCursor" favorites="True"/>
  43463.     <memberdata name="frxcursor" type="property" display="frxCursor" favorites="True"/>
  43464.     <memberdata name="memberdataalias" type="property" display="memberDataAlias" favorites="True"/>
  43465.     <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"/>
  43466.     <memberdata name="reportstartrundatetime" type="property" display="reportStartRunDatetime" favorites="True"/>
  43467.     <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"/>
  43468.     <memberdata name="setgdiplusgraphics" display="SetGdiPlusGraphics"/><memberdata name="nexternalgdiplusgfx" display="nExternalGdiPlusGfx"/></VFPData>
  43469. Name = "fxlistener"
  43470. PROCEDURE applyfx
  43471. LPARAMETERS m.toListener, m.tcMethodToken, ;
  43472.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  43473.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  43474. LOCAL liSession, liAngle, liSelect, liFRXRecno, liReturn 
  43475. m.liReturn = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR  
  43476. IF m.tcMethodToken == "RENDER" AND ;
  43477.    NOT ISNULL(m.toListener.FFCGraphics)
  43478.     IF toListener.FFCGraphics.GetHandle() = 0
  43479.         IF This.nExternalGdiPlusGfx > 0
  43480.             toListener.FFCGraphics.SetHandle(This.nExternalGdiPlusGfx)
  43481.         ELSE 
  43482.             RETURN 
  43483.         ENDIF 
  43484.     ENDIF 
  43485.    TRY
  43486.       m.liSession = SET("DATASESSION")
  43487.       IF m.toListener.FRXDataSession > -1
  43488.          SET DATASESSION TO m.toListener.FRXDataSession
  43489.       ENDIF         
  43490.       m.liSelect = SELECT(0)
  43491.       IF USED(m.toListener.MemberDataAlias) 
  43492.          SELECT (m.toListener.MemberDataAlias)
  43493.          m.liFRXRecno =  m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  43494.          LOCATE FOR FrxRecno = m.liFRXRecno AND ;
  43495.                     Type = FRX_BLDR_MEMBERDATATYPE AND ;
  43496.                     Name == FRX_BLDR_NAMESPACE_ROTATE AND ;
  43497.                     NOT EMPTY(Execute)  
  43498. * Fix by CChalom                    
  43499. *        IF FOUND() AND NOT EMPTY(INT(VAL(Execute))) AND m.toListener.FFCGraphics.GdipHandle > 0
  43500.          IF FOUND() AND NOT EMPTY(INT(VAL(Execute))) AND m.toListener.FFCGraphics.GetHandle() > 0
  43501.             m.liAngle = INT(VAL(Execute))
  43502.             m.toListener.FFCGraphics.TranslateTransform(tP2, tP3)
  43503.             m.toListener.FFCGraphics.RotateTransform(m.liAngle)
  43504.             m.liReturn = OUTPUTFX_BASERENDER_RENDER_BEFORE_RESTORE 
  43505.             m.toListener.FFCGraphics.TranslateTransform(-tP2, -tP3)
  43506.          ENDIF
  43507.       ENDIF
  43508.    CATCH TO err
  43509.       * could expose the error but won't,
  43510.       * we'll just swallow it
  43511.    FINALLY
  43512.        SELECT (m.liSelect)
  43513.        SET DATASESSION TO (m.liSession)
  43514.    ENDTRY            
  43515. ENDIF   
  43516. RETURN  m.liReturn
  43517. ENDPROC
  43518. Height = 23
  43519. Width = 23
  43520. FRXDataSession = -1
  43521. xmlmode = 2
  43522. includebreaksindata = 0
  43523. pagenodes = (NULL)
  43524. currentband = (NULL)
  43525. currentdocument = (NULL)
  43526. currentpage = (NULL)
  43527. columnnodes = (NULL)
  43528. currentcolumn = (NULL)
  43529. idattribute = ("id")
  43530. idrefattribute = ("idref")
  43531. xsltprocessorrdl = (NULL)
  43532. xsltprocessoruser = (NULL)
  43533. datanodes = (NULL)
  43534. nopageeject = .F.
  43535. topattr = ("t")
  43536. leftattr = ("l")
  43537. heightattr = ("h")
  43538. widthattr = ("w")
  43539. contattr = ("c")
  43540. xsltparameters = (NULL)
  43541. includepage = .T.
  43542. includedatatypeattributes = .F.
  43543. datatypeattr = ("DTYPE")
  43544. datatextattr = ("DTEXT")
  43545. formattingchanges = (.NULL.)
  43546. evaluatecontentsvalues = (.NULL.)
  43547. pageimageattr = ("PLINK")
  43548. applyrdltransform = .F.
  43549. successorgfxnorender = (.NULL.)
  43550. targetfileext = ("XML")
  43551. _memberdata = 
  43552.     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"/>
  43553. <memberdata name="adjustxsltparameter" type="method" display="adjustXSLTParameter" favorites="True"/>
  43554. <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 
  43555. 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"/>
  43556. <memberdata name="evaluatestringtoboolean" display="evaluateStringToBoolean" type="property"/><memberdata name="applyrdltransform" display="applyRDLTransform" type="property"/>
  43557. <memberdata name="successorgfxnorender" display="successorGFXNoRender" type="property"/><memberdata name="fixmsxmlobjectfordtds" display="fixMSXMLObjectForDTDs" type="method"/><memberdata name="frxcharsetsinuse" display="frxCharsetsInUse" type="method"/>
  43558. </VFPData>
  43559. runcollectorresetlevel = 1
  43560. Name = "xmllistener"
  43561. Datasessionv
  43562. TNFRXRECNO
  43563. TNLEFT
  43564. TNTOP
  43565. TNWIDTH
  43566. TNHEIGHT
  43567. TNOBJECTCONTINUATIONTYPE
  43568. TCCONTENTSTOBERENDERED
  43569. TIGDIPLUSIMAGE
  43570. TWOPASSPROCESS
  43571. CURRENTPASS
  43572. LCCONTENTS
  43573. LNREC
  43574. LNSELECT    
  43575. LNSESSION
  43576. LLDYNAMICS
  43577. RESETDATASESSION    
  43578. _GOHELPER
  43579. NSEARCHPAGES
  43580. PAGENO
  43581. LSTOREDATA
  43582. CMAINALIAS
  43583. LCTESTCONTENTS
  43584. LCNEWCONTENTS
  43585. LCNEWUNCONTENTS
  43586. LNROTATE
  43587. LNDYNAMICS
  43588. GETDYNAMICSFROMFRX
  43589. COUTPUTALIAS    
  43590. NFRXINDEX
  43591. LOEXCT
  43592. The helper 'Rendering' cursor is not available.
  43593. Error
  43594. The helper 'FRX' cursor is not available.
  43595. Error
  43596. EXCEPTION
  43597. TempFRX
  43598. TempFRX
  43599. TempFRX
  43600. TempFRX
  43601. TempFrx 
  43602. Error creating report data. The output will not be rendered correctly.
  43603. Error
  43604. TempFRXW
  43605. Error getting report informationC
  43606. Line: 
  43607. Please inform the details to   vfpimaging@hotmail.com
  43608. FoxyPreviewer Error
  43609. RESETDATASESSION
  43610. COUTPUTALIAS    
  43611. CFRXALIAS
  43612. CFULLOUTPUTALIAS
  43613. LNSELECT
  43614. LCFULLOUTPUT
  43615. LOEXC    
  43616. LNALIASES
  43617. AFRXTABLES
  43618. LATEMPDATA
  43619. NRECNO
  43620. TEMPFRX
  43621. RESETRPT
  43622. OBJTYPE
  43623. WIDTH
  43624. FRXWIDTH
  43625. HEIGHT    
  43626. FRXHEIGHT
  43627. FRXTOP
  43628. FRXRECNO
  43629. FRXINDEX
  43630. CAUXFULLOUTPUTALIAS
  43631. DYNAMICS
  43632. PROCESSDYNAMICS
  43633. ERRORNO
  43634. MESSAGE
  43635. LINENO
  43636. LINECONTENTS
  43637. RESETDATASESSION
  43638. AFRXTABLES
  43639. COUTPUTALIAS
  43640. CFULLOUTPUTALIAS    
  43641. CFRXALIAS
  43642. CAUXFULLOUTPUTALIASW
  43643. FXTHERM
  43644. FOXYTHERM
  43645. LCTHERMCLASS
  43646. LOEXC    
  43647. _GOHELPER    
  43648. LEXTENDED
  43649. OFOXYPREVIEWER
  43650. THIS    
  43651. QUIETMODE
  43652. LQUIETMODE    
  43653. SUCCESSOR
  43654. CSUCCESSOR
  43655. LEXPANDFIELDS
  43656. LNTYPE
  43657. NTHERMTYPE
  43658. FXFEEDBACKCLASS
  43659. _ODESTSCREEN
  43660. COMMANDCLAUSES
  43661. WINDOW
  43662. Datasessionv
  43663. name="Microsoft.VFP.Reporting.Builder.
  43664. ROTATE
  43665.  execute="
  43666. execwhen="
  43667. ROTATE
  43668. EVALUATECONTENTS
  43669.  script="
  43670. TNRECNO
  43671. TCNEWCONTENTS
  43672. TNROTATE    
  43673. LNSESSION
  43674. LNSELECT
  43675. LCDYNAMICS    
  43676. LNOBJTYPE
  43677. LCSTYLE
  43678. SETFRXDATASESSION
  43679. OBJTYPE
  43680. STYLE
  43681. CMAINALIAS
  43682. LCEXECWHEN    
  43683. LCDYNTYPE
  43684. LLTRUE
  43685. LCSCRIPT
  43686. LCNEWCONTENTS
  43687. GETSTRINGFROMXML
  43688. LOEXC
  43689. ORIENTATION
  43690. PAPERSIZE
  43691. DEVICE
  43692. LNSETTINGS
  43693. LNORIENTATION
  43694. LCPRINTERNAME
  43695. LNORIENTATIONLINE
  43696. LNPAPERSIZE
  43697. LNPAPERSIZELINE
  43698. LCPRINTERNAMELINE
  43699. OBJTYPE
  43700. OBJCODE
  43701. LASETTINGS
  43702. NPRTORIENTATION
  43703. NPRTPAPERSIZE
  43704. LNPRINTERNAMELINE
  43705. CPRTPRINTERNAME
  43706. m.tcText = STRTRAN(m.tcText, [&] , [&]) 
  43707. m.tcText = STRTRAN(m.tcText, [ ], [ ])
  43708. m.tcText = STRTRAN(m.tcText, [<]  , [<])
  43709. m.tcText = STRTRAN(m.tcText, [>]  , [>])
  43710. m.tcText = STRTRAN(m.tcText, ["], ["])
  43711. TCTEXT
  43712. <reportdata name="Microsoft.VFP.Reporting.Builder.
  43713. BOOLEAN
  43714. _TempDynamics
  43715. _TempDynamics
  43716. _TempDynamicsN
  43717. LCSTYLE
  43718. LCDYNAMICSTRING
  43719. LOEXC
  43720. STYLE
  43721. LBRETURN
  43722. LNSELECT
  43723. LNRECS
  43724. LNRECDYN
  43725. DYNAMICS
  43726. _TEMPDYNAMICS
  43727. CFULLOUTPUTALIAS
  43728. OBJTYPE
  43729. FNAME
  43730. FONTFACE
  43731. FSIZE
  43732. FONTSIZE
  43733. FSTYLE    
  43734. FONTSTYLE
  43735. LNPENRGB
  43736. LNPENR
  43737. LNPENG
  43738. LNPENB
  43739. PENRGB
  43740. PENRED
  43741. PENGREEN
  43742. PENBLUE    
  43743. LNFILLRGB
  43744. LNFILLR
  43745. LNFILLG
  43746. LNFILLB
  43747. FILLRGB
  43748. FILLRED    
  43749. FILLGREEN
  43750. FILLBLUE
  43751. FILLA
  43752. MODE    
  43753. OBJ_IMAGE'
  43754. LPRINT
  43755. ERASETEMPFILES    
  43756. NFRXINDEX
  43757. Datasessionv
  43758. Select: 
  43759. Alias: 
  43760. Session: 
  43761. c:\FoxyPreviewer_Log.txta
  43762. TCINFO
  43763. TCMETHOD
  43764. LNSELECT
  43765. LCALIAS
  43766. LNDATASESSION
  43767. LCTEXT
  43768. UPDATEPROPERTIES
  43769. LISTENERTYPE
  43770. COMMANDCLAUSES
  43771. PREVIEW
  43772. OUTPUTTO
  43773. LSTOREDATA{
  43774. cOutputAlias
  43775. cAuxFullOutputAlias
  43776. lDeleteOnDestroya
  43777. cMainAlias
  43778. nStartingSession
  43779. nStartingRecNo
  43780. cStartingAlias
  43781. lStoreDataa
  43782. cFullOutputAlias
  43783. cFRXDBF
  43784. cFRXAlias
  43785. aFRXTables[1]
  43786. nFRXIndex
  43787. nPrtOrientation
  43788. nPrtPaperSize
  43789. cPrtPrinterName
  43790. OnPreviewClose
  43791. OnPreviewClose_Bind
  43792. ADDPROPERTY    
  43793. _GOHELPER    
  43794. QUIETMODE
  43795. LQUIETMODE
  43796. LSTOREDATAq
  43797. Datasessionv
  43798. Datasessionv
  43799. TEMP5
  43800. Error creating temporary FRX table
  43801. LSTOREDATA
  43802. LCTABLE
  43803. LCALIAS
  43804. LLHELPER
  43805. LNSELECT    
  43806. LNSESSION
  43807. LNINDEX    
  43808. _GOHELPER    
  43809. NFRXINDEX
  43810. _COUTPUTALIAS
  43811. COUTPUTALIAS    
  43812. _OALIASES
  43813. _NINDEX
  43814. CMAINALIAS
  43815. SETCURRENTDATASESSION
  43816. LCSTARTINGALIAS
  43817. CSTARTINGALIAS
  43818. NSTARTINGSESSION
  43819. NSTARTINGRECNO
  43820. SETFRXDATASESSION
  43821. GETPRINTERINFO    
  43822. LCFRXDBF0
  43823. LCFRXALIAS
  43824. LCFRXALIAS0
  43825. RESETDATASESSION    
  43826. CFRXALIAS
  43827. AFRXTABLES
  43828. FRXRECNO
  43829. DBFRECNO
  43830. WIDTH
  43831. HEIGHT
  43832. CONTTYPE
  43833. CONTENTS
  43834. UNCONTENTS
  43835. FRXINDEX
  43836. DYNAMICS
  43837. ROTATE
  43838. TNFRXRECNO
  43839. TNLEFT
  43840. TNTOP
  43841. TNWIDTH
  43842. TNHEIGHT
  43843. TNOBJECTCONTINUATIONTYPE
  43844. TCCONTENTSTOBERENDERED
  43845. TIGDIPLUSIMAGE
  43846. LSTOREDATA
  43847. STOREFRXDATA
  43848. storefrxdata,
  43849. getfullfrxdata*
  43850. erasetempfiles
  43851. updateproperties8
  43852. getdynamicsfromfrx\
  43853. getprinterinfoX
  43854. getstringfromxml
  43855. processdynamics
  43856. onpreviewclose_bind
  43857. addtologr 
  43858. LoadReport
  43859. BeforeReport
  43860. Render
  43861. 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
  43862. 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.
  43863. 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.
  43864. cancelrequested Notification flag for FX objects to request a report cancellation.
  43865. fxfeedbackclass Class to instantiate in FX collection for user feedback (defaults to fxTherm).
  43866. fxfeedbackclasslib Class library from which to instantiate FX collection object providing user feedback.
  43867. fxfeedbackmodule Application module (APP or EXE)  from which to instantiate FX collection object providing user feedback.
  43868. classpath Provides optional location specifying path for loading objects from external libraries.
  43869. fxmemberdatascriptclass Class to instantiate in FX collection for memberdata-based script handling (defaults to fxMemberDataScript).
  43870. fxmemberdatascriptclasslib Class library from which to instantiate FX collection object providing memberdata-based script-handling.
  43871. fxmemberdatascriptmodule Application module (APP or EXE)  from which to instantiate FX collection object providing memberdata-based script-handling.
  43872. frxcursor Holds a reference to an FRXCursor helper object to aid in run-time calculations related to FRX metadata, structure, and memberdata.
  43873. loadfrxcursor Determines whether this class should dynamically load an instance of the helper class FRXCursor when attempting to access a reference to it.
  43874. memberdataalias Alias of cursor holding memberdata in the FRXDataSession, read from the FRX table's Style field for easy access by other objects.
  43875. 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).
  43876. gfxrotateclass Class to instantiate in GFX collection for rotating layout controls (defaults to gfxRotate).
  43877. gfxrotateclasslib Class library from which to instantiate GFX collection object providing rotation.
  43878. gfxrotatemodule Application module (APP or EXE)  from which to instantiate GFX collection object providing rotation.
  43879. 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.
  43880. 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.
  43881. 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).
  43882. gfxnorenderclasslib Class library from which to instantiate GFX collection object providing conditional baseclass rendering.
  43883. gfxnorendermodule Application module (APP or EXE) from which to instantiate GFX collection object providing conditional baseclass rendering.
  43884. nexternalgdiplusgfx
  43885. *createhelperobjects Creates FXs and GFXs collections, and additional required object members such as the FFCGraphics object.
  43886. *needgfxs Hook method to evaluate whether this method needs to call the GFXs collection members for rendering purposes.
  43887. *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.
  43888. *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.
  43889. *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.
  43890. *cancelrequested_assign 
  43891. *fxfeedbackclass_assign 
  43892. *fxfeedbackclasslib_assign 
  43893. *fxfeedbackmodule_assign 
  43894. *getfeedbackfxobject Instantiates FX object to provide user feedback.
  43895. *classpath_assign 
  43896. *getobjectinstance Provides a method for instancing classes as helper/member objects or FX/GFX collection members using specific path priorities.
  43897. *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).
  43898. *addcollectionmember Adds instance of specified class in specified class library  to FX or GFX collection. Params: tcClass, tcClassLib,tcModule,tlSingleton, tlInGFX, tlRequired
  43899. *getpathforexternals Determines the location at which the current configuration table and any other required external files will be expected.
  43900. *ffcgraphics_assign 
  43901. *getmemberdatascriptfxobject Instantiates FX object to provide memberdata-based script handling.
  43902. *fxmemberdatascriptclass_assign 
  43903. *fxmemberdatascriptclasslib_assign 
  43904. *fxmemberdatascriptmodule_assign 
  43905. *frxcursor_access 
  43906. *frxcursor_assign 
  43907. *loadfrxcursor_assign 
  43908. *memberdataalias_assign 
  43909. *creatememberdatacursor Creates a cursor in the FRX datasession to hold extended information about FRX data rows.
  43910. *runcollectorresetlevel_assign 
  43911. *getfrxrecno Determine the current FRX cursor row number from the parameters passed to a ReportListener event.
  43912. *getrotategfxobject Instantiates GFX object to provide memberdata-based rotation of layout controls.
  43913. *gfxrotateclass_assign 
  43914. *gfxrotateclasslib_assign 
  43915. *gfxrotatemodule_assign 
  43916. *removecollectionmember Provides a way to remove an FX or GFX object from FXListener's collections by object instance name or class name.
  43917. *reportstoprundatetime_access 
  43918. *reportstartrundatetime_access 
  43919. *evaluateuserexpression Attempts to evaluate a user-provided expression in various report run datasessions and return a valid result.
  43920. *gfxnorenderclass_assign 
  43921. *gfxnorenderclasslib_assign 
  43922. *gfxnorendermodule_assign 
  43923. *getnorendergfxobject Instantiates GFX object to provide memberdata-specified conditional baseclass rendering.
  43924. *ensurecollection Ensures valid object collections for GFXs and FXs member references.
  43925. *setgdiplusgraphics 
  43926. DOSTATUS
  43927. UPDATESTATUS
  43928. CLEARSTATUS
  43929. AFTERBAND
  43930. AFTERREPORT
  43931. m.toListener.CommandClauses.RecordTotalb
  43932. BEFOREBAND
  43933. DATASESSIONv
  43934. BEFOREREPORT
  43935. CANCELREPORT
  43936. DATASESSIONv
  43937. LOADREPORT
  43938. reportStartRunDatetime
  43939. m.toListener.CommandClauses.NoDialogb
  43940. UNLOADREPORT
  43941. reportStopRunDatetime
  43942. TOLISTENER
  43943. TCMETHODTOKEN
  43944. MOVABLE    
  43945. LISESSION
  43946. DOSTATUS
  43947. UPDATESTATUS
  43948. CLEARSTATUS
  43949. SYNCHSTATUS    
  43950. ISRUNNING
  43951. CURRENTRECORD
  43952. COMMANDCLAUSES
  43953. RECORDTOTAL
  43954. DESIGNATEDDRIVER
  43955. DRIVINGALIAS
  43956. SUCCESSORSYS2024
  43957. VISIBLE
  43958. REPORTSTOPRUNDATETIME
  43959. POPUSERFEEDBACKGLOBALSETS
  43960. CURRENTPASS
  43961. CURRENTDATASESSION
  43962. SETUPREPORT    
  43963. QUIETMODE    
  43964. PAGELIMIT
  43965. PAGENO
  43966. ALLOWMODALMESSAGES    
  43967. DOMESSAGE
  43968. CANCELQUERYTEXT
  43969. ATTENTIONTEXT
  43970. CANCELREQUESTED
  43971. ISSUCCESSOR
  43972. REPORTINCOMPLETETEXT
  43973. RESETUSERFEEDBACK
  43974. ADDPROPERTY
  43975. REPORTSTARTRUNDATETIME
  43976. NODIALOG
  43977. INITSTATUSTEXT
  43978. PUSHUSERFEEDBACKGLOBALSETS
  43979. PERSISTBETWEENRUNS
  43980. LISTENERDATASESSION
  43981. RELEASE9
  43982. VNEWVAL
  43983. INCLUDESECONDS9
  43984. VNEWVAL
  43985. INITSTATUSTEXT9
  43986. VNEWVAL
  43987. PREPASSSTATUSTEXT
  43988. VNEWVAL
  43989. RUNSTATUSTEXT
  43990. VNEWVAL
  43991. SECONDSTEXT
  43992. VNEWVAL
  43993. LCTYPE
  43994. CMESSAGE
  43995. THERMCAPTIONF
  43996. VNEWVAL
  43997. THERMFORMCAPTION
  43998. SETTHERMFORMCAPTION
  43999. VNEWVAL
  44000. THERMFORMHEIGHT
  44001. THERMMARGIN
  44002. SYNCHUSERINTERFACE
  44003. VNEWVAL
  44004. THERMFORMWIDTH
  44005. THERMMARGIN
  44006. SYNCHUSERINTERFACE~
  44007. VNEWVAL
  44008. THERMFORMHEIGHT
  44009. THERMFORMWIDTH
  44010. THERMMARGIN
  44011. SYNCHUSERINTERFACE
  44012. _SCREEN.ActiveFormb
  44013. THIS.CommandClauses.InWindowb
  44014. THIS.CommandClauses.Windowb
  44015. _SCREEN.ActiveFormb
  44016. _SCREEN.ActiveFormb
  44017. LOFORM    
  44018. LOTOPFORM
  44019. LCINWINDOW
  44020. ACTIVEFORM
  44021. SHOWWINDOW
  44022. COMMANDCLAUSES
  44023. INWINDOW
  44024. WINDOW
  44025. FORMS
  44026. NAME    
  44027. FORMCOUNT6
  44028. WINDOWS
  44029. SKIPv
  44030. TOLISTENER
  44031. LISELECT
  44032. LCALIAS
  44033. LISKIPS
  44034. LASKIPS
  44035. FRXDATASESSION
  44036. DESIGNATEDDRIVER
  44037. DRIVINGALIAS
  44038. OBJTYPE
  44039. OBJCODE
  44040. CURRENTDATASESSION
  44041. PLATFORM
  44042. TLRESETTIMES
  44043. CURRENTRECORD
  44044. PERCENTDONE
  44045. REPORTSTARTRUNDATETIME
  44046. REPORTSTOPRUNDATETIME
  44047. THERMFORMCAPTION
  44048. SYNCHUSERINTERFACE:
  44049. TCCOMMANDCLAUSESFILE
  44050. TCPRINTJOBNAME
  44051. THERMFORMCAPTION
  44052. CNAME
  44053. OFOXYPREVIEWER
  44054. CTITLE
  44055. CANCELINSTRTEXT
  44056. CAPTION@
  44057. TOLISTENER
  44058. NBANDOBJCODE    
  44059. NFRXRECNO
  44060. THIS    
  44061. ISRUNNING
  44062. FRXBANDRECNO
  44063. CURRENTDATASESSION
  44064. DRIVINGALIASCURRENTRECNO
  44065. DRIVINGALIAS
  44066. CURRENTRECORD
  44067. COMMANDCLAUSES
  44068. RECORDTOTAL
  44069. CURRENTPASS
  44070. TWOPASSPROCESS
  44071. RESETUSERFEEDBACK
  44072. UPDATESTATUS
  44073. LISTENERDATASESSION
  44074. MACDESKTOP
  44075. SCREEN
  44076. MACDESKTOP
  44077. SCREEN
  44078. TOLISTENER
  44079. CMESSAGE
  44080. LOPARENTFORM    
  44081. LCCAPTION
  44082. LCPARENTFORMNAME    
  44083. QUIETMODE
  44084. THIS    
  44085. ISRUNNING
  44086. COMMANDCLAUSES
  44087. NODIALOG
  44088. NLASTPERCENT
  44089. PERCENTDONE
  44090. NDELAY
  44091. THERMCAPTION
  44092. CLOSABLE
  44093. THERM
  44094. VALUE
  44095. THERMLABEL
  44096. CAPTION
  44097. VISIBLE
  44098. GETPARENTWINDOWREF
  44099. DESKTOP
  44100. MACDESKTOP
  44101. SHOWWINDOW
  44102. ALWAYSONTOP
  44103. AUTOCENTER.
  44104. TOLISTENER
  44105. VISIBLE>
  44106. TOLISTENER
  44107. THIS    
  44108. ISRUNNING
  44109. LIRECTOTAL
  44110. LNNEWPERCENT
  44111. LLSHOW
  44112. COMMANDCLAUSES
  44113. RECORDTOTAL
  44114. CURRENTRECORD
  44115. THERMPRECISION
  44116. PERCENTDONE
  44117. DOSTATUS
  44118. CURRENTPASS
  44119. TWOPASSPROCESS
  44120. PREPASSSTATUSTEXT
  44121. RUNSTATUSTEXTM
  44122. Notify
  44123. ESCAPE
  44124. PUBLIC &lcRef.   
  44125. ON ESCAPE &lcRef..CancelReport()      
  44126. ESCAPEv
  44127. TOLISTENER    
  44128. STARTMODE
  44129. LCREF
  44130. SETNOTIFYCURSOR
  44131. ONESCAPECOMMAND
  44132. ESCAPEREFERENCE    
  44133. SETESCAPE
  44134. RELEASE &lcRef.
  44135. ON ESCAPE &lcRef
  44136. STARTMODE
  44137. LCREF
  44138. ESCAPEREFERENCE
  44139. ONESCAPECOMMAND
  44140. SETNOTIFYCURSOR    
  44141. SETESCAPE
  44142. m.toListener.CommandClauses.Summaryb
  44143. Summary-
  44144. m.toListener.CommandClauses.RecordTotalb
  44145. RecordTotal
  44146. m.toListener.CommandClauses.NoDialogb
  44147. NoDialog-
  44148. WINDOWS
  44149. WINDOWS
  44150. WINDOWS
  44151. WINDOWS
  44152. WINDOWS
  44153. TOLISTENER
  44154. LLFRXAVAILABLE
  44155. LCALIAS
  44156. THIS    
  44157. ISRUNNING
  44158. CURRENTDATASESSION
  44159. DRIVINGALIAS
  44160. FRXDATASESSION
  44161. GETREPORTSCOPEDRIVER
  44162. SETTHERMFORMCAPTION
  44163. COMMANDCLAUSES
  44164. PRINTJOBNAME
  44165. FRXBANDRECNO
  44166. SUMMARY
  44167. OBJTYPE
  44168. OBJCODE
  44169. PLATFORM
  44170. DRIVINGALIASCURRENTRECNO
  44171. LISTENERDATASESSION=
  44172. VNEWVAL
  44173. THERMPRECISION7
  44174. VNEWVAL
  44175. PERSISTBETWEENRUNS
  44176. GetSysColor
  44177. Win32API
  44178. toListener.CommandClauses.StartDataSessionb
  44179. DATASESSIONv
  44180. TOLISTENER
  44181. GETSYSCOLOR
  44182. WIN32API
  44183. LITHERMTOP
  44184. LITHERMLEFT
  44185. LITHERMWIDTH
  44186. LITHERMHEIGHT    
  44187. LISESSION
  44188. COMMANDCLAUSES
  44189. STARTDATASESSION
  44190. RESETDATASESSION
  44191. THERMMARGIN    
  44192. SCALEMODE
  44193. HEIGHT
  44194. THERMFORMHEIGHT
  44195. HALFHEIGHTCAPTION
  44196. WIDTH
  44197. THERMFORMWIDTH
  44198. AUTOCENTER
  44199. BORDERSTYLE
  44200. CONTROLBOX
  44201. CLOSABLE    
  44202. ISRUNNING    
  44203. MAXBUTTON    
  44204. MINBUTTON
  44205. ALWAYSONTOP
  44206. ALLOWOUTPUT
  44207. THERMLABEL
  44208. VISIBLE
  44209. FONTBOLD
  44210. ALIGNMENT
  44211. SETTHERMFORMCAPTION
  44212. THERM
  44213. CAPTION
  44214. RUNSTATUSTEXT
  44215. BringWindowToTop
  44216. Win32API
  44217. ShowWindow
  44218. Win32API
  44219. GetCurrentThreadId
  44220. kernel32
  44221. GetWindowThreadProcessId
  44222. user32
  44223. GetCurrentThreadId
  44224. kernel32
  44225. AttachThreadInput
  44226. user32
  44227. GetForegroundWindow
  44228. user32
  44229. FindWindow
  44230. Win32API
  44231. BRINGWINDOWTOTOP
  44232. WIN32API
  44233. SHOWWINDOW
  44234. GETCURRENTTHREADID
  44235. KERNEL32
  44236. GETWINDOWTHREADPROCESSID
  44237. USER32
  44238. ATTACHTHREADINPUT
  44239. GETFOREGROUNDWINDOW
  44240. FINDWINDOW
  44241. LNHWND
  44242. CAPTION
  44243. LNFORETHREAD
  44244. LNAPPTHREADy
  44245. nLastPercent
  44246. CancelInstrText
  44247. CancelQueryText
  44248. ReportIncompleteText
  44249. AttentionText
  44250. INITSTATUS
  44251. PREPSTATUS
  44252. RUNSTATUS
  44253. SECONDS
  44254. CANCELINST
  44255. CANCELQUER
  44256. REPINCOMPL
  44257. ATTENTION
  44258. Initializing... 
  44259. Running calculation prepass... 
  44260. Creating output... 
  44261. sec(s)
  44262. Press Esc to cancel... 
  44263. Stop report execution?C
  44264. (If you press 'No', report execution will continue.)
  44265. Report execution was cancelled.C
  44266. Your results are not complete.
  44267. Attention
  44268. FindWindow
  44269. user32
  44270. SetParent
  44271. User32
  44272. m.cMessage+ " "+ 
  44273. TRANSFORM(THIS.PercentDone,"999"+ 
  44274. IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" 
  44275. + IIF(NOT THIS.IncludeSeconds, "" , "   "+
  44276. TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-
  44277. THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)
  44278. ADDPROPERTY
  44279. VISIBLE
  44280. CREATETHERM    
  44281. _GOHELPER
  44282. INITSTATUSTEXT
  44283. GETLOC
  44284. PREPASSSTATUSTEXT
  44285. RUNSTATUSTEXT
  44286. SECONDSTEXT
  44287. CANCELINSTRTEXT
  44288. CANCELQUERYTEXT
  44289. REPORTINCOMPLETETEXT
  44290. ATTENTIONTEXT
  44291. OFOXYPREVIEWER
  44292. _INITSTATUSTEXT
  44293. _PREPASSSTATUSTEXT
  44294. _RUNSTATUSTEXT
  44295. _SECONDSTEXT
  44296. _CANCELINSTRTEXT
  44297. _CANCELQUERYTEXT
  44298. _REPORTINCOMPLETETEXT
  44299. _ATTENTIONTEXT
  44300. _ODESTSCREEN
  44301. LCTITLE
  44302. LNDESTHWND
  44303. FINDWINDOW
  44304. USER32    
  44305. SETPARENT
  44306. THERMCAPTION
  44307. RESETUSERFEEDBACK
  44308. applyfx,
  44309. includeseconds_assign
  44310. initstatustext_assign
  44311. prepassstatustext_assign{
  44312. runstatustext_assign
  44313. secondstext_assign
  44314. thermcaption_assignT
  44315. thermformcaption_assign 
  44316. thermformheight_assign
  44317. thermformwidth_assign
  44318. thermmargin_assigny
  44319. getparentwindowrefL
  44320. getreportscopedriver
  44321. resetuserfeedback
  44322. setthermformcaption
  44323. synchstatusW
  44324. dostatus
  44325. clearstatus
  44326. updatestatus
  44327. pushuserfeedbackglobalsets0"
  44328. popuserfeedbackglobalsets
  44329. setupreport5%
  44330. thermprecision_assign
  44331. persistbetweenruns_assignj+
  44332. createtherm
  44333. bringwindowtofront
  44334. Initr3
  44335. Invalid parameter. Report listener not available
  44336. Error
  44337. The helper FRX table is not available. Output can't be created
  44338. Error
  44339. Datasessionv
  44340. <html><head><META http-equiv="Content-Type" content="text/html">
  44341. <title>
  44342. </title></head><body>
  44343. %  - 
  44344. 100%  - CCC
  44345. </body></html>
  44346. TOLISTENER
  44347. TCOUTPUTDBF
  44348. TNWIDTH
  44349. TNHEIGHT    
  44350. CFRXALIAS
  44351. THIS    
  44352. QUIETMODE
  44353. LNSECS
  44354. DOFOXYTHERM
  44355. OFOXYPREVIEWER
  44356. _INITSTATUSTEXT
  44357. LNSELECT
  44358. LNORIGDATASESSION
  44359. LISTENERDATASESSION
  44360. LDEFAULTMODE
  44361. NPAGEHEIGHT
  44362. NSCREENDPI
  44363. NPAGEWIDTH
  44364. NOUTFILE
  44365. CTARGETFILENAME
  44366. CHTML
  44367. LNPGFROM
  44368. LNPGTO
  44369. COMMANDCLAUSES    
  44370. RANGEFROM
  44371. RANGETO    
  44372. _GOHELPER
  44373. _CLAUSENRANGETO
  44374. RENDERHTML
  44375. FRXRECNO
  44376. WIDTH
  44377. HEIGHT
  44378. CONTTYPE
  44379. UNCONTENTS    
  44380. LNPERCENT
  44381. LNLASTPERCENT
  44382. LNDELAY    
  44383. LNTOTRECS
  44384. LNREC
  44385. _SECONDSTEXT
  44386. _RUNSTATUSTEXT
  44387. LLSAVED
  44388. LCFILE
  44389. APAGESIMGS
  44390. LOBJTYPEMODE
  44391. LSAVED
  44392. LOPENVIEWER    
  44393. SHELLEXEC)
  44394. FRX_OBJCOD_TITLE
  44395. FRX_OBJCOD_PAGEHEADER
  44396. FRX_OBJCOD_COLHEADER
  44397. FRX_OBJCOD_GROUPHEADER
  44398. FRX_OBJCOD_DETAIL
  44399. FRX_OBJCOD_GROUPFOOTER
  44400. FRX_OBJCOD_COLFOOTER
  44401. FRX_OBJCOD_PAGEFOOTER
  44402. FRX_OBJCOD_SUMMARY
  44403. FRX_OBJCOD_DETAILHEADER
  44404. FRX_OBJCOD_DETAILFOOTER
  44405. NBANDOBJCODE1
  44406. NFONTSTYLE
  44407. CSTYLE[
  44408. NGREEN
  44409. NBLUE
  44410. LISTENER_CONTINUATION_NONE
  44411. LISTENER_CONTINUATION_START
  44412. LISTENER_CONTINUATION_MIDDLE
  44413. LISTENER_CONTINUATION_END
  44414. NOBJECTCONTINUATIONTYPE
  44415. REPORTLISTENER
  44416. TEMP5
  44417. LOLISTENER
  44418. LNPAGE
  44419. COMMANDCLAUSES    
  44420. RANGEFROM
  44421. APAGESIMGS
  44422. LNDEVICETYPE
  44423. LCFILE
  44424. LNHANDLE
  44425. OUTPUTPAGE
  44426. TNWIDTH
  44427. TNHEIGHT
  44428. TCFILE
  44429. LCFILE
  44430. GETPAGEIMG
  44431. LNHOR
  44432. LNVERT    
  44433. LCNEWFILE    
  44434. CROPIMAGE
  44435. _IMAGES
  44436. _IMAGES
  44437. IMAGE
  44438. Image
  44439. <img src="
  44440. " width="
  44441. " height="
  44442. <span style="position:absolute;left:C
  44443. px;top:
  44444. clip: rect(0 
  44445. px 0);
  44446. </span>
  44447. IMAGE
  44448. Image
  44449. <img src="
  44450. " width="
  44451. " height="
  44452. <span style="position:absolute;left:C
  44453. px;top:
  44454. clip: rect(0 
  44455. px 0);
  44456. </span>
  44457. <img src="
  44458. " width="
  44459. " height="
  44460. <span style="position:absolute;left:C
  44461. px;top:
  44462. px;">
  44463. </span>
  44464. TNLEFT
  44465. TNTOP
  44466. TNWIDTH
  44467. TNHEIGHT
  44468. CCONTENTSTOBERENDERED
  44469. LCFILE
  44470. LCPATH
  44471. LCSHORTPATH
  44472. LCIMAGECOPY
  44473. LCPATHLOCATION
  44474. CTARGETFILENAME
  44475. CEXTERNALFILELOCATION
  44476. NIMGCOUNTER
  44477. GETPICTUREFROMLISTENER
  44478. PR_PATHFILEEXISTS
  44479. LCHTML    
  44480. LCIMGHTML
  44481. GENERAL
  44482. LNWIDTH
  44483. LNHEIGHT
  44484. LNPICTWIDTH
  44485. LNPICTHEIGHT
  44486. LOVFPIMG
  44487. PICTURE
  44488. WIDTH
  44489. HEIGHT
  44490. LNHORFACTOR
  44491. LNVERTFACTOR
  44492. LNRESIZEFACTOR
  44493. LNISOWIDTH
  44494. LNISOHEIGHTN
  44495. lcText = STRTRAN(lcOrigText, [&], [&]) 
  44496. lcText = STRTRAN(lcText, [<], [<])
  44497. lcText = STRTRAN(lcText, [>], [>])
  44498. text-align: left;
  44499. text-align: right;
  44500. text-align: center;
  44501. white-space:normal;
  44502. overflow:hidden ;
  44503. white-space:nowrap;
  44504. white-space:normal;
  44505. <span style="
  44506. position:absolute;left:
  44507. px;top:
  44508. width:
  44509. px;height:
  44510. background-color:
  44511. font-family:
  44512. font-size:
  44513. color:
  44514. </span>
  44515. TNLEFT
  44516. TNTOP
  44517. TNWIDTH
  44518. TNHEIGHT
  44519. CCONTENTSTOBERENDERED
  44520. LCHTML
  44521. LCTEXT
  44522. LCORIGTEXT
  44523. LCALIGN
  44524. OFFSET    
  44525. LCFILLHEX    
  44526. LCPRESPAN
  44527. LCPOSTSPAN    
  44528. LCFOREHEX    
  44529. LCPREFONT
  44530. LCPOSTFONT
  44531. FILLRED    
  44532. FILLGREEN
  44533. FILLBLUE
  44534. RGBTOHEX
  44535. PENRED
  44536. PENGREEN
  44537. PENBLUE
  44538. STRETCH
  44539. LCWWRAP
  44540. LNLINES
  44541. GETLINESCNT
  44542. FONTFACE
  44543. FONTSIZE    
  44544. FONTSTYLE
  44545. LCFONTSTYLE
  44546. LCPRESTYLE
  44547. LCPOSTSTYLE
  44548. GETFONTSTYLE(
  44549. <span style="position:absolute;left:C
  44550. px;top:
  44551. px;width:
  44552. height:
  44553. px;text-align: left;border:1px solid 
  44554. <font face="Arial" fontsize=10 color=#000000></font></span>
  44555. TNLEFT
  44556. TNTOP
  44557. TNWIDTH
  44558. TNHEIGHT
  44559. LCHTML
  44560. RGBTOHEX
  44561. PENRED
  44562. PENGREEN
  44563. PENBLUEZ
  44564. background-color:
  44565. border-left:C
  44566.  solid;
  44567. border-right:
  44568.  solid;
  44569. border-top:
  44570.  solid;
  44571. border-left:C
  44572.  solid;
  44573. border-right:
  44574.  solid;
  44575. border-left:C
  44576.  solid;
  44577. border-right:
  44578.  solid;
  44579. border-bottom:
  44580.  solid;
  44581. border:C
  44582.  solid;
  44583. <span style="position:absolute;left:C
  44584. px;top:
  44585. px;width:
  44586. height:
  44587. px;text-align: left;
  44588. </span>
  44589. TNLEFT
  44590. TNTOP
  44591. TNWIDTH
  44592. TNHEIGHT
  44593. TNOBJECTCONTINUATIONTYPE    
  44594. LCFILLHEX
  44595. FILLPAT
  44596. FILLRED    
  44597. FILLGREEN
  44598. FILLBLUE
  44599. RGBTOHEX
  44600. LCBORDERHEX
  44601. PENPAT
  44602. PENRED
  44603. PENGREEN
  44604. PENBLUE
  44605. PENSIZE
  44606. LCHTML3
  44607. GPRECTANGLE
  44608. \ffc\_Gdiplus.vcx
  44609. GPRectangle
  44610. _Gdiplus.vcx
  44611. GPFont
  44612. _Gdiplus.vcx
  44613. GPGRAPHICS
  44614. \ffc\_Gdiplus.vcx
  44615. GpGraphics
  44616. _Gdiplus.vcx
  44617. 333333
  44618. GPSIZE
  44619. \ffc\_Gdiplus.vcx
  44620. TCTEXT
  44621. TCFONTNAME
  44622. TNSIZE
  44623. TCSTYLE
  44624. TNLEFT
  44625. TNTOP
  44626. TNWIDTH
  44627. TNHEIGHT
  44628. LOFONT
  44629. LNCHARS
  44630. LNLINES
  44631. LNHEIGHT
  44632. LNWIDTH
  44633. LNFACTOR
  44634. LORECT
  44635. CREATE
  44636. LOGFX
  44637. CREATEFROMHWND
  44638. PAGEUNIT    
  44639. PAGESCALE
  44640. LOSIZE
  44641. MEASURESTRINGA    
  44642. GDIPRECTF
  44643. STRING
  44644. INTEGER
  44645. INTEGER
  44646. GPBITMAP
  44647. ffc\_gdiplus.vcx
  44648. GpBitmap
  44649. _GdiPlus.vcx
  44650. GdipCloneBitmapAreaI
  44651. GDIPLUS.DLLQ
  44652. pdfxGdipCloneBitmapAreaI
  44653. GPBITMAP
  44654. ffc\_gdiplus.vcx
  44655. GpBitmap
  44656. _GdiPlus.vcx
  44657. image/png
  44658. image/jpeg6
  44659. LCFILE
  44660. LNWIDTH
  44661. LNHEIGHT    
  44662. TCNEWFILE
  44663. _CTEMPFOLDER
  44664. LCEXT
  44665. LOBMP
  44666. CREATEFROMFILE
  44667. IMAGEHEIGHT
  44668. IMAGEWIDTH
  44669. LHBITMAP
  44670. LNSTATUS
  44671. GDIPCLONEBITMAPAREAI
  44672. GDIPLUS
  44673. PDFXGDIPCLONEBITMAPAREAI
  44674. PIXELFORMAT    
  44675. GETHANDLE    
  44676. LOCROPPED    
  44677. SETHANDLE
  44678. SETRESOLUTION
  44679. HORIZONTALRESOLUTION
  44680. VERTICALRESOLUTION    
  44681. LCENCODER
  44682. LCCROPPEDFILE
  44683. SAVETOFILE
  44684. OIMAGES
  44685. <!-- nLeft:C
  44686. , nTop:
  44687. , nWidth:
  44688. , nHeight:
  44689. , ContinuationType:
  44690. , cContents:
  44691. NFRXRECNO
  44692. NLEFT
  44693. NWIDTH
  44694. NHEIGHT
  44695. NOBJECTCONTINUATIONTYPE
  44696. CCONTENTSTOBERENDERED
  44697. GDIPLUSIMAGE
  44698. LCDEBUGINFO
  44699. LCHTML
  44700. LDEBUG
  44701. GETCONTINUATIONTYPE
  44702. NOUTFILE
  44703. LNADJUST
  44704. NSCREENDPI
  44705. NPAGEHEIGHT
  44706. COMMANDCLAUSES    
  44707. RANGEFROM
  44708. OBJTYPE
  44709. PROCESSLINES
  44710. PROCESSSHAPES
  44711. PROCESSTEXT
  44712. PROCESSIMAGES
  44713. LCOUTPUTDBF
  44714. LNWIDTH
  44715. LNHEIGHT
  44716. GETFULLFRXDATA
  44717. GETPAGEWIDTH
  44718. GETPAGEHEIGHT
  44719. OUTPUTFROMDATA
  44720. LDEFAULTMODE
  44721. PREPAREOUTPUT
  44722. <!-- AfterBand:
  44723. pagefooter
  44724. NBANDOBJCODE    
  44725. NFRXRECNO
  44726. CBAND
  44727. FRXDATASESSION
  44728. GETBANDNAME
  44729. LDEBUG
  44730. NOUTFILE
  44731. CURRENTDATASESSION
  44732. <!-- BeforeBand:C
  44733. NBANDOBJCODE    
  44734. NFRXRECNO
  44735. FRXDATASESSION
  44736. LDEBUG
  44737. NOUTFILE
  44738. GETBANDNAME
  44739. CURRENTDATASESSION
  44740. NOUTFILE
  44741. GetDeviceCaps
  44742. WIN32API
  44743. GetDC
  44744. WIN32API
  44745. Collection
  44746. GETDEVICECAPS
  44747. WIN32API
  44748. GETDC
  44749. LNSCREENDPI
  44750. NSCREENDPI
  44751. LDEBUG
  44752. _CTEMPFOLDER
  44753. OIMAGES
  44754. LOBJTYPEMODE
  44755. OFOXYPREVIEWER
  44756. COMMANDCLAUSES
  44757. LOPENVIEWER
  44758. PREVIEW
  44759. TOFILE
  44760. CTARGETFILENAME    
  44761. CDESTFILE
  44762. LCDESTFILE
  44763. COUTPUTPATH
  44764. LCFILE
  44765. _REPORTLISTENER
  44766. CANCELREPORT    
  44767. QUIETMODE
  44768. LQUIETMODE
  44769. outputfromdata,
  44770. getbandnamea
  44771. getfontstyle
  44772. rgbtohex
  44773. getcontinuationtypeY
  44774. getpageimgt
  44775. getpicturefromlistener
  44776. processimages
  44777. processtext
  44778. processlines` 
  44779. processshapes
  44780. getlinescnt
  44781. cropimage$*
  44782. renderhtml
  44783. prepareoutput
  44784. BeforeReport
  44785. AfterReport!4
  44786. AfterBandS4
  44787. BeforeBand
  44788. Destroy
  44789. updateproperties
  44790. PROCEDURE checkreportforgeneralfields
  44791. LOCAL m.liGeneralFields, m.lcID, m.llOpened
  44792. m.liGeneralFields = 0
  44793. IF TYPE("THIS.CommandClauses.File") = "C" AND ;
  44794.    (NOT EMPTY(THIS.CommandClauses.File)) AND ;
  44795.    (FILE(THIS.CommandClauses.File)) && NB this is done before setting up dummy CommandClauses
  44796.    THIS.SetFRXDataSession()
  44797.    IF USED("FRX") 
  44798.       * this will be true
  44799.       * if we call in BeforeReport,
  44800.       * but that seems to cause a problem,
  44801.       * when we re-assign SendGDIPlusImage
  44802.       * so we're likely to call earlier,
  44803.       * in the LoadReport method
  44804.       SELECT FRX
  44805.    ELSE
  44806.       USE (THIS.CommandClauses.File) SHARED NOUPDATE ALIAS FRX IN 0
  44807.       SELECT FRX
  44808.       m.llOpened = .T.
  44809.    ENDIF   
  44810.    COUNT FOR ObjType = FRX_OBJTYP_PICTURE  AND  ;
  44811.            Offset =  FRX_PICTURE_SOURCE_GENERAL TO ;
  44812.              m.liGeneralFields
  44813.    IF m.llOpened
  44814.       USE IN FRX         
  44815.    ENDIF
  44816.    THIS.ResetDataSession()
  44817. ENDIF  
  44818. RETURN ( m.liGeneralFields > 0 )
  44819. ENDPROC
  44820. PROCEDURE imagesrcattr_assign
  44821. LPARAMETERS m.vNewVal
  44822. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) AND ;
  44823.    (NOT m.vNewVal == THIS.imageSrcAttr)
  44824.    THIS.imageSrcAttr = m.vNewVal
  44825.    THIS.SynchXSLTProcessorUser()
  44826. ENDIF      
  44827. ENDPROC
  44828. PROCEDURE imagefilebasename_assign
  44829. LPARAMETERS m.vNewVal
  44830. THIS.ImageFileBaseName = ALLTR(CHRTRAN(JUSTSTEM(TRANSFORM(m.vNewVal)),;
  44831.                          OUTPUTCLASS_FILENAME_CHARS_DISALLOWED,"_"))
  44832. ENDPROC
  44833. PROCEDURE copyimagefilestoexternalfilelocation_assign
  44834. LPARAMETERS m.vNewVal
  44835. IF NOT THIS.IsRunning and VARTYPE(m.vNewVal) = "L"
  44836.    IF NOT (m.vNewVal = THIS.CopyImageFilesToExternalFileLocation)
  44837.       THIS.CopyImageFilesToExternalFileLocation = m.vNewVal
  44838.       THIS.adjustXSLTParameter(IIF(m.vNewVal,"1","0"),"copyImageFiles")
  44839.       IF THIS.CopyImageFilesToExternalFileLocation 
  44840.          THIS.makeExternalFileLocationReachable()
  44841.       ENDIF
  44842.    ENDIF   
  44843. ENDIF   
  44844. ENDPROC
  44845. PROCEDURE initializefilecopysettings
  44846. #define CLSID_JPG     "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
  44847. DECLARE INTEGER GdipSaveImageToFile in GDIPLUS.DLL  ;
  44848.        integer image,string filename,string @ CLSID_clsidEncoder,integer encoderParams        
  44849. LOCAL m.lcID
  44850. IF ISNULL(THIS.Jpgclsid) OR EMPTY(THIS.Jpgclsid)
  44851.    DECLARE integer CLSIDFromString IN ole32 string,string @
  44852.    m.lcID = SPACE(20)
  44853.    CLSIDFromString(STRCONV(CLSID_JPG ,STRCONV_DBCS_UNICODE),@m.lcID)      
  44854.    THIS.Jpgclsid = m.lcID
  44855.    m.lcID = ""
  44856. ENDIF
  44857. IF THIS.SendGDIPlusImage < LISTENER_SEND_GDI_IMAGE_HANDLE 
  44858.    THIS.SendGDIPlusImage =   LISTENER_SEND_GDI_IMAGE_HANDLE
  44859. ENDIF   
  44860. THIS.makeExternalFileLocationReachable()
  44861. ENDPROC
  44862. PROCEDURE adjustshapeaspectratio
  44863. LPARAMETERS m.tnWidth, m.tnHeight
  44864. IF VARTYPE(THIS.utilityImage) = "O"
  44865.     * the image is coming from a file of some sort
  44866.     * and we need to scale-and-retain
  44867.     LOCAL m.llAdjustHeight, m.llAdjustWidth
  44868.     DO CASE
  44869.         CASE (tnWidth > tnHeight)
  44870.             * use 100% of the width of the space and scale the height
  44871.             m.llAdjustHeight = .T.
  44872.         CASE (tnWidth < tnHeight)
  44873.             * use 100% of the height of the space and scale the width
  44874.             m.llAdjustWidth = .T.
  44875.         CASE (m.tnWidth = m.tnHeight)
  44876.             DO CASE
  44877.                 CASE THIS.utilityImage.HEIGHT > THIS.utilityImage.WIDTH
  44878.                     m.llAdjustWidth = .T.
  44879.                 CASE THIS.utilityImage.HEIGHT < THIS.utilityImage.WIDTH
  44880.                     m.llAdjustHeight = .T.
  44881.                 OTHERWISE
  44882.                     * both square, don't do adjustment
  44883.             ENDCASE
  44884.     ENDCASE
  44885.     *!* ----------------------------------------------------------------------
  44886.     *!* ----------------------------------------------------------------------
  44887.     *!* 2011-08-12 - Jacques Parent
  44888.     *!* Added MIN() with the currect tnHeight/tnWidth.
  44889.     *!* Sometime, if the report place is much larger than the image
  44890.     *!* ieself, the result is a picture much bigger as what is supposed to.
  44891.     *!* ----------------------------------------------------------------------
  44892.     *!* Example:  place of W = 1500 H = 300, but picture of PW = 600 PH = 200
  44893.     *!* Since W > H, then ajust H
  44894.     *!* IF H = W * (PH/PW), then 1500 * (200/600), so 1500 * 0.33333 = 500
  44895.     *!* In nthis case, even if the place in the report is 300, the picture 
  44896.     *!* will be displayed with a height of 500.
  44897.     *!* Adding a MIN get this fixed.
  44898.     *!* ----------------------------------------------------------------------
  44899.     *!* ----------------------------------------------------------------------
  44900.     IF m.llAdjustWidth
  44901.         m.tnWidth = MIN(m.tnHeight *  ;
  44902.             (THIS.utilityImage.WIDTH / THIS.utilityImage.HEIGHT), m.tnWidth)
  44903.     ENDIF
  44904.     IF m.llAdjustHeight
  44905.         m.tnHeight = MIN(m.tnWidth * ;
  44906.             (THIS.utilityImage.HEIGHT / THIS.utilityImage.WIDTH), m.tnHeight)
  44907.     ENDIF
  44908. ENDIF
  44909. ENDPROC
  44910. PROCEDURE fillalphaattr_assign
  44911. LPARAMETERS m.vNewVal
  44912. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  44913.    AND NOT (m.vNewVal == THIS.fillAlphaAttr)
  44914.    THIS.fillAlphaAttr = m.vNewVal
  44915.    THIS.SynchXSLTProcessorUser()
  44916. ENDIF   
  44917. ENDPROC
  44918. PROCEDURE fillredattr_assign
  44919. LPARAMETERS m.vNewVal
  44920. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44921.    AND NOT (m.vNewVal == THIS.fillRedAttr)
  44922.    THIS.fillRedAttr = m.vNewVal
  44923.    THIS.synchXsltProcessorUser()
  44924. ENDIF   
  44925. ENDPROC
  44926. PROCEDURE fillgreenattr_assign
  44927. LPARAMETERS m.vNewVal
  44928. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44929.    AND NOT (m.vNewVal == THIS.fillGreenAttr)
  44930.    THIS.fillGreenAttr = m.vNewVal
  44931.    THIS.synchXsltProcessorUser()
  44932. ENDIF   
  44933. ENDPROC
  44934. PROCEDURE fillblueattr_assign
  44935. LPARAMETERS m.vNewVal
  44936. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44937.    AND NOT (m.vNewVal == THIS.fillBlueAttr)
  44938.    THIS.fillBlueAttr = m.vNewVal
  44939.    THIS.synchXsltProcessorUser()
  44940. ENDIF   
  44941. ENDPROC
  44942. PROCEDURE penalphaattr_assign
  44943. LPARAMETERS m.vNewVal
  44944. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44945.    AND NOT (m.vNewVal == THIS.penAlphaAttr)
  44946.    THIS.penAlphaAttr = m.vNewVal
  44947.    THIS.synchXsltProcessorUser()
  44948. ENDIF   
  44949. ENDPROC
  44950. PROCEDURE penredattr_assign
  44951. LPARAMETERS m.vNewVal
  44952. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44953.    AND NOT (m.vNewVal == THIS.penRedAttr)
  44954.    THIS.penRedAttr = m.vNewVal
  44955.    THIS.synchXsltProcessorUser()
  44956. ENDIF   
  44957. ENDPROC
  44958. PROCEDURE pengreenattr_assign
  44959. LPARAMETERS m.vNewVal
  44960. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44961.    AND NOT (m.vNewVal == THIS.penGreenAttr)
  44962.    THIS.penGreenAttr = m.vNewVal
  44963.    THIS.synchXsltProcessorUser()
  44964. ENDIF   
  44965. ENDPROC
  44966. PROCEDURE penblueattr_assign
  44967. LPARAMETERS m.vNewVal
  44968. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44969.    AND NOT (m.vNewVal == THIS.penBlueAttr)
  44970.    THIS.penBlueAttr = m.vNewVal
  44971.    THIS.synchXsltProcessorUser()
  44972. ENDIF   
  44973. ENDPROC
  44974. PROCEDURE fontnameattr_assign
  44975. LPARAMETERS m.vNewVal
  44976. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44977.    AND NOT (m.vNewVal == THIS.fontNameAttr)
  44978.    THIS.fontNameAttr = m.vNewVal
  44979.    THIS.synchXsltProcessorUser()
  44980. ENDIF   
  44981. ENDPROC
  44982. PROCEDURE fontstyleattr_assign
  44983. LPARAMETERS m.vNewVal
  44984. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44985.    AND NOT (m.vNewVal == THIS.fontStyleAttr)
  44986.    THIS.fontStyleAttr = m.vNewVal
  44987.    THIS.synchXsltProcessorUser()
  44988. ENDIF   
  44989. ENDPROC
  44990. PROCEDURE fontsizeattr_assign
  44991. LPARAMETERS m.vNewVal
  44992. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal);
  44993.    AND NOT (m.vNewVal == THIS.fontSizeAttr)
  44994.    THIS.fontSizeAttr = m.vNewVal
  44995.    THIS.synchXsltProcessorUser()
  44996. ENDIF   
  44997. ENDPROC
  44998. PROCEDURE pageimageattr_assign
  44999. LPARAMETERS vNewVal
  45000. LOCAL m.lcVal
  45001. m.lcVal = THIS.pageImageAttr
  45002. DODEFAULT(m.vNewVal)
  45003. IF NOT (m.lcVal == THIS.pageImageAttr)
  45004.    THIS.SynchXSLTProcessorUser()
  45005. ENDIF  
  45006. ENDPROC
  45007. PROCEDURE datatypeattr_assign
  45008. LPARAMETERS m.vNewVal
  45009. LOCAL m.lcVal
  45010. m.lcVal = THIS.dataTypeAttr 
  45011. DODEFAULT(m.vNewVal)
  45012. IF NOT (m.lcVal == THIS.dataTypeAttr )
  45013.    THIS.SynchXSLTProcessorUser()
  45014. ENDIF   
  45015. ENDPROC
  45016. PROCEDURE datatextattr_assign
  45017. LPARAMETERS m.vNewVal
  45018. LOCAL m.lcVal
  45019. m.lcVal = THIS.dataTextAttr 
  45020. DODEFAULT(m.vNewVal)
  45021. IF NOT (m.lcVal == THIS.dataTextAttr)
  45022.    THIS.SynchXSLTProcessorUser()
  45023. ENDIF   
  45024. ENDPROC
  45025. PROCEDURE EvaluateContents
  45026. LPARAMETERS m.nFRXRecno, m.oObjProperties
  45027. IF DODEFAULT(m.nFRXRecno,m.oObjProperties)
  45028.    THIS.setFRXDataSession()
  45029.    IF USED(THIS.formattingChanges) AND NOT(EOF(THIS.formattingChanges))
  45030.       SELECT (THIS.formattingChanges) 
  45031.       WITH m.oObjProperties
  45032.          IF .Reload       
  45033.               REPLACE Reload WITH .T., ;
  45034.                    FR WITH .FillRed, ;
  45035.                    FG WITH .FillGreen, ;
  45036.                    FB WITH .FillBlue, ;
  45037.                    FA WITH .FillAlpha, ;
  45038.                    PR WITH .PenRed, ;
  45039.                    PG WITH .PenGreen, ;
  45040.                    PB WITH .PenBlue, ;
  45041.                    PA WITH .PenAlpha, ;
  45042.                    FNAME WITH .FontName, ;
  45043.                    FSTYLE WITH .FontStyle, ;
  45044.                    FSIZE WITH .FontSize
  45045.          ENDIF
  45046.       ENDWITH         
  45047.       SELECT FRX
  45048.    ENDIF
  45049.    THIS.resetDataSession() 
  45050. ENDIF   
  45051.            
  45052. ENDPROC
  45053. PROCEDURE initializeformattingchangescursor
  45054. DODEFAULT()
  45055. IF THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  45056.    IF USED(THIS.formattingChanges)
  45057.       USE IN (THIS.formattingChanges) && override, faster to re-create
  45058.       CREATE CURSOR (THIS.FormattingChanges) ;
  45059.              (FRXRecno i, ;
  45060.               Reload l, ;
  45061.               DText M, ;
  45062.               DType c(1), ;
  45063.               FA i, ;              
  45064.               FR i, ;
  45065.               FG i, ;              
  45066.               FB i, ;
  45067.               PA i, ;              
  45068.               PR i, ;
  45069.               PG i, ;              
  45070.               PB i, ;
  45071.               FName v(50), ;
  45072.               FStyle i, ;
  45073.               FSize i ; 
  45074.               )
  45075.     ELSE
  45076.        CREATE CURSOR (THIS.FormattingChanges) ;
  45077.              (FRXRecno i, ;
  45078.               Reload l, ;
  45079.               FA i, ;              
  45080.               FR i, ;
  45081.               FG i, ;              
  45082.               FB i, ;
  45083.               PA i, ;              
  45084.               PR i, ;
  45085.               PG i, ;              
  45086.               PB i, ;
  45087.               FName v(50), ;
  45088.               FStyle i, ;
  45089.               FSize i ; 
  45090.               )
  45091.     ENDIF              
  45092. ENDIF
  45093. ENDPROC
  45094. PROCEDURE Destroy
  45095. STORE NULL TO ;
  45096.    THIS.JPGclsid, ;
  45097.    THIS.FormattingChanges, ;
  45098.    THIS.UtilityImage
  45099. DODEFAULT()
  45100. ENDPROC
  45101. PROCEDURE contattr_assign
  45102. LPARAMETERS m.vNewVal
  45103. LOCAL m.lcVal
  45104. m.lcVal = THIS.ContAttr
  45105. DODEFAULT(m.vNewVal)
  45106. IF NOT (m.lcVal == THIS.ContAttr)
  45107.    THIS.SynchXSLTProcessorUser()
  45108. ENDIF   
  45109. ENDPROC
  45110. PROCEDURE widthattr_assign
  45111. LPARAMETERS m.vNewVal
  45112. LOCAL m.lcVal
  45113. m.lcVal = THIS.WidthAttr
  45114. DODEFAULT(m.vNewVal)
  45115. IF NOT (m.lcVal == THIS.WidthAttr)
  45116.    THIS.SynchXSLTProcessorUser()
  45117. ENDIF   
  45118. ENDPROC
  45119. PROCEDURE heightattr_assign
  45120. LPARAMETERS m.vNewVal
  45121. LOCAL m.lcVal
  45122. m.lcVal = THIS.HeightAttr
  45123. DODEFAULT(m.vNewVal)
  45124. IF NOT (m.lcVal == THIS.HeightAttr)
  45125.    THIS.SynchXSLTProcessorUser()
  45126. ENDIF   
  45127. ENDPROC
  45128. PROCEDURE leftattr_assign
  45129. LPARAMETERS m.vNewVal
  45130. LOCAL m.lcVal
  45131. m.lcVal = THIS.LeftAttr
  45132. DODEFAULT(m.vNewVal)
  45133. IF NOT (m.lcVal == THIS.LeftAttr)
  45134.    THIS.SynchXSLTProcessorUser()
  45135. ENDIF   
  45136. ENDPROC
  45137. PROCEDURE topattr_assign
  45138. LPARAMETERS m.vNewVal
  45139. LOCAL m.lcVal
  45140. m.lcVal = THIS.TopAttr
  45141. DODEFAULT(m.vNewVal)
  45142. IF NOT (m.lcVal == THIS.TopAttr)
  45143.    THIS.SynchXSLTProcessorUser()
  45144. ENDIF   
  45145. ENDPROC
  45146. PROCEDURE idattribute_assign
  45147. LPARAMETERS m.vNewVal
  45148. LOCAL m.lcVal
  45149. m.lcVal = THIS.IdAttribute
  45150. DODEFAULT(m.vNewVal)
  45151. IF NOT (m.lcVal == THIS.IdAttribute)
  45152.    THIS.SynchXSLTProcessorUser()
  45153. ENDIF   
  45154. ENDPROC
  45155. PROCEDURE idrefattribute_assign
  45156. LPARAMETERS m.vNewVal
  45157. LOCAL m.lcVal
  45158. m.lcVal = THIS.IdRefAttribute
  45159. DODEFAULT(m.vNewVal)
  45160. IF NOT (m.lcVal == THIS.IdRefAttribute)
  45161.    THIS.SynchXSLTProcessorUser()
  45162. ENDIF   
  45163. ENDPROC
  45164. PROCEDURE Init
  45165. IF DODEFAULT()
  45166.    THIS.AppName = OUTPUTXMLDISPLAY_APPNAME_LOC
  45167.    RETURN .F.   
  45168. ENDIF
  45169. RETURN NOT THIS.HadError
  45170. ENDPROC
  45171. PROCEDURE getrawformattinginfo
  45172. LPARAMETERS m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  45173. LOCAL m.lcInfo
  45174. THIS.adjustShapeAspectRatio (@tnWidth, @tnHeight)
  45175. m.lcInfo = DODEFAULT(m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType)
  45176. IF NOT EMPTY(THIS.ImageFieldtoFile) 
  45177.    m.lcInfo = m.lcInfo + " "+THIS.ImageSrcAttr+"='"+THIS.ImageFieldtoFile+"'"
  45178. ENDIF   
  45179. THIS.setFRXDataSession()
  45180. IF USED(THIS.formattingChanges) AND ;
  45181.    SEEK(RECNO("FRX"),THIS.formattingChanges,"FRXRecno")          
  45182.    SELECT (THIS.formattingChanges)
  45183.    IF Reload
  45184.       m.lcInfo = m.lcInfo + " "+THIS.penAlphaAttr+"='"+TRANSFORM(PA)+"'"      
  45185.       m.lcInfo = m.lcInfo + " "+THIS.penRedAttr+"='"+TRANSFORM(PR)+"'"      
  45186.       m.lcInfo = m.lcInfo + " "+THIS.penGreenAttr+"='"+TRANSFORM(PG)+"'"      
  45187.       m.lcInfo = m.lcInfo + " "+THIS.penBlueAttr+"='"+TRANSFORM(PB)+"'"                                       
  45188.       m.lcInfo = m.lcInfo + " "+THIS.fillAlphaAttr+"='"+TRANSFORM(FA)+"'"      
  45189.       m.lcInfo = m.lcInfo + " "+THIS.fillRedAttr+"='"+TRANSFORM(FR)+"'"      
  45190.       m.lcInfo = m.lcInfo + " "+THIS.fillGreenAttr+"='"+TRANSFORM(FG)+"'"      
  45191.       m.lcInfo = m.lcInfo + " "+THIS.fillBlueAttr+"='"+TRANSFORM(FB)+"'"                                       
  45192.       m.lcInfo = m.lcInfo + " "+THIS.fontNameAttr+"='"+TRANSFORM(FNAME)+"'"   
  45193.       m.lcInfo = m.lcInfo + " "+THIS.fontSizeAttr+"='"+TRANSFORM(FSIZE)+"'"   
  45194.       m.lcInfo = m.lcInfo + " "+THIS.fontStyleAttr+"='"+TRANSFORM(FSTYLE)+"'"                         
  45195.    ENDIF
  45196.    SELECT FRX
  45197. ENDIF
  45198. RETURN m.lcInfo
  45199. ENDPROC
  45200. PROCEDURE setdomformattinginfo
  45201. LPARAMETERS m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType
  45202. THIS.adjustShapeAspectRatio (@m.tnWidth, @m.tnHeight)
  45203. DODEFAULT( m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType)
  45204. IF NOT EMPTY(THIS.ImageFieldtoFile) 
  45205.    m.toNode.SetAttribute(THIS.ImageSrcAttr,THIS.ImageFieldtoFile )                  
  45206. ENDIF   
  45207. THIS.setFRXDataSession()
  45208. IF USED(THIS.formattingChanges) AND ;
  45209.    SEEK(RECNO("FRX"),THIS.formattingChanges,"FRXRecno")          
  45210.    SELECT (THIS.formattingChanges)
  45211.    IF Reload
  45212.       WITH m.toNode
  45213.           .setAttribute(THIS.penAlphaAttr,PA)
  45214.           .setAttribute(THIS.penRedAttr,PR)
  45215.           .setAttribute(THIS.penGreenAttr,PG)
  45216.           .setAttribute(THIS.penBlueAttr,PB)
  45217.           .setAttribute(THIS.fillAlphaAttr,FA)
  45218.           .setAttribute(THIS.fillRedAttr,FR)
  45219.           .setAttribute(THIS.fillGreenAttr,FG)
  45220.           .setAttribute(THIS.fillBlueAttr,FB)
  45221.           .setAttribute(THIS.fontNameAttr,FNAME)          
  45222.           .setAttribute(THIS.fontSizeAttr,FSIZE)          
  45223.           .setAttribute(THIS.fontStyleAttr,FSTYLE)                              
  45224.       ENDWITH
  45225.    ENDIF
  45226.    SELECT FRX
  45227. ENDIF
  45228. ENDPROC
  45229. PROCEDURE Render
  45230. LPARAMETERS m.nFRXRecNo,m.nLeft,m.nTop,m.nWidth,m.nHeight, ;
  45231.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  45232. LOCAL m.llCopyImage, m.lcFile, m.liDefaultBehavior
  45233. IF m.GDIPlusImage > 0 AND ;
  45234.   (ISNULL(THIS.Jpgclsid) OR EMPTY(THIS.Jpgclsid))
  45235.    * we didn't have any general fields but we do have
  45236.    * an image control, referenced as an expression,
  45237.    * they have explicitly turned on SendGDIPlusImage, and
  45238.    * this is the first time we're hitting an image control:
  45239.    THIS.initializeFileCopySettings()
  45240. ENDIF    
  45241. THIS.SetFRXDataSession()
  45242. GO m.nFRXRecNo IN FRX
  45243. IF THIS.CopyImageFilesToExternalFileLocation 
  45244.     IF (FRX.ObjType = FRX_OBJTYP_PICTURE) AND ;
  45245.        FRX.Offset # FRX_PICTURE_SOURCE_GENERAL AND ;
  45246.        FILE(m.cContentsToBeRendered)
  45247.        * use FILE() function here,
  45248.        * need to find if it is
  45249.        * built into an app
  45250.        m.llCopyImage = .T.
  45251.     ENDIF
  45252. ENDIF   
  45253. IF (FRX.ObjType = FRX_OBJTYP_PICTURE) AND ;
  45254.     FRX.General = FRX_PICTUREMODE_SCALE_KEEP_SHAPE AND ;
  45255.     FRX.Offset # FRX_PICTURE_SOURCE_GENERAL AND ;
  45256.     FILE(m.cContentsToBeRendered)
  45257.     * NB: doing this *only* when necessary for re-scaling.
  45258.     * see above for why FILE() function -- this will work
  45259.     * with the image object.
  45260.     *!* -----------------------------------------
  45261.     *!* -----------------------------------------
  45262.     *!* 2011-08-18 - Jacques Parent
  45263.     *!* -----------------------------------------
  45264.     *!* Eliminate the LOADPICTURE that only use BMP, ICO ans WMF
  45265.     *!* Instead, open the image file with the IMAGE object
  45266.     THIS.utilityImage = CreateObject("Image")
  45267.     THIS.utilityImage.Picture = m.cContentsToBeRendered
  45268.     *!*        THIS.utilityImage = NewObject("GpBitmap", "_GdiPlus.vcx")
  45269.     *!*        THIS.utilityImage.CreateFromFile(m.cContentsToBeRendered)
  45270.     *!* -----------------------------------------
  45271.     *!* -----------------------------------------
  45272. ENDIF    
  45273. THIS.SetCurrentDataSession()   
  45274. DO CASE
  45275. CASE m.llCopyImage
  45276.    m.lcFile = FORCEPATH(m.cContentsToBeRendered, ;
  45277.             FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))
  45278.             
  45279.    IF EMPTY(SYS(2000,m.lcFile))
  45280.       * used to be:
  45281.       * COPY FILE (cContentsToBeRendered) TO (lcFile)
  45282.       * to handle files built into an app
  45283.       
  45284.       STRTOFILE(FILETOSTR(m.cContentsToBeRendered),m.lcFile)
  45285.    ENDIF   
  45286.    IF EMPTY(SYS(2000,m.lcFile))
  45287.       THIS.ImageFieldToFile = ""
  45288.    ELSE
  45289.       THIS.ImageFieldToFile = JUSTFNAME(m.lcFile)
  45290.    ENDIF
  45291. CASE THIS.SendGDIPlusImage > LISTENER_SEND_GDI_IMAGE_NONE  AND ;
  45292.    m.GDIPlusImage > 0  AND ;
  45293.    GdipSaveImageToFile(m.GDIPlusImage,;
  45294.        STRCONV(FORCEPATH(THIS.ImageFileBaseName + "_"+ ;
  45295.                          TRANSFORM(THIS.ImageFieldInstance+1)+".jpg",;
  45296.                          FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))+CHR(0), ;
  45297.                STRCONV_DBCS_UNICODE) ,THIS.JPGCLSID,0) = 0
  45298.    THIS.ImageFieldInstance = THIS.ImageFieldInstance + 1       
  45299.    THIS.ImageFieldToFile = THIS.ImageFileBaseName +"_"+ ;
  45300.                            TRANSFORM(THIS.ImageFieldInstance)+".jpg"
  45301. OTHERWISE
  45302.    THIS.ImageFieldToFile = ""
  45303. ENDCASE
  45304. m.liDefaultBehavior = DODEFAULT(m.nFRXRecNo, @m.nLeft,@m.nTop,@m.nWidth,@m.nHeight, ;
  45305.           @m.nObjectContinuationType, @m.cContentsToBeRendered, @m.GDIPlusImage)
  45306.           
  45307. THIS.ImageFieldToFile = ""
  45308. *!* -----------------------------------------
  45309. *!* -----------------------------------------
  45310. *!* 2011-08-18 - Jacques Parent
  45311. *!* -----------------------------------------
  45312. *!* Just make sure to clear up the the picture
  45313. *!* by destroying the image object AND by
  45314. *!* clearing the resources for the image
  45315. IF NOT ISNULL(THIS.UtilityImage)
  45316.     THIS.UtilityImage = NULL
  45317.     CLEAR RESOURCES (m.cContentsToBeRendered)
  45318. ENDIF
  45319. *!* -----------------------------------------
  45320. *!* -----------------------------------------
  45321. THIS.resetDataSession()
  45322. RETURN m.liDefaultBehavior
  45323. ENDPROC
  45324. PROCEDURE UnloadReport
  45325. DODEFAULT()
  45326. *!* 2011-08-12 - Jacques Parent - Cleanup ehe Temp Image collection
  45327. WITH This
  45328.     If VARTYPE(.oTempImagesCollection) = "O" Then && Cleanup Temporary Images Files
  45329.         LOCAL lcItem AS String
  45330.         FOR EACH lcItem IN .oTempImagesCollection FOXOBJECT
  45331.             *!* 2010-08-25 - Jacques Parent - Add TRY CATCH ENDTRY to catch error message
  45332.             IF VARTYPE(lcItem) = "C" AND FILE(lcItem)
  45333.                 LOCAL loExc as Exception 
  45334.                 TRY
  45335.                     DELETE FILE (lcItem)
  45336.                 CATCH TO loExc
  45337.                     * SET STEP ON 
  45338.                 ENDTRY
  45339.             ENDIF
  45340.         ENDFOR
  45341.         .oTempImagesCollection = Null
  45342.     ENDIF
  45343. ENDWITH
  45344. IF NOT (THIS.noPageEject OR ;
  45345.  ((TYPE("THIS.CommandClauses.NoPageEject") = "L") AND ;
  45346.    THIS.CommandClauses.NoPageEject))
  45347.    IF NOT ISNULL(THIS.OldExternalFileLocation)
  45348.       * even if empty
  45349.       THIS.ExternalFileLocation = THIS.OldExternalFileLocation
  45350.       THIS.OldExternalFileLocation = NULL    
  45351.    ENDIF      
  45352.    IF NOT (THIS.OldSendGDIPlusImage = THIS.SendGDIPlusImage)
  45353.       THIS.SendGDIPlusImage = THIS.OldSendGDIPlusImage
  45354.    ENDIF   
  45355. ENDIF   
  45356. THIS.resetDataSession()
  45357. ENDPROC
  45358. PROCEDURE resetdocument
  45359. THIS.ResetToDefault("ImageFieldInstance")
  45360. THIS.ResetToDefault("ImageFieldToFile")
  45361. THIS.ResetToDefault("UtilityImage")
  45362. DODEFAULT()
  45363. ENDPROC
  45364. PROCEDURE BeforeReport
  45365. IF THIS.XMLMode # OUTPUTXML_RDL_ONLY
  45366.    THIS.oldSendGDIPlusImage = THIS.SendGDIPlusImage     
  45367.    THIS.oldExternalFileLocation =  THIS.ExternalFileLocation    
  45368.    THIS.JPGclsid = NULL && force reinitialization for each report
  45369.                         && on possible discovery of an image control mid-way
  45370.    IF THIS.checkReportForGeneralFields() 
  45371.       THIS.initializeFileCopySettings()
  45372.    ENDIF    
  45373. ENDIF   
  45374. DODEFAULT()
  45375. THIS.resetDataSession()
  45376. ENDPROC
  45377. PROCEDURE getvfprdlcontents
  45378. LPARAMETERS m.tcNodeName, m.tlAsString
  45379. IF VARTYPE(THIS.CommandClauses) = "O"
  45380.    ADDPROPERTY(THIS.CommandClauses,;
  45381.              "externalFileLocation", ;
  45382.              THIS.externalFileLocation)
  45383.              
  45384.    ADDPROPERTY(THIS.CommandClauses, ;
  45385.             "copyImageFilesToExternalFileLocation", ;
  45386.             THIS.copyImageFilesToExternalFileLocation) 
  45387.             
  45388.    ADDPROPERTY(THIS.CommandClauses, ;
  45389.             "imageFileBaseName", ;
  45390.             THIS.imageFileBaseName)             
  45391. ENDIF            
  45392.             
  45393. RETURN DODEFAULT(m.tcNodeName, m.tlAsString)                         
  45394. ENDPROC
  45395. PROCEDURE AfterReport
  45396. LPARAMETERS tlCalledEarly
  45397. DODEFAULT(tlCalledEarly)
  45398. THIS.resetDataSession() 
  45399. ENDPROC
  45400. PROCEDURE gdipluslib_assign
  45401. LPARAMETERS m.tvValue
  45402. IF VARTYPE(m.tvValue) = "C"
  45403.    m.tvValue = ALLTRIM(m.tvValue)
  45404.    DO CASE
  45405.    CASE(EMPTY(m.tvValue) OR FILE(m.tvValue))
  45406.        THIS.gdiPlusLib = m.tvValue
  45407.    CASE FILE(FORCEEXT(m.tvValue,"VCX"))
  45408.        THIS.gdiPlusLib = FORCEEXT(m.tvValue,"VCX")
  45409.    ENDCASE    
  45410. ENDIF   
  45411. ENDPROC
  45412. PROCEDURE mimetype_assign
  45413. LPARAMETERS m.tvValue
  45414. IF VARTYPE(m.tvValue) = "C" AND "/" $ m.tvValue
  45415.    THIS.mimetype = ALLTRIM(m.tvValue)
  45416. ENDIF
  45417. ENDPROC
  45418. PROCEDURE forceon_assign
  45419. LPARAMETERS m.tvValue
  45420. IF VARTYPE(m.tvValue) = "L"
  45421.    THIS.forceOn = m.tvValue
  45422. ENDIF
  45423. ENDPROC
  45424. PROCEDURE applyfx
  45425. LPARAMETERS m.toListener, m.tcMethodToken, ;
  45426.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  45427.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  45428.          
  45429. LOCAL m.liSession, m.liSelect, m.liFRXRecno, m.lvReturn, ;
  45430.       m.liDriver, m.err AS EXCEPTION
  45431. m.lvReturn = .T.
  45432. IF THIS.listenerSupportsSaveClip(m.toListener)
  45433.    TRY
  45434.       m.liSession = SET("DATASESSION")
  45435.       IF m.toListener.FRXDATASESSION > -1
  45436.          SET DATASESSION TO m.toListener.FRXDATASESSION
  45437.          m.liSelect = SELECT(0)
  45438.          DO CASE
  45439.          CASE m.tcMethodToken == "BEFOREREPORT"
  45440.             THIS.aImageCopies = .F.
  45441.             THIS.iImageInstanceIndex = 0
  45442.             IF USED (m.toListener.MemberDataAlias)
  45443.                SELECT (m.toListener.MemberDataAlias)
  45444.                LOCATE FOR ;
  45445.                   NAME == THIS.sNameSpace 
  45446.                THIS.lOnThisRun = (FOUND() OR THIS.forceOn)
  45447.                IF THIS.lOnThisRun
  45448.                   THIS.Setup(m.toListener)
  45449.                ENDIF   
  45450.             ENDIF
  45451.          CASE m.tcMethodToken == "RENDER" AND ;
  45452.               NOT ISNULL(m.toListener.FFCGraphics) AND ;
  45453.               THIS.lOnThisRun
  45454.             m.lvReturn = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR
  45455.             m.liFRXRecno =  m.toListener.getFRXRecno(m.tcMethodToken,m.tP1, m.tP2)
  45456.             GO m.liFRXRecNo IN FRX
  45457.             SELECT (m.toListener.MemberDataAlias)
  45458.             LOCATE FOR FRXRecno = m.liFRXRecno AND ;
  45459.                    NAME == THIS.sNameSpace
  45460.             IF FOUND()
  45461.                THIS.setupImageClip(m.toListener, ;
  45462.                    m.tP2, m.tP3, m.tP4, m.tP5, @m.tP7, ;
  45463.                    (FRX.ObjType = FRX_OBJTYP_PICTURE))
  45464.             ENDIF    
  45465.          CASE m.tcMethodToken == "AFTERREPORT"
  45466.             IF THIS.listenerSupportsSaveClip(m.toListener,.F.)
  45467.                THIS.saveImageClips(m.toListener)
  45468.             ENDIF
  45469.             THIS.Cleanup(m.toListener)
  45470.          ENDCASE
  45471.      ELSE
  45472.          THIS.lOnThisRun = .F.   
  45473.      ENDIF   
  45474.          
  45475.   CATCH TO m.err
  45476.      #IF OUTPUTCLASS_DEBUGGING
  45477.          SUSPEND
  45478.      #ENDIF
  45479.   FINALLY
  45480.      IF VARTYPE(m.err) = "O" 
  45481.         *&* this object cleans up after an error --
  45482.         *&* doesn't provide a choice, although it could.
  45483.         THIS.Cleanup(m.toListener)
  45484.      ENDIF
  45485.      IF m.toListener.FRXDataSession # -1
  45486.         SET DATASESSION TO m.toListener.FrxDataSession
  45487.         SELECT (m.liSelect)
  45488.         SET DATASESSION TO (m.liSession)
  45489.      ENDIF   
  45490.   ENDTRY
  45491. ENDIF
  45492. RETURN  m.lvReturn
  45493.       
  45494.          
  45495.          
  45496. ENDPROC
  45497. PROCEDURE getcurrentclipfilename
  45498. IF THIS.iImageInstanceIndex = 0 OR ;
  45499.    EMPTY(THIS.aImageCopies[THIS.iImageInstanceIndex,2])
  45500.    RETURN ""
  45501.    RETURN THIS.aImageCopies[THIS.iImageInstanceIndex,2]
  45502. ENDIF   
  45503. ENDPROC
  45504. PROCEDURE outputpageclip
  45505. LPARAMETERS m.nPageNo, ;
  45506.             m.eDevice, ;
  45507.             m.nDeviceType, ;
  45508.             m.nleft, m.nTop, m.nWidth, m.nHeight, ;
  45509.             m.nClipLeft,m.nClipTop, m.nClipWidth, m.nClipHeight
  45510.   LOCAL m.laBind[1]
  45511.   AEVENTS(m.laBind,0)
  45512.   THIS.saveImageClips(laBind[1],m.nPageNo)
  45513. ENDPROC
  45514. PROCEDURE setupimageclip
  45515. LPARAMETERS m.toListener, ;
  45516.             m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  45517.             m.tvContentsToBeRendered, m.tlImageControl
  45518. LOCAL m.lcFileName
  45519. THIS.iImageInstanceIndex = THIS.iImageInstanceIndex + 1
  45520. DIME THIS.aImageCopies[THIS.iImageInstanceIndex,6]
  45521.        
  45522. * create a file name based on THIS.Name and THIS.iImageInstanceIndex
  45523. * unless the name of the object is the name of the class, which
  45524. * may happen if it is a privately-owned object
  45525. IF UPPER(THIS.Name) == UPPER(THIS.Class)
  45526.    m.lcFileName = "C"+SYS(2015)
  45527.    m.lcFileName = THIS.Name   
  45528. ENDIF
  45529. m.lcFileName = FORCEPATH(FORCEEXT(;
  45530.                m.lcFileName + "_"+TRANSFORM(THIS.iImageInstanceIndex), ;
  45531.               THIS.getImageExt()),THIS.sImagePath)                    
  45532. IF m.tlImageControl  
  45533.    m.tvContentsToBeRendered = m.lcFileName
  45534.    #IF OUTPUTCLASS_DEBUGGING
  45535.        m.tvContentsToBeRendered = STRCONV(m.lcFileName,STRCONV_DBCS_UNICODE)
  45536.    #ENDIF 
  45537. ENDIF   
  45538.      
  45539. THIS.aImageCopies[THIS.iImageInstanceIndex,1] = m.toListener.PageNo
  45540. THIS.aImageCopies[THIS.iImageInstanceIndex,2] = m.lcFileName
  45541. THIS.aImageCopies[THIS.iImageInstanceIndex,3] = m.tnLeft
  45542. THIS.aImageCopies[THIS.iImageInstanceIndex,4] = m.tnTop
  45543. THIS.aImageCopies[THIS.iImageInstanceIndex,5] = m.tnWidth
  45544. THIS.aImageCopies[THIS.iImageInstanceIndex,6] = m.tnHeight     
  45545. ENDPROC
  45546. PROCEDURE saveimageclips
  45547. LPARAMETERS m.toListener, m.tiPage
  45548. IF NOT THIS.listenerSupportsSaveClip(m.toListener)
  45549.    RETURN .F.
  45550. ENDIF
  45551. LOCAL m.lcTempfile, m.liPageIndex, m.liImageIndex, m.liStartPage, m.liEndPage
  45552. m.lcTempFile = FORCEEXT(FORCEPATH(SYS(2015),SYS(2023)),"EMF") && always goes to temp dir
  45553. THIS.oPoint.Set(0,0)
  45554. IF THIS.listenerSupportsSaveClip(m.toListener, .T.) 
  45555.    m.liStartPage = VAL(TRANSFORM(m.tiPage))
  45556.    m.liEndPage  = m.liStartPage
  45557.    UNBINDEVENTS(THIS)
  45558.    * avoid recursion the easy way.
  45559.    m.liStartPage = 1
  45560.    m.liEndPage = m.toListener.PageTotal
  45561. ENDIF
  45562. IF EMPTY(THIS.sImageFullPath)
  45563.    * should just happen the first time through
  45564.    * in paged mode
  45565.    IF PEMSTATUS(m.toListener,"targetFileName",5) AND ;
  45566.       NOT EMPTY(JUSTPATH(m.toListener.targetFileName))
  45567.       THIS.sImageFullPath = FULLPATH(THIS.sImagePath,m.toListener.targetFileName)
  45568.    ELSE
  45569.       THIS.sImageFullPath = FULLPATH(THIS.sImagePath)
  45570.    ENDIF   
  45571. ENDIF   
  45572. m.liImageIndex = ASCAN(THIS.aImageCopies,m.liStartPage,1,THIS.iImageInstanceIndex,1,8)
  45573. IF m.liImageIndex > 0
  45574.    FOR m.liPageIndex = m.liStartPage TO m.liEndPage
  45575.        m.toListener.OutputPage(m.liPageIndex,m.lcTempFile,100)
  45576.        THIS.oImageSrc.CreateFromFile(m.lcTempFile)
  45577.        DO WHILE m.liImageIndex <= THIS.iImageInstanceIndex
  45578.           IF THIS.aImageCopies[m.liImageIndex,1] > m.liPageIndex
  45579.               EXIT
  45580.           ENDIF
  45581.           THIS.oImageDest.Create(CEILING(THIS.aImageCopies[m.liImageIndex,5]/10) + ;
  45582.                                  THIS.margin,;
  45583.                                  CEILING(THIS.aImageCopies[liImageIndex,6]/10) + ;
  45584.                                  THIS.margin)
  45585.           THIS.oPrivateGraphics.CreateFromImage(THIS.oImageDest)
  45586.           THIS.oRect.Set(FLOOR(THIS.aImageCopies[m.liImageIndex,3]/10) ,;
  45587.                          FLOOR(THIS.aImageCopies[m.liImageIndex,4]/10) ,;
  45588.                          CEILING(THIS.aImageCopies[m.liImageIndex,5]/10  + ;
  45589.                          THIS.margin),;
  45590.                          CEILING(THIS.aImageCopies[liImageIndex,6]/10) + ;
  45591.                          THIS.margin)
  45592.           THIS.oPrivateGraphics.DrawImagePortionAt(;
  45593.                     THIS.oImageSrc, THIS.oPoint, THIS.oRect, 2)
  45594.           THIS.oImageDest.SaveToFile(FORCEPATH(THIS.aImageCopies[m.liImageIndex,2], ;
  45595.                                                THIS.sImageFullPath), ;
  45596.                                      THIS.mimetype) 
  45597.           m.liImageIndex = m.liImageIndex + 1 
  45598.        ENDDO
  45599.     NEXT
  45600.     ERASE (m.lcTempFile)
  45601. ENDIF   
  45602. IF THIS.listenerSupportsSaveClip(m.toListener,.T.) 
  45603.    BINDEVENT(m.toListener,"OutputPage",THIS,"outputPageClip")
  45604. ENDIF
  45605. ENDPROC
  45606. PROCEDURE getimageext
  45607. *&* override as you see fit.
  45608. RETURN SUBSTR(THIS.mimetype,RAT("/",THIS.mimetype) + 1)
  45609. ENDPROC
  45610. PROCEDURE setup
  45611. LPARAMETERS m.toListener
  45612. IF VARTYPE(m.toListener) # "O" 
  45613.    THIS.lOnThisRun = .F.
  45614.    * early quit
  45615. ENDIF
  45616. IF THIS.lOnThisRun 
  45617.    IF EMPTY(THIS.gdiPlusLib) OR ;
  45618.       NOT FILE(THIS.gdiPlusLib)
  45619.       IF ISNULL(m.toListener.FFCGraphics)
  45620.          THIS.lOnThisRun = .F.
  45621.       ELSE
  45622.          THIS.gdiPlusLib = m.toListener.FFCGraphics.ClassLibrary
  45623.       ENDIF         
  45624.    ENDIF
  45625.    * test:
  45626.    LOCAL loTemp
  45627.    TRY
  45628.       loTemp = NEWOBJECT("gpPoint",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45629.    CATCH WHEN .T.
  45630.       THIS.gdiPlusLib = "_gdiplus.vcx"
  45631.       IF FILE(THIS.gdiPlusLib)
  45632.          THIS.gdiPlusLib = ""
  45633.       ELSE
  45634.          THIS.gdiPlusLib = _REPORTOUTPUT
  45635.       ENDIF 
  45636.       * one more try  
  45637.       TRY
  45638.          loTemp = NEWOBJECT("gpPoint",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45639.       CATCH WHEN .T.
  45640.          loTemp = NULL
  45641.       ENDTRY
  45642.    FINALLY
  45643.       IF VARTYPE(loTemp) # "O"
  45644.          THIS.lOnThisRun = .F.
  45645.       ENDIF
  45646.       loTemp = NULL
  45647.    ENDTRY      
  45648. ENDIF
  45649. IF THIS.lOnThisRun   
  45650.    IF PEMSTATUS(m.toListener,"externalFileLocation",5) AND ;
  45651.       (NOT EMPTY(m.toListener.externalFileLocation)) 
  45652.       THIS.sImagePath = ADDBS(m.toListener.externalFileLocation)
  45653.    ELSE
  45654.       STORE SYS(2023) TO THIS.sImagePath, THIS.sImageFullPath 
  45655.    ENDIF
  45656.    IF THIS.listenerSupportsSaveClip(m.toListener,.T.)
  45657.       * page-at-a-time mode
  45658.       * bind to outputpage event
  45659.       BINDEVENT(m.toListener,"OutputPage",THIS,"outputPageClip")
  45660.    ENDIF
  45661.    IF VARTYPE(THIS.oImageSrc) # "O"
  45662.       THIS.oImageSrc = NEWOBJECT("gpBitMap",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45663.    ENDIF                             
  45664.    IF VARTYPE(THIS.oImageDest) # "O"
  45665.        THIS.oImageDest = NEWOBJECT("gpBitMap",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45666.    ENDIF                    
  45667.    IF VARTYPE(THIS.oPoint) # "O"
  45668.       THIS.oPoint = NEWOBJECT("gpPoint",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45669.    ENDIF         
  45670.    IF VARTYPE(THIS.oRect) # "O"
  45671.       THIS.oRect = NEWOBJECT("gpRectangle",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45672.    ENDIF        
  45673.    IF VARTYPE(THIS.oPrivateGraphics) # "O"
  45674.       THIS.oPrivateGraphics = NEWOBJECT("gpGraphics",THIS.gdiPlusLib,THIS.gdiPlusLibModule)
  45675.    ENDIF
  45676.  ENDIF   
  45677. ENDPROC
  45678. PROCEDURE gdipluslibmodule_assign
  45679. LPARAMETERS m.tvValue
  45680. IF VARTYPE(m.tvValue) = "C"
  45681.    m.tvValue = ALLTRIM(m.tvValue)
  45682.    IF(EMPTY(m.tvValue) OR (NOT EMPTY(SYS(2000,(m.tvValue)))))
  45683.        THIS.gdiPlusLibModule = m.tvValue
  45684.    ENDIF
  45685. ENDIF   
  45686. ENDPROC
  45687. PROCEDURE listenersupportssaveclip
  45688. LPARAMETERS m.toListener,m.tlActInPagedMode
  45689. DO CASE
  45690. CASE m.toListener.ListenerType = LISTENER_TYPE_DEF
  45691.    RETURN .F.
  45692. CASE PCOUNT() < 2
  45693.    RETURN m.toListener.ListenerType # LISTENER_TYPE_DEF
  45694. CASE tlActInPagedMode
  45695.    RETURN INLIST(m.toListener.ListenerType,LISTENER_TYPE_PRN,LISTENER_TYPE_PAGED)
  45696. OTHERWISE
  45697.    RETURN INLIST(m.toListener.ListenerType,LISTENER_TYPE_PRV,LISTENER_TYPE_ALLPGS)
  45698. ENDCASE    
  45699. ENDPROC
  45700. PROCEDURE cleanup
  45701. LPARAMETERS m.toListener
  45702. IF THIS.lOnThisRun AND VARTYPE(m.toListener) = "O" AND ;
  45703.    THIS.listenerSupportsSaveClip(m.toListener,.T.)
  45704.    UNBINDEVENTS(THIS)
  45705. ENDIF
  45706. THIS.lOnThisRun = .F.
  45707. STORE "" TO ;
  45708.       THIS.sImagePath, ;
  45709.       THIS.sImageFullPath
  45710. STORE NULL TO  ;
  45711.       THIS.oImageSrc, ;
  45712.       THIS.oImageDest, THIS.oPrivateGraphics, ;
  45713.       THIS.oPoint, THIS.oRect 
  45714. ENDPROC
  45715. PROCEDURE margin_assign
  45716. LPARAMETERS m.tvNewVal
  45717. IF VARTYPE(m.tvNewVal) = "N"
  45718.    THIS.margin = INT(m.tvNewVal)
  45719. ENDIF   
  45720. ENDPROC
  45721. PROCEDURE Init
  45722.        #DEFINE THISNAMESPACE         "Spacefold.LSN.gfxOutputClip"
  45723.        
  45724.        *&* An appropriate namespace must be defined for cases in which
  45725.        *&* you want to use this gfx on its own and share it
  45726.        *&* by placing it in the GFXs collection.
  45727.        *&* You can set the outputclip behavior to occur only 
  45728.        *&* after all other rendering is through, and
  45729.        *&* also ensure availability of the clip files and
  45730.        *&* clip file names to all Successors, by using this 
  45731.        *&* approach.  Simply add memberdata to the layout elements
  45732.        *&* you want clipped (no other memberdata property besides 
  45733.        *&* the name attribute is needed by this object).
  45734.        *&* The layout elements to be clipped
  45735.        *&* can be of any report control type.
  45736.        
  45737.        *&* However, this object can be invoked explicitly, even
  45738.        *&* when shared, by a custom rendering extension
  45739.        *&* using "ForceOn" behavior, and without
  45740.        *&* any memberdata instructions in the report.
  45741.        *&* It is also constructed to be 
  45742.        *&* well-behaved if multiple custom rendering extensions
  45743.        *&* keeps private copies and invoke them explicitly
  45744.        *&* rather than putting a shared copy in the GFXs collection.
  45745.        
  45746.        *&* Now that you have read this note <g>
  45747.        *&* and if you want this object to work on its
  45748.        *&* own in the GFXs collection as a shared worker object,
  45749.        *&* you can :
  45750.        *&* override the Init in your subclass with 
  45751.        *&* an appropriate namespace value 
  45752.        *&* OR         
  45753.        *&* uncomment the IF/ENDIF below and set 
  45754.        *&* an appropriate default property definition
  45755.        *&* in your subclass.     
  45756.        *&* IF VARTYPE(THIS.sNamespace) # "C" OR EMPTY(THIS.sNamespace)
  45757.           THIS.sNameSpace = THISNAMESPACE 
  45758.        *&* ENDIF 
  45759. ENDPROC
  45760. PROCEDURE Destroy
  45761. THIS.Cleanup()
  45762. ENDPROC
  45763. ~%PROCEDURE allowmodalmessages_assign
  45764. LPARAMETERS m.vNewVal
  45765. IF VARTYPE(m.vNewVal) = "L"
  45766.    THIS.AllowModalMessages = m.vNewVal
  45767. ENDIF   
  45768. ENDPROC
  45769. PROCEDURE lignoreerrors_assign
  45770. LPARAMETERS m.vNewVal
  45771. IF VARTYPE(m.vNewVal) = "L"
  45772.    THIS.lIgnoreErrors = m.vNewVal
  45773. ENDIf   
  45774. ENDPROC
  45775. PROCEDURE prepareerrormessage
  45776. LPARAMETERS m.nError, m.cMethod, m.nLine, m.cName, m.cMessage, m.cCodeLine
  45777. LOCAL m.lcErrorMessage, m.lcCodeLineMsg
  45778. IF VARTYPE(cMessage) = "C"
  45779.    m.lcErrorMessage = m.cMessage
  45780.    m.lcErrorMessage = MESSAGE()
  45781. ENDIF
  45782. m.lcErrorMessage = m.lcErrorMessage + CHR(13) + CHR(13)
  45783. IF VARTYPE(cName) = "C"
  45784.    m.lcErrorMessage = m.lcErrorMessage + m.cName
  45785.    m.lcErrorMessage = m.lcErrorMessage + this.Name
  45786. ENDIF
  45787. m.lcErrorMessage = m.lcErrorMessage + CHR(13)+ ;
  45788.           OUTPUTCLASS_ERRNOLABEL_LOC +ALLTRIM(STR(m.nError))+CHR(13)+ ;
  45789.          OUTPUTCLASS_ERRPROCLABEL_LOC +LOWER(ALLTRIM(m.cMethod))
  45790. IF VARTYPE(m.cCodeLine) = "C"
  45791.    m.lcCodeLineMsg = m.cCodeLine
  45792.    m.lcCodeLineMsg = MESSAGE(1)
  45793. ENDIF        
  45794. IF BETWEEN(m.nLine,1,100000) AND NOT m.lcCodeLineMsg="..."
  45795.     m.lcErrorMessage= ;
  45796.        m.lcErrorMessage+CHR(13)+ OUTPUTCLASS_ERRLINELABEL_LOC+ ;
  45797.         ALLTRIM(STR(m.nLine))
  45798.     IF NOT EMPTY(m.lcCodeLineMsg)
  45799.        m.lcErrorMessage= ;
  45800.            m.lcErrorMessage+CHR(13)+CHR(13)+m.lcCodeLineMsg
  45801.     ENDIF
  45802. ENDIF
  45803. RETURN m.lcErrorMessage
  45804. ENDPROC
  45805. PROCEDURE pushglobalsets
  45806.   * abstract: set any globals here that aren't session-bound
  45807. ENDPROC
  45808. PROCEDURE popglobalsets
  45809. * abstract: restore any globals here that aren't session-bound      
  45810. ENDPROC
  45811. PROCEDURE clearerrors
  45812. THIS.HadError = .F.
  45813. THIS.LastErrorMessage = ""
  45814. ENDPROC
  45815. PROCEDURE getlasterrormessage
  45816. RETURN STRTRAN(THIS.LastErrorMessage, CHR(13), " ")
  45817. ENDPROC
  45818. PROCEDURE addreport
  45819. LPARAMETERS m.tcFRXName, m.tcClauses, m.toListener
  45820. * can this one be done while report is running?
  45821. * Possibly yes because we're always adding to the end.
  45822. IF VARTYPE(m.tcFrxName) = "C" AND ;
  45823.    (FILE(m.tcFRXName) OR FILE(FORCEEXT(m.tcFRXName,"FRX")) OR FILE(FORCEEXT(m.tcFRXName,"LBX")))
  45824.    * If any is null, create all collections
  45825.    * always add to all three collections
  45826.    * to keep them in synch
  45827.    IF ISNULL(THIS.ReportFileNames) OR ;
  45828.       ISNULL(THIS.ReportClauses) OR ;
  45829.       ISNULL(THIS.Listeners) 
  45830.       * start fresh
  45831.       * this *shouldn't* be a datasession problem
  45832.       * unless they're doing it from inside a form,
  45833.       * but JIC:
  45834.       LOCAL liSession
  45835.       m.liSession = SET("DATASESSION")
  45836.       THIS.resetDataSession()
  45837.       THIS.ReportFileNames = CREATEOBJECT("Collection")
  45838.       THIS.ReportClauses = CREATEOBJECT("Collection")
  45839.       THIS.Listeners = CREATEOBJECT("Collection")
  45840.       DIME THIS.ReportPages[1]
  45841.       SET DATASESSION TO (m.liSession)
  45842.    ENDIF
  45843.    THIS.ReportFileNames.Add(m.tcFRXName)
  45844.    DIME THIS.ReportPages[THIS.ReportFileNames.Count]
  45845.    THIS.ReportPages[THIS.ReportFileNames.Count] = 0
  45846.    IF VARTYPE(m.tcClauses) = "C"
  45847.       THIS.ReportClauses.Add(m.tcClauses)
  45848.    ELSE
  45849.       THIS.ReportClauses.Add("")   
  45850.    ENDIF
  45851.    IF TYPE("toListener.BaseClass") = "C" AND ;
  45852.       UPPER(toListener.BaseClass) == "REPORTLISTENER"
  45853.       THIS.Listeners.Add(toListener)
  45854.    ELSE
  45855.       THIS.Listeners.Add(NULL)      
  45856.    ENDIF
  45857.    * TBD: should we error here?   
  45858. ENDIF   
  45859. ENDPROC
  45860. PROCEDURE removereports
  45861. IF NOT (THIS.IsRunningReports)
  45862.    THIS.ReportFileNames = NULL
  45863.    THIS.ReportClauses = NULL
  45864.    THIS.Listeners = NULL
  45865.    DIME THIS.ReportPages[1]
  45866.    THIS.ReportPages[1] = 0
  45867. ENDIF   
  45868. ENDPROC
  45869. PROCEDURE runreports
  45870. LPARAMETERS m.tlRemoveReportsAfterRun, m.tlOmitListenerReferences
  45871. IF NOT ;
  45872.  (THIS.IsRunningReports OR ;
  45873.   ISNULL(THIS.ReportFileNames) OR ;
  45874.   THIS.ReportFileNames.Count = 0)
  45875.   LOCAL m.oError, m.liIndex, m.lcClauses, m.loListener, m.lcParse
  45876.   m.oError = NULL
  45877.   THIS.IsRunningReports = .T. 
  45878.   TRY 
  45879.     FOR m.liIndex = 1 TO THIS.ReportFileNames.Count
  45880.        * the clauses, filenames, and listener collections are 
  45881.        * protected properties, we're
  45882.        * taking care of how they match up, 
  45883.        * that FRXs exist, etc.
  45884.        m.lcClauses = UPPER(THIS.ReportClauses[m.liIndex])
  45885.        m.loListener = THIS.Listeners[m.liIndex]
  45886.        DO CASE 
  45887.        CASE " OBJE " $ STRTRAN(" "+m.lcClauses,"CT", " ") OR ;
  45888.             " OBJEC " $ " "+m.lcClauses OR ;
  45889.             m.tlOmitListenerReferences
  45890.           m.loListener = NULL  
  45891.           REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses
  45892.           TRY
  45893.              m.lcParse = " " + STRTRAN(" "+m.lcClauses," OBJECT ", " OBJE ")
  45894.              m.lcParse = STRTRAN(m.lcParse," OBJEC ", " OBJE ")
  45895.              m.lcParse = SUBSTR(m.lcParse,AT(" OBJE ", m.lcParse)+5)        
  45896.              DO CASE
  45897.              CASE m.tlOmitListenerReferences
  45898.                 * we're going with old-style behavior for sure here
  45899.              CASE " TYPE " $ " " + m.lcClauses
  45900.                 m.lcParse = ALLTRIM(STRTRAN(" " + m.lcParse," TYPE ",""))
  45901.                 IF " " $ m.lcParse
  45902.                    m.lcParse = ALLTRIM(LEFT(m.lcParse,AT(" ",m.lcParse,1)))
  45903.                 ENDIF
  45904.                 IF VAL(m.lcParse) > 0
  45905.                    m.loListener = EVALUATE("_oReportOutput['" + m.lcParse+"']")
  45906.                 ENDIF
  45907.              OTHERWISE
  45908.                 m.lcParse = ALLTRIM(m.lcParse)
  45909.                 IF " " $ m.lcParse
  45910.                    m.lcParse = ALLTRIM(LEFT(m.lcParse,AT(" ",m.lcParse,1)))
  45911.                 ENDIF
  45912.                 m.loListener = EVALUATE(m.lcParse)         
  45913.              ENDCASE
  45914.           CATCH
  45915.              m.loListener = NULL
  45916.           ENDTRY   
  45917.        CASE ISNULL(loListener)
  45918.           REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT THIS
  45919.           m.loListener = THIS
  45920.        OTHERWISE
  45921.           REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT m.loListener
  45922.        ENDCASE
  45923.        
  45924.        THIS.adjustReportPagesInfo(m.liIndex, m.lcClauses, m.loListener)
  45925. *&* Sedna change: 
  45926. *&*  see new THIS.adjustReportPagesInfo method, to which we pass report index, clauses, and 
  45927. *&*  evaluated listener ref.  Original code here was:
  45928. *&*          IF NOT (" NOWA " $ STRTRAN(" "+m.lcClauses,"IT"," ") OR ;
  45929. *&*                  " NOWAI " $ " " + m.lcClauses) 
  45930. *&*             THIS.ReportPages[m.liIndex] = THIS.SharedPageTotal
  45931. *&*             * TBD: make this a two-column array with 
  45932. *&*             * output pages (responsive to RANGE clause)
  45933. *&*             * represented as well?
  45934. *&*          ENDIF
  45935.        
  45936.     ENDFOR
  45937.          
  45938.   CATCH TO m.oError
  45939.      LOCAL lcErrMsg
  45940.      IF (ISNULL(m.oError))
  45941.          lcErrMsg = MESSAGE() + CHR(13) + MESSAGE(1)
  45942.      ELSE
  45943.          lcErrMsg = THIS.PrepareErrorMessage(;
  45944.                m.oError.ErrorNo, ;
  45945.                m.oError.PROCEDURE, ;
  45946.                m.oError.LINENO, ;
  45947.                THIS.AppName, ;
  45948.                m.oError.MESSAGE, ;
  45949.                m.oError.LineContents)
  45950.      ENDIF
  45951.      THIS.DoMessage(lcErrMsg, MB_ICONSTOP)
  45952.      THIS.lastErrorMessage = lcErrMsg
  45953.      #IF OUTPUTCLASS_DEBUGGING
  45954.          SUSPEND
  45955.      #ENDIF                   
  45956.      EXIT  
  45957.   FINALLY
  45958.      THIS.IsRunningReports = .F.  
  45959.      IF m.tlRemoveReportsAfterRun
  45960.        THIS.RemoveReports()
  45961.      ENDIF  
  45962.      STORE NULL TO m.loListener, m.oError
  45963.   ENDTRY
  45964. ENDIF   
  45965. ENDPROC
  45966. PROCEDURE setfrxdatasessionenvironment
  45967. THIS.setFRXDataSession()
  45968. SET TALK OFF 
  45969. ENDPROC
  45970. PROCEDURE invokeoncurrentpass
  45971. RETURN .T.
  45972. ENDPROC
  45973. PROCEDURE resetdatasession
  45974. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  45975.     RETURN 
  45976. ENDIF
  45977. IF (THIS.listenerDataSession > -1) 
  45978.    TRY
  45979.       SET DATASESSION TO (THIS.listenerDataSession)
  45980.    CATCH WHEN .T.
  45981.       THIS.ResetToDefault("listenerDataSession")
  45982.       SET DATASESSION TO (THIS.listenerDataSession)      
  45983.    ENDTRY
  45984. ENDIF   
  45985. ENDPROC
  45986. PROCEDURE setfrxdatasession
  45987. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  45988.     RETURN 
  45989. ENDIF
  45990. IF (THIS.FRXDataSession > -1) AND (THIS.FRXDataSession # SET("DATASESSION"))
  45991.    TRY
  45992.       SET DATASESSION TO (THIS.FRXDataSession)
  45993.    CATCH WHEN .T.
  45994.       THIS.ResetToDefault("FRXDataSession")
  45995.       THIS.resetDataSession()
  45996.    ENDTRY
  45997. ENDIF   
  45998. ENDPROC
  45999. PROCEDURE setcurrentdatasession
  46000. IF PEMSTATUS(This, "lDefaultMode", 5) AND (This.lDefaultMode = .F.)
  46001.     RETURN 
  46002. ENDIF
  46003. IF (THIS.CurrentDataSession # SET("DATASESSION"))  
  46004.    TRY
  46005.       SET DATASESSION TO (THIS.CurrentDataSession)
  46006.    CATCH WHEN .T.
  46007.       THIS.ResetToDefault("CurrentDataSession")
  46008.       THIS.resetDataSession()
  46009.    ENDTRY
  46010. ENDIF   
  46011. ENDPROC
  46012. PROCEDURE quietmode_assign
  46013. LPARAMETERS m.vNewVal
  46014. IF VARTYPE(m.vNewVal) = "L"
  46015.    THIS.quietmode = m.vNewVal
  46016. ENDIF 
  46017. ENDPROC
  46018. PROCEDURE issuccessor_assign
  46019. LPARAMETERS m.vNewVal
  46020. IF VARTYPE(m.vNewVal) = "L"
  46021.    THIS.isSuccessor = m.vNewVal
  46022. ENDIF   
  46023. ENDPROC
  46024. PROCEDURE successor_assign
  46025. LPARAMETERS m.vNewVal
  46026. IF (NOT THIS.IsRunning) AND ;
  46027.    (ISNULL(m.vNewVal) OR ;
  46028.    (VARTYPE(m.vNewVal) = "O" AND UPPER(m.vNewVal.BaseClass) == "REPORTLISTENER"))
  46029.    THIS.Successor = m.vNewVal
  46030. ENDIF   
  46031. ENDPROC
  46032. PROCEDURE getfrxstartupinfo
  46033. THIS.SetFRXDataSession()
  46034. IF USED("FRX")
  46035.    SELECT FRX
  46036.    LOCATE FOR ObjType = FRX_OBJTYP_DATAENV AND ;
  46037.               Platform = FRX_PLATFORM_WINDOWS AND ;
  46038.               NOT DELETED()
  46039.    THIS.ReportUsesPrivateDataSession = Frx.Environ
  46040.    * could also use 
  46041.    * THIS.CommandClauses.StartDataSession # THIS.CurrentDataSession
  46042.    LOCATE FOR ObjType = FRX_OBJTYP_REPORTHEADER AND ;
  46043.                         Platform = FRX_PLATFORM_WINDOWS AND ;
  46044.                         NOT DELETED()
  46045.    THIS.frxHeaderRecno = RECNO("FRX")
  46046.    THIS.ReportUsesPrivateDataSession = .F.   
  46047.    THIS.frxHeaderRecno = -1
  46048. ENDIF   
  46049. THIS.SetCurrentDataSession()
  46050. IF THIS.reportUsesPrivateDataSession
  46051.    SET TALK OFF
  46052. ENDIF
  46053. THIS.DrivingAlias = UPPER(ALIAS())
  46054. ENDPROC
  46055. PROCEDURE setsuccessordynamicproperties
  46056. IF NOT THIS.isSuccessor
  46057.    THIS.sharedOutputPageCount = THIS.OutputPageCount
  46058.    THIS.sharedPageTotal = THIS.PageTotal
  46059.    THIS.sharedPageNo = THIS.PageNo
  46060.    THIS.sharedGdiplusGraphics = THIS.GDIPlusGraphics 
  46061. ENDIF
  46062. WITH THIS.Successor
  46063.    .CurrentPass = THIS.CurrentPass
  46064.    .TwoPassProcess = THIS.TwoPassProcess   
  46065.    .sharedOutputPageCount = THIS.sharedOutputPageCount
  46066.    .sharedPageTotal = THIS.sharedPageTotal   
  46067.    .sharedPageNo = THIS.sharedPageNo
  46068.    .sharedGdiplusGraphics  = THIS.sharedGdiplusGraphics
  46069.    .CallEvaluateContents = THIS.CallEvaluateContents
  46070.    .CallAdjustObjectSize = THIS.CallAdjustObjectSize
  46071. ENDWITH   
  46072. ENDPROC
  46073. PROCEDURE appname_assign
  46074. LPARAMETERS m.vNewVal
  46075. IF VARTYPE(m.vNewVal) = "C"
  46076.    THIS.appname = m.vNewVal
  46077. ENDIF   
  46078. ENDPROC
  46079. PROCEDURE sharedgdiplusgraphics_assign
  46080. LPARAMETERS m.vNewVal
  46081. IF VARTYPE(m.vNewVal) = "N"
  46082.    THIS.SharedGDIplusGraphics = m.vNewVal
  46083. ENDIF   
  46084. ENDPROC
  46085. PROCEDURE sharedpageheight_assign
  46086. LPARAMETERS m.vNewVal
  46087. IF VARTYPE(m.vNewVal) = "N"
  46088.    THIS.sharedPageHeight = m.vNewVal
  46089. ENDIF   
  46090. ENDPROC
  46091. PROCEDURE sharedpagewidth_assign
  46092. LPARAMETERS m.vNewVal
  46093. IF VARTYPE(m.vNewVal) = "N"
  46094.    THIS.sharedPageWidth = m.vNewVal
  46095. ENDIF   
  46096. ENDPROC
  46097. PROCEDURE listenertype_assign
  46098. LPARAMETERS m.vNewVal
  46099. IF THIS.SupportsListenerType(m.vNewVal) AND ;
  46100.    NOT THIS.IsRunning
  46101.    THIS.ListenerType = m.vNewVal
  46102. ENDIF
  46103. ENDPROC
  46104. PROCEDURE outputtype_assign
  46105. LPARAMETERS m.vNewVal
  46106. IF VARTYPE(m.vNewVal) = "N" AND NOT THIS.IsRunning
  46107.    THIS.OutputType = INT(m.vNewVal)
  46108.    IF THIS.SupportsListenerType(THIS.OutputType) 
  46109.       THIS.ListenerType = THIS.OutputType
  46110.    ENDIF    
  46111. ENDIF
  46112. ENDPROC
  46113. PROCEDURE sharedoutputpagecount_assign
  46114. LPARAMETERS m.vNewVal
  46115. IF VARTYPE(m.vNewVal) = "N"
  46116.    THIS.sharedOutputPageCount = m.vNewVal
  46117. ENDIF   
  46118. ENDPROC
  46119. PROCEDURE sharedpageno_assign
  46120. LPARAMETERS m.vNewVal
  46121. IF VARTYPE(m.vNewVal) = "N"
  46122.    THIS.sharedPageNo = m.vNewVal
  46123. ENDIF   
  46124. ENDPROC
  46125. PROCEDURE sharedpagetotal_assign
  46126. LPARAMETERS m.vNewVal
  46127. IF VARTYPE(m.vNewVal) = "N"
  46128.    THIS.sharedPageTotal = m.vNewVal
  46129. ENDIF   
  46130. ENDPROC
  46131. PROCEDURE setfrxrunstartupconditions
  46132. IF ISNULL(THIS.CommandClauses)
  46133.    THIS.CommandClauses = CREATEOBJECT("Empty")
  46134. ENDIF
  46135. IF TYPE("THIS.CommandClauses.NoDialog") # "L"
  46136.    ADDPROPERTY(THIS.CommandClauses,"NoDialog",.F.)
  46137. ENDIF      
  46138. * add anything critical during a run
  46139. * that might not be available, whether
  46140. * because this is a custom attribute
  46141. * or because public methods of ReportListener
  46142. * might be called outside a normal report run.
  46143. ENDPROC
  46144. PROCEDURE pagelimit_assign
  46145. LPARAMETERS m.tVal
  46146. IF VARTYPE(m.tVal) = "N" AND CEILING(m.tVal) > 0
  46147.    THIS.PageLimit = CEILING(m.tVal)
  46148. ELSE 
  46149.    THIS.PageLimit = -1        
  46150. ENDIF
  46151. ENDPROC
  46152. PROCEDURE pagetoplimit_assign
  46153. LPARAMETERS m.tVal
  46154. IF VARTYPE(m.tVal) = "N" AND CEILING(m.tVal) > 0
  46155.    THIS.PageTopLimit = CEILING(m.tVal)
  46156. ELSE 
  46157.    THIS.PageTopLimit = -1        
  46158. ENDIF
  46159. ENDPROC
  46160. PROCEDURE pagetaillimit_assign
  46161. LPARAMETERS m.tVal
  46162. IF VARTYPE(m.tVal) = "N" AND CEILING(m.tVal) > 0
  46163.    THIS.PageTailLimit = CEILING(m.tVal)
  46164. ELSE 
  46165.    THIS.PageTailLimit = -1        
  46166. ENDIF
  46167. ENDPROC
  46168. PROCEDURE pagelimitquietmode_assign
  46169. LPARAMETERS m.tVal
  46170. IF VARTYPE(m.tVal) = "L" 
  46171.    THIS.PageLimitQuietMode = m.tVal
  46172. ENDIF
  46173. ENDPROC
  46174. PROCEDURE pagelimitinsiderange_assign
  46175. LPARAMETERS m.tVal
  46176. IF VARTYPE(m.tVal) = "L" 
  46177.    THIS.PageLimitInsideRange = m.tVal
  46178. ENDIF
  46179. ENDPROC
  46180. PROCEDURE resetdynamicmethodcalls
  46181. *&* Sedna:
  46182. * poll Successor, who would
  46183. * have already run all this code on its
  46184. * own behalf:
  46185. IF INLIST(THIS.callAdjustObjectSize,;
  46186.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  46187.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  46188.    THIS.resetCallAdjustObjectSize()
  46189. ELSE  && already set to LISTENER_CALLDYNAMICMETHOD_ALWAYS, always call
  46190.   * leave alone
  46191. ENDIF   
  46192. IF INLIST(THIS.callEvaluateContents,;
  46193.           LISTENER_CALLDYNAMICMETHOD_CHECK_CODE,;
  46194.           LISTENER_CALLDYNAMICMETHOD_NEVER) 
  46195.    THIS.resetCallEvaluateContents()
  46196. ELSE  && already set to LISTENER_CALLDYNAMICMETHOD_ALWAYS, always call
  46197.   * leave alone
  46198. ENDIF   
  46199. IF NOT ISNULL(THIS.Successor) 
  46200.    IF PEMSTATUS(THIS.successor,"CallAdjustObjectSize",5) AND ;
  46201.       THIS.successor.CallAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  46202.       THIS.CallAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  46203.    ENDIF
  46204.    IF PEMSTATUS(THIS.successor,"CallEvaluateContents",5) AND ;
  46205.       THIS.successor.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  46206.       THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  46207.    ENDIF      
  46208. ENDIF         
  46209. ENDPROC
  46210. PROCEDURE resetcalladjustobjectsize
  46211. * abstract, poll members
  46212. ENDPROC
  46213. PROCEDURE resetcallevaluatecontents
  46214. * abstract, poll members
  46215. ENDPROC
  46216. PROCEDURE sharedlistenertype_assign
  46217. LPARAMETERS vNewVal
  46218. IF VARTYPE(m.vNewVal) = "N" AND ;
  46219.    INLIST(m.vNewVal,LISTENER_TYPE_DEF,;
  46220.                     LISTENER_TYPE_PRN,;
  46221.                     LISTENER_TYPE_PRV,;
  46222.                     LISTENER_TYPE_PAGED,;
  46223.                     LISTENER_TYPE_ALLPGS)
  46224.    THIS.sharedListenerType = m.vNewVal
  46225. ENDIF   
  46226. ENDPROC
  46227. PROCEDURE commandclausesfile_assign
  46228. LPARAMETERS m.tvNewVal
  46229. IF VARTYPE(m.tvNewVal) = "C" AND ;
  46230.    FILE(m.tvNewVal) && not SYS(2000), could be built into an app
  46231.    THIS.commandClausesFile = m.tvNewVal
  46232.    THIS.commandClausesFile = NULL   
  46233. ENDIF   
  46234. ENDPROC
  46235. PROCEDURE preparefrxswapcopy
  46236. LPARAMETERS m.tcPath, m.tlKeepCopyOpen, m.tlAdjustCommandClausesInLoadReport
  46237. LOCAL m.lcPath, m.lcFile, m.liSession, m.lcAlias, m.liSelect, m.llSafety
  46238. m.lcFile = ""
  46239. m.liSession = SET("DATASESSION")
  46240. m.liSelect = 0
  46241.    THIS.setFRXDataSession()
  46242.    m.liSelect = SELECT(0)
  46243.    DO CASE
  46244.    CASE VARTYPE(m.tcPath) = "C" AND ;
  46245.       (NOT EMPTY(m.tcPath)) AND DIRECTORY(ADDBS(m.tcPath))
  46246.       m.lcPath = m.tcPath
  46247.    CASE NOT DIRECTORY(ADDBS(JUSTPATH(THIS.CommandClauses.FILE)))
  46248.       * report does not exist on disk
  46249.       * and its path has not been re-created in the
  46250.       * current environment, potentially with related
  46251.       * image directories, etc.
  46252.       m.lcPath = SYS(2023)
  46253.    CASE EMPTY(SYS(2000,THIS.CommandClauses.File)) 
  46254.       * report does not exist on disk
  46255.       m.lcPath = SYS(2023)
  46256.    OTHERWISE
  46257.       * whenever possible,
  46258.       * the best place for this copy will
  46259.       * always be in the same location as the
  46260.       * original FRX, for relative-pathing reasons.
  46261.       m.lcPath = JUSTPATH(THIS.CommandClauses.File)
  46262.    ENDCASE
  46263.    m.lcFile = FORCEEXT(FORCEPATH("F"+SYS(2015), m.lcPath),"FRX")
  46264.    IF USED("FRX") && this method should ordinarily
  46265.                   && be used as part of a report swap, and that
  46266.                   && means in LoadReport only.  FRX isn't used yet.
  46267.                   && But we'll provide this mechanism,
  46268.                   && in case somebody has a different reason
  46269.                   && to use this method at another 
  46270.                   && point in report processing -- 
  46271.                   && XML Listener has one,
  46272.                   && for example!
  46273.       SELECT 0
  46274.       CREATE CURSOR x (onefield l)
  46275.       * we're in the frxdatasession, this is safe
  46276.       CREATE REPORT (m.lcFile) FROM  (ALIAS()) && (DBF("x"))
  46277.       USE IN x
  46278.       SELECT 0
  46279.       USE (m.lcFile) EXCLUSIVE ALIAS (JUSTSTEM(m.lcFile))
  46280.       m.lcAlias = ALIAS()
  46281.       m.llSafety = (SET("SAFETY") == "ON")
  46282.       SET SAFETY OFF
  46283.       ZAP
  46284.       IF m.llSafety
  46285.          SET SAFETY ON
  46286.       ENDIF
  46287.       SELECT FRX
  46288.       SCAN ALL FOR NOT DELETED()
  46289.          SCATTER MEMVAR MEMO
  46290.          INSERT INTO (m.lcAlias) FROM MEMVAR
  46291.       ENDSCAN
  46292.       IF NOT m.tlKeepCopyOpen
  46293.          USE IN (m.lcAlias)
  46294.       ENDIF   
  46295.    ELSE
  46296.       * this is the normal swap mechanism
  46297.       * SYS(2000) may be empty but FILE() should not
  46298.       * be, even if this report was not on disk,
  46299.       * and CommandClauses.File should be fully-qualified.
  46300.       SELECT 0
  46301.       USE (THIS.CommandClauses.File) ;
  46302.         SHARED NOUPDATE ;
  46303.         ALIAS (JUSTSTEM(THIS.CommandClauses.File))
  46304.       m.lcAlias = ALIAS()
  46305.       SELECT * FROM (THIS.CommandClauses.File) ;
  46306.          WHERE NOT DELETED() ;
  46307.          INTO TABLE (m.lcFile)
  46308.       USE IN (m.lcAlias)
  46309.       IF NOT m.tlKeepCopyOpen
  46310.          m.lcAlias = JUSTSTEM(m.lcFile)
  46311.          * this should always work because of the way
  46312.          * we've defined the m.lcFile contents
  46313.          IF USED(m.lcAlias)
  46314.             USE IN (m.lcAlias)   
  46315.          ENDIF         
  46316.       ENDIF   
  46317.    ENDIF
  46318. CATCH WHEN .T.
  46319.    m.lcFile = ""
  46320. FINALLY
  46321.    IF (NOT (EMPTY(m.lcFile) OR EMPTY(SYS(2000,m.lcFile)))) AND ;
  46322.       m.tlAdjustCommandClausesInLoadReport AND ;
  46323.       NOT m.tlKeepCopyOpen
  46324.       THIS.CommandClauses.File = m.lcFile
  46325.    ENDIF 
  46326.    IF m.liSelect > 0
  46327.       SELECT (m.liSelect)
  46328.    ENDIF
  46329.    SET DATASESSION TO (m.liSession)      
  46330. ENDTRY      
  46331. RETURN m.lcFile
  46332. ENDPROC
  46333. PROCEDURE removefrxswapcopy
  46334. LPARAMETERS m.tcFile,m.tlRecycle
  46335. LOCAL m.lcRecyle, m.llResettingSharedCopy
  46336. IF EMPTY(m.tcFile) AND THIS.isFRXSwapCopyPresent()
  46337.    m.llResettingSharedCopy = .T.
  46338.    m.tcFile = THIS.CommandClauses.File
  46339. ENDIF
  46340. IF NOT EMPTY(m.tcFile)
  46341.    IF m.tlRecycle
  46342.       m.lcRecycle = " RECYCLE"
  46343.    ELSE
  46344.       m.lcRecycle = ""
  46345.    ENDIF      
  46346.    IF NOT EMPTY(SYS(2000,FORCEEXT(m.tcFile,"FRX")))
  46347.       ERASE (FORCEEXT(m.tcFile,"FRX")) &lcRecycle
  46348.    ENDIF      
  46349.    IF NOT EMPTY(SYS(2000,FORCEEXT(m.tcFile,"FRT")))
  46350.       ERASE (FORCEEXT(m.tcFile,"FRT")) &lcRecycle
  46351.    ENDIF      
  46352.    IF m.llResettingSharedCopy
  46353.       THIS.CommandClauses.File = THIS.commandClausesFile 
  46354.    ENDIF
  46355. ENDIF   
  46356. ENDPROC
  46357. PROCEDURE isfrxswapcopypresent
  46358. RETURN (NOT ISNULL(THIS.commandClausesFile)) AND ;
  46359.        (NOT EMPTY(THIS.commandClausesFile)) AND ;
  46360.        (TYPE("THIS.commandClauses.File") = "C") AND ;
  46361.        (NOT UPPER(THIS.commandClausesFile) == UPPER(THIS.CommandClauses.File))
  46362. ENDPROC
  46363. PROCEDURE adjustreportpagesinfo
  46364. LPARAMETERS m.tiReportIndex, m.tcClauses, m.toListener
  46365.    * this is a *sketch*.  There are lots of different ways you
  46366.    * could decide you wanted this to work.
  46367.    * Subclasses can make this a multi-column array with 
  46368.    * output pages (responsive to RANGE clause)
  46369.    * represented as well, decide when to accumulate and when not, 
  46370.    * or whether to set up a separate array col for 
  46371.    * curr page versus total page,
  46372.    * when to use listener ref data versus _PAGENO when a 
  46373.    * listener ref is available,
  46374.    * and if so how to deal with NORESET,
  46375.    * when to use the shared/writable versions of FFC's SharedPageNo 
  46376.    * and SharedPageTotal versus the readonly product versions, 
  46377.    * because they are more similar to _PAGENO and _PAGETOTAL,
  46378.    * whether page limits (top and tail) are significant, etc, etc, etc, etc.
  46379. IF m.tiReportIndex = 1 
  46380.    * adjust the columns however you want to use them...
  46381.    * in our version:
  46382.    IF ALEN(THIS.reportPages,2) < 2
  46383.       DIME THIS.reportPages(THIS.ReportFileNames.Count,2)
  46384.    ENDIF
  46385. ENDIF   
  46386. IF THIS.ReportFileNames.Count >= m.tiReportIndex
  46387.    IF ISNULL(m.toListener) 
  46388.       THIS.reportPages[m.tiReportIndex,1] = _PAGENO
  46389.    ELSE    
  46390.       THIS.reportPages[m.tiReportIndex,1] = m.toListener.PageNo 
  46391.    ENDIF
  46392.    IF m.tiReportIndex = 1
  46393.       THIS.reportPages[m.tiReportIndex,2] = THIS.reportPages[m.tiReportIndex,1]
  46394.    ELSE
  46395.       THIS.reportPages[m.tiReportIndex,2] = ;
  46396.          THIS.reportPages[m.tiReportIndex,1] + ;
  46397.          THIS.reportPages[m.tiReportIndex-1,2]
  46398.    ENDIF
  46399. ENDIF
  46400. ENDPROC
  46401. PROCEDURE shellexec
  46402. LPARAMETERS lcLink As String, lcAction As String, lcParms As String
  46403. IF EMPTY(lcLink)
  46404.     RETURN
  46405. ENDIF
  46406. IF NOT "\" $ lcLink
  46407.     lcLink = FULLPATH(lcLink)
  46408. ENDIF
  46409. lcAction = Iif(Empty(lcAction), "Open", lcAction)
  46410. lcParms = IIF(Empty(lcParms), "", lcParms)
  46411. Declare Integer ShellExecute In SHELL32.Dll Integer nWinHandle, String cOperation, String cFileName, String cParameters, String cDirectory, Integer nShowWindow
  46412. Declare Integer FindWindow In WIN32API String cNull,String cWinName
  46413. Return ShellExecute(FindWindow(0, _Screen.Caption), lcAction, lcLink, lcParms, Sys(2023), 1)
  46414. ENDPROC
  46415. PROCEDURE IncludePageInOutput
  46416. LPARAMETERS m.nPageNo
  46417. LOCAL m.llInclude
  46418. IF (NOT THIS.isSuccessor) AND ;
  46419.    (THIS.PageLimit > 0) AND ;
  46420.    (THIS.PageNo > THIS.PageLimit)
  46421.    * note that nPageNo and the 
  46422.    * current CommandClauses.RangeFrom and RangeTo values
  46423.    * only refer to the current report, which
  46424.    * is potentially one of a series using NOPAGEEJECT.
  46425.    * THIS.PageNo refers to the overall number of pages that
  46426.    * have been run, across the multiple reports.
  46427.    IF NOT THIS.pageLimitQuietMode 
  46428.       THIS.DoMessage(OUTPUTCLASS_PAGELIMIT_LOC , MB_ICONEXCLAMATION)
  46429.    ENDIF      
  46430.    THIS.LastErrorMessage = OUTPUTCLASS_PAGELIMIT_LOC
  46431.    THIS.CancelReport()
  46432.    DO CASE
  46433.    CASE (THIS.isSuccessor) 
  46434.       * do not try to limit run unless
  46435.       * communicating with native engine
  46436.       m.llInclude = .T.
  46437.    CASE (THIS.PageTopLimit = -1) AND ;
  46438.         (THIS.PageTailLimit = -1)
  46439.       * no limits set        
  46440.       m.llInclude = .T.      
  46441.    CASE THIS.PageTopLimit = -1
  46442.      * only bottom end requested
  46443.       IF THIS.PageLimitInsideRange 
  46444.          m.llInclude = (THIS.PageNo <= THIS.PageTailLimit)      
  46445.       ELSE
  46446.          m.llInclude = (THIS.PageNo >= THIS.PageTailLimit)
  46447.       ENDIF         
  46448.    CASE THIS.PageTailLimit = -1
  46449.      * only top end requested
  46450.       IF THIS.PageLimitInsideRange 
  46451.          m.llInclude = (THIS.PageNo >= THIS.PageTopLimit)      
  46452.       ELSE
  46453.          m.llInclude = (THIS.PageNo <= THIS.PageTopLimit)
  46454.       ENDIF         
  46455.    OTHERWISE
  46456.       * both top and tail requested
  46457.       IF THIS.PageLimitInsideRange
  46458.          m.llInclude = BETWEEN(THIS.PageNo,THIS.PageTopLimit, THIS.PageTailLimit)
  46459.       ELSE
  46460.          m.llInclude = ((THIS.PageNo <= THIS.PageTopLimit) OR ;
  46461.                         (THIS.PageNo >= THIS.PageTailLimit))
  46462.       ENDIF                        
  46463.    ENDCASE      
  46464. ENDIF          
  46465. RETURN (m.llInclude AND DODEFAULT(m.nPageNo))
  46466. ENDPROC
  46467. PROCEDURE DoStatus
  46468. LPARAMETERS m.cMessage
  46469. NODEFAULT
  46470. IF NOT (THIS.QuietMode OR (THIS.IsRunning AND THIS.CommandClauses.Nodialog))
  46471.    IF THIS.TwoPassProcess AND THIS.CurrentPass = 0
  46472.       WAIT WINDOW NOWAIT OUTPUTCLASS_PREPSTATUS_LOC 
  46473.    ELSE
  46474.       IF VARTYPE(m.cMessage) = "C"
  46475.          DODEFAULT(m.cMessage)      
  46476.       ENDIF
  46477.    ENDIF
  46478. ENDIF
  46479. ENDPROC
  46480. PROCEDURE LoadReport
  46481. THIS.clearErrors()
  46482. THIS.setFRXDataSessionEnvironment()
  46483. THIS.resetDataSession()
  46484. THIS.frxHeaderRecno = -1
  46485. IF NOT ISNULL(THIS.Successor)
  46486.    WITH THIS.Successor
  46487.       .AddProperty("isSuccessor",.T.)
  46488.       .AddProperty("commandClausesFile",THIS.commandClausesFile )
  46489.       .PrintJobName = THIS.PrintJobName 
  46490.       .CommandClauses = THIS.CommandClauses
  46491.       .LoadReport()
  46492.    ENDWITH
  46493. ENDIF
  46494. ENDPROC
  46495. PROCEDURE ClearStatus
  46496. DODEFAULT()
  46497. IF NOT ISNULL(THIS.Successor)
  46498.    THIS.SetSuccessorDynamicProperties()
  46499.    THIS.Successor.ClearStatus()
  46500. ENDIF   
  46501. ENDPROC
  46502. PROCEDURE UpdateStatus
  46503. DODEFAULT()
  46504. IF NOT ISNULL(THIS.Successor)
  46505.    THIS.SetSuccessorDynamicProperties()
  46506.    THIS.Successor.UpdateStatus()
  46507. ENDIF   
  46508. ENDPROC
  46509. PROCEDURE UnloadReport
  46510. IF NOT THIS.IsSuccessor
  46511.    THIS.SharedPageWidth = THIS.GetPageWidth()
  46512.    THIS.SharedPageHeight = THIS.GetPageHeight()
  46513. ENDIF
  46514. THIS.resetDataSession()
  46515. IF NOT ISNULL(THIS.Successor)
  46516.    WITH THIS.Successor
  46517.       .FRXDataSession = THIS.FRXDataSession
  46518.       .CurrentDataSession = THIS.CurrentDataSession
  46519.       .TwoPassProcess = THIS.TwoPassProcess
  46520.       .CommandClauses = THIS.CommandClauses
  46521.       .SharedPageHeight = THIS.SharedPageHeight
  46522.       .SharedPageWidth = THIS.SharedPageWidth
  46523.       THIS.SetSuccessorDynamicProperties()      
  46524.       .UnloadReport()
  46525.       .IsSuccessor = .F.
  46526.    ENDWITH
  46527. ENDIF
  46528. ENDPROC
  46529. PROCEDURE CancelReport
  46530. IF NOT THIS.IsSuccessor
  46531.    DODEFAULT()
  46532.    NODEFAULT
  46533. ENDIF   
  46534. IF NOT ISNULL(THIS.Successor)
  46535.    THIS.SetSuccessorDynamicProperties()
  46536.    THIS.Successor.CancelReport()
  46537. ENDIF
  46538. ENDPROC
  46539. PROCEDURE AfterReport
  46540. IF NOT THIS.IsSuccessor
  46541.    THIS.SharedPageWidth = THIS.GetPageWidth()
  46542.    THIS.SharedPageHeight = THIS.GetPageHeight()
  46543. ENDIF
  46544. IF NOT ISNULL(THIS.Successor)
  46545.    WITH THIS.Successor
  46546.       .FRXDataSession = THIS.FRXDataSession
  46547.       .CurrentDataSession = THIS.CurrentDataSession
  46548.       .TwoPassProcess = THIS.TwoPassProcess
  46549.       .CommandClauses = THIS.CommandClauses
  46550.       .SharedPageHeight = THIS.SharedPageHeight
  46551.       .SharedPageWidth = THIS.SharedPageWidth
  46552.       THIS.SetSuccessorDynamicProperties()
  46553.       .AfterReport()
  46554.       .ResetToDefault("FRXDataSession")
  46555.       .ResetToDefault("CurrentDataSession")
  46556.       
  46557.    ENDWITH
  46558. ENDIF
  46559. IF NOT THIS.IsSuccessor
  46560.    NODEFAULT
  46561.    DODEFAULT()
  46562. ENDIF   
  46563. ENDPROC
  46564. PROCEDURE Init
  46565. THIS.listenerDataSession = SET("DATASESSION")  
  46566. IF DODEFAULT() 
  46567.    THIS.AppName = OUTPUTCLASS_APPNAME_LOC + " - " + This.Class 
  46568.    RETURN .F.
  46569. ENDIF      
  46570. *&* Sedna
  46571. * this may be necessary if you
  46572. * modify and compile these classes in a build that
  46573. * does have the two native properties
  46574. * and then go back to use them with a version
  46575. * that does *not* have the native properties
  46576. * (it's possible to lose the custom definitions)
  46577. IF NOT PEMSTATUS(THIS,"CallEvaluateContents",5)
  46578.    THIS.AddProperty("CallEvaluateContents", LISTENER_CALLDYNAMICMETHOD_CHECK_CODE)
  46579. ENDIF   
  46580. IF NOT PEMSTATUS(THIS,"CallAdjustObjectSize",5)
  46581.    THIS.AddProperty("CallAdjustObjectSize", LISTENER_CALLDYNAMICMETHOD_CHECK_CODE)
  46582. ENDIF   
  46583. RETURN NOT THIS.HadError
  46584. ENDPROC
  46585. PROCEDURE BeforeBand
  46586. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  46587. IF NOT ISNULL(THIS.Successor)
  46588.    THIS.SetSuccessorDynamicProperties()
  46589.    THIS.Successor.BeforeBand(m.nBandObjCode, m.nFRXRecNo)
  46590. ENDIF
  46591. THIS.resetDataSession() 
  46592. ENDPROC
  46593. PROCEDURE DoMessage
  46594. LPARAMETERS m.cMessage,m.iParams,m.cTitle
  46595. NODEFAULT
  46596. IF THIS.QuietMode OR ;
  46597.   (THIS.IsRunning AND THIS.CommandClauses.NoDialog)
  46598.    * to emulate the base class behavior, do both checks,
  46599.    * in case the call to DoMessage() occurs
  46600.    * before the baseclass sets QuietMode .T. in response
  46601.    * to NoDialog at the beginning of the report run,
  46602.    * or after the baseclass re-sets Quietmode to .F.
  46603.    * at the end of the report run.
  46604.    RETURN 0
  46605.    IF THIS.AllowModalMessages
  46606.       IF VARTYPE(m.cTitle) = "C"
  46607.          RETURN MESSAGEBOX(TRANS(m.cMessage),VAL(TRANS(m.iParams)),m.cTitle)
  46608.       ELSE
  46609.          RETURN MESSAGEBOX(TRANS(m.cMessage),VAL(TRANS(m.iParams)),THIS.AppName)
  46610.       ENDIF
  46611.    ELSE
  46612.       THIS.DoStatus(m.cMessage)
  46613.       RETURN 0
  46614.    ENDIF
  46615. ENDIF   
  46616. ENDPROC
  46617. PROCEDURE Error
  46618. LPARAMETERS m.nError, m.cMethod, m.nLine
  46619. LOCAL m.lcOnError,m.lcErrorMsg,m.lcCodeLineMsg
  46620. THIS.HadError = .T.
  46621. IF this.lIgnoreErrors OR _vfp.StartMode>0
  46622.     RETURN .F.
  46623. ENDIF
  46624. m.lcOnError=UPPER(ALLTRIM(ON("ERROR")))
  46625. IF NOT EMPTY(m.lcOnError)
  46626.     m.lcOnError=STRTRAN(STRTRAN(STRTRAN(lcOnError,"ERROR()","nError"), ;
  46627.             "PROGRAM()","cMethod"),"LINENO()","nLine")
  46628.     &lcOnError
  46629.     RETURN
  46630. ENDIF
  46631. m.lcErrorMsg = THIS.PrepareErrorMessage(m.nError,m.cMethod, m.nLine)
  46632. THIS.LastErrorMessage = m.lcErrorMsg
  46633. THIS.DoMessage(m.lcErrorMsg, MB_ICONSTOP )
  46634. #IF OUTPUTCLASS_DEBUGGING
  46635.     ERROR m.nError
  46636. #ENDIF    
  46637. ENDPROC
  46638. PROCEDURE BeforeReport
  46639. THIS.setFRXRunStartupConditions()
  46640. THIS.getFRXStartupInfo()
  46641. THIS.resetDataSession()
  46642. IF NOT THIS.IsSuccessor
  46643.    THIS.sharedPageHeight = THIS.GetPageHeight()
  46644.    THIS.sharedPageWidth = THIS.GetPageWidth()
  46645.    THIS.sharedListenerType = THIS.ListenerType
  46646.    THIS.ResetToDefault("sharedPageNo")
  46647.    THIS.ResetToDefault("sharedPageTotal")
  46648.    THIS.ResetToDefault("sharedOutputPageCount")
  46649.    THIS.ResetToDefault("sharedGDIPlusGraphics")
  46650. ENDIF
  46651. IF NOT ISNULL(THIS.Successor)
  46652.    WITH THIS.Successor
  46653.       .AddProperty("sharedGDIPlusGraphics", THIS.sharedGDIPlusGraphics)      
  46654.       .AddProperty("sharedPageHeight", THIS.sharedPageHeight)
  46655.       .AddProperty("sharedPageWidth", THIS.sharedPageWidth)      
  46656.       .AddProperty("sharedOutputPageCount", THIS.sharedOutputPageCount)
  46657.       .AddProperty("sharedPageNo", THIS.sharedPageNo)      
  46658.       .AddProperty("sharedPageTotal", THIS.sharedPageTotal) 
  46659.       .AddProperty("sharedListenerType",THIS.ListenerType)               
  46660.        THIS.setSuccessorDynamicProperties()        
  46661.       .FRXDataSession = THIS.FRXDataSession
  46662.       .CurrentDataSession = THIS.CurrentDataSession
  46663.       .TwoPassProcess = THIS.TwoPassProcess
  46664.       .CommandClauses = THIS.CommandClauses
  46665.       .commandClausesFile = THIS.commandClausesFile 
  46666.       * doing the above line here because some dynamic
  46667.       * object may have adjusted it in the Load and we can
  46668.       * correct original value here.
  46669.       .BeforeReport()
  46670.    ENDWITH
  46671. ENDIF
  46672. *&* Sedna -- we want this *after* successor has run BeforeReport code,
  46673. *&* but some Successor.BeforeReport code might
  46674. *&* have an affect on Dynamics
  46675. THIS.resetDynamicMethodCalls()
  46676. *&* .. so we'll re-set those dynamic properties again afterwards
  46677. IF NOT ISNULL(THIS.Successor)
  46678.    WITH THIS.successor
  46679.        IF .CallEvaluateContents < THIS.CallEvaluateContents
  46680.           .CallEvaluateContents = THIS.CallEvaluateContents
  46681.        ENDIF
  46682.        IF .CallAdjustObjectSize < THIS.CallAdjustObjectSize
  46683.           .CallAdjustObjectSize = THIS.CallAdjustObjectSize
  46684.        ENDIF
  46685.    ENDWITH
  46686. ENDIF   
  46687. ENDPROC
  46688. PROCEDURE Destroy
  46689. STORE NULL TO ;
  46690.   THIS.runCollector, ;
  46691.   THIS.Successor, ;
  46692.   THIS.Listeners, ;
  46693.   THIS.ReportClauses, ;
  46694.   THIS.ReportFileNames, ;
  46695.   THIS.PreviewContainer, ;
  46696.   THIS.CommandClauses
  46697. ENDPROC
  46698. PROCEDURE AfterBand
  46699. LPARAMETERS m.nBandObjCode, m.nFRXRecno
  46700. IF NOT ISNULL(THIS.Successor)
  46701.    THIS.SetSuccessorDynamicProperties()
  46702.    THIS.Successor.AfterBand(m.nBandObjCode, m.nFRXRecNo)
  46703. ENDIF
  46704. ENDPROC
  46705. PROCEDURE Render
  46706. LPARAMETERS m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  46707.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  46708. IF NOT ISNULL(THIS.Successor)
  46709.    THIS.SetSuccessorDynamicProperties()
  46710.    THIS.Successor.Render( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  46711.                           m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  46712. ENDIF
  46713. ENDPROC
  46714. GPFONT
  46715. \ffc\_gdiplus.vcx
  46716. GPSOLIDBRUSH
  46717. \ffc\_gdiplus.vcx
  46718. GPRECTANGLE
  46719. \ffc\_gdiplus.vcx
  46720. BOOLEAN
  46721. GPGRAPHICS
  46722. \ffc\_gdiplus.vcx
  46723. XFCGRAPHICSSTATE
  46724. EXCEPTION
  46725.  <CR> 
  46726.  <CR> 
  46727.  <CR> 
  46728.  <LASTWORD> 
  46729. <LASTWORD>
  46730. <LASTWORD>
  46731. EXCEPTION
  46732. Error drawing the justified string !C
  46733. Line: 
  46734. String that generated the error
  46735. TCSTRING
  46736. TOFONT
  46737. TOBRUSH
  46738. TORECTANGLE
  46739. TLJUSTLAST
  46740. TOGFX
  46741. LHFONT
  46742. LHGRAPHICS
  46743. LHBRUSH
  46744. LCRECTF
  46745. LNSPACEWIDTH
  46746. LNLINEHEIGHT
  46747. LCTEXT
  46748. LOGFXSTATE
  46749. LHTEMPSTRFORMAT
  46750. LHSTRINGFORMAT
  46751. LHLEFTALIGNHANDLE
  46752. LHRIGHTALIGNHANDLE
  46753. LNWORDS
  46754. LNWORDWIDTH
  46755. LNCHARS
  46756. LCCURRWORD    
  46757. LCCUTWORD
  46758. LNREDUCE
  46759. LLENDOFSENTENCE
  46760. LNWORDSWIDTH
  46761. LNWORDSINLINE
  46762. LNCURRWORD
  46763. LNCURRLINE
  46764. LNWIDTHOFBETWEEN
  46765. LNSTRINGFORMATHANDLE
  46766. LLLAST
  46767. LOEXC
  46768. LHGFXSTATE
  46769. SAVE    
  46770. GETHANDLE    
  46771. GETHEIGHT
  46772. XFCGDIPSETTEXTRENDERINGHINT(
  46773. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  46774. XFCGDIPCLONESTRINGFORMAT
  46775. XFCGDIPDELETESTRINGFORMAT
  46776. XFCGDIPSETSTRINGFORMATFLAGS
  46777. XFCGDIPCREATESTRINGFORMAT
  46778. XFCGDIPSETSTRINGFORMATALIGN
  46779. PCBOUNDINGBOX
  46780. XFCGDIPMEASURESTRING
  46781. LAWORDS
  46782. RESTORE
  46783. LLLASTLINE
  46784. LCCHAR
  46785. XFCGDIPDRAWSTRING
  46786. ERRORNO
  46787. MESSAGE
  46788. LINENO
  46789. LINECONTENTS
  46790. LCMSG
  46791. ZZZZZZZZFOXYPREVIEWER
  46792. EXCEPTION
  46793. GPGRAPHICS
  46794. \FFC\_GdiPlus.vcx
  46795. GPFont
  46796. GPFont
  46797. GPFont
  46798. gpColorC
  46799. gpSolidBrush
  46800. ffffff
  46801. gpColorC
  46802. gpSolidBrush
  46803. TNFRXRECNO
  46804. TNLEFT
  46805. TNTOP
  46806. TNWIDTH
  46807. TNHEIGHT
  46808. TNOBJECTCONTINUATIONTYPE
  46809. TCCONTENTSTOBERENDERED
  46810. TIGDIPLUSIMAGE
  46811. TCFULLTEXT
  46812. TCFONTNAME0
  46813. TNFONTSIZE0
  46814. TNFONTSTYLE0
  46815. TNFILLRED0
  46816. TNFILLGREEN0
  46817. TNFILLBLUE0    
  46818. TNPENRED0
  46819. TNPENGREEN0
  46820. TNPENBLUE0
  46821. LCSTEP
  46822. LOFRXRECORD
  46823. LNSELECT
  46824. THIS    
  46825. CFRXALIAS
  46826. LOFRXREC
  46827. LOEXC
  46828. LHTEMPSTRFORMAT
  46829. LHSTRINGFORMAT
  46830. LHLEFTALIGNHANDLE
  46831. LHRIGHTALIGNHANDLE
  46832. LCRECTF
  46833. PCBOUNDINGBOX
  46834. LOGFX
  46835. OGDIGRAPHICS
  46836. LHGFX
  46837. LHFONT    
  46838. GETHANDLE
  46839. LHGFXSTATE
  46840. XFCGDIPSETTEXTRENDERINGHINT(
  46841. XFCGDIPSTRINGFORMATGETGENERICTYPOGRAPHIC
  46842. XFCGDIPCLONESTRINGFORMAT
  46843. XFCGDIPDELETESTRINGFORMAT
  46844. XFCGDIPSETSTRINGFORMATFLAGS
  46845. XFCGDIPCREATESTRINGFORMAT
  46846. XFCGDIPSETSTRINGFORMATALIGN
  46847. XFCGDIPSETSTRINGFORMATLINEALIGN    
  46848. TFPROCESS
  46849. LNWORDS
  46850. LNMAXHEIGHT
  46851. ATFWORDS
  46852. LCWORD
  46853. LCFONT
  46854. LNFONTSIZE
  46855. LCFONTSTYLE
  46856. LNRED
  46857. LNGREEN
  46858. LNBLUE    
  46859. LNBACKRED
  46860. LNBACKGREEN
  46861. LNBACKBLUE
  46862. LNSTYLE
  46863. LNLINEHEIGHT
  46864. LNWORDWIDTH
  46865. LNWORDHEIGHT
  46866. LNFONTHEIGHT
  46867. LOFONT
  46868. CREATE    
  46869. GETHEIGHT
  46870. XFCGDIPMEASURESTRING
  46871. LOCOLOR
  46872. LOBRUSH
  46873. LNXNEXT
  46874. LNCURRLINE
  46875. LALINES
  46876. LCOLDFORMAT
  46877. LCNEXTFORMAT    
  46878. LCOLDWORD
  46879. LCNEXTWORD
  46880. LNCOUNT
  46881. LCCURRWORD
  46882. LNCURRWIDTH
  46883. LANEWWORDS
  46884. LNPREVLINE
  46885. RESTORE
  46886. LNSTRINGFORMATHANDLE
  46887. LOFONT1
  46888. LHFONT1
  46889. LOBACKCOLOR
  46890. LOBACKBRUSH
  46891. FILLRECTANGLE
  46892. XFCGDIPDRAWSTRING
  46893. TFADDTOOUTPUT<$
  46894.  [CR] 
  46895.  [CR] 
  46896.  [CR] 
  46897.  [CR] 
  46898.  [CR] 
  46899.  [CR] 
  46900. CCCCC
  46901. CCCCC
  46902. <color=
  46903. <fname=
  46904. <fsize=
  46905. CCCCC
  46906. <fstyle=
  46907. CCCCC
  46908. <fontname=
  46909. <fontsize=
  46910. CCCCC
  46911. <highlight=
  46912. <fontstyle=
  46913. <color=
  46914. </color>
  46915. <highlight=
  46916. </highlight>
  46917. <fontname=
  46918. </fontname>
  46919. <fontsize=
  46920. </fontsize>
  46921. <fontstyle=
  46922. </fontstyle>
  46923. <fname=
  46924. </fname>
  46925. <fsize=
  46926. </fsize>
  46927. <fstyle=
  46928. </fstyle>
  46929. <color=
  46930. <highlight=
  46931. <fname=
  46932. <fontname=
  46933. <fsize=
  46934. <fontsize=
  46935. <fstyle=
  46936. <fontstyle=
  46937. </color>
  46938. </highlight>
  46939. </fname>
  46940. </fontname>
  46941. </fsize>
  46942. </fontsize>
  46943. </fstyle>
  46944. </fontstyle>
  46945. <color=
  46946. <highlight=
  46947. <fontname=
  46948. <fontsize=
  46949. <fontstyle=
  46950. <fname=
  46951. <fsize=
  46952. <fstyle=
  46953. </color>
  46954. </highlight>
  46955. </fontname>
  46956. </fontsize>
  46957. </fontstyle>
  46958. </fname>
  46959. </fsize>
  46960. </fstyle>
  46961. <color=
  46962. <highlight=
  46963. <fname=
  46964. <fontname=
  46965. <fsize=
  46966. <fontsize=
  46967. <fstyle=
  46968. <fontstyle=
  46969. </color>
  46970. </highlight>
  46971. </fname>
  46972. </fontname>
  46973. </fsize>
  46974. </fontsize>
  46975. </fstyle>
  46976. </fontstyle>
  46977. TCSTRING
  46978. TLRETURNVANILLASTRING
  46979. LCRESULTSTRING
  46980. LCCOLORSTACK
  46981. LCHIGHLIGHTSTACK
  46982. LCFONTNAMESTACK
  46983. LCFONTSIZESTACK
  46984. LCFONTSTYLESTACK
  46985. LLBOLD
  46986. LLITALIC
  46987. LLUNDERLINE
  46988. LLSTRIKETHRU
  46989. LLCOLOR
  46990. LLHIGHLIGHT
  46991. LLFONTNAME
  46992. LLFONTSIZE
  46993. LLFONTSTYLE
  46994. LLWHITESTYLED
  46995. LCPARAMWORD
  46996. LCPARAMFNAME
  46997. LNPARAMFSIZE
  46998. LCPARAMFSTYLE
  46999. LNPARAMCRED
  47000. LNPARAMCGREEN
  47001. LNPARAMCBLUE
  47002. LNPARAMHRED
  47003. LNPARAMHGREEN
  47004. LNPARAMHBLUE
  47005. LCWHITEFNAME
  47006. LNWHITEFSIZE
  47007. LCWHITEFSTYLE
  47008. LNWHITECRED
  47009. LNWHITECGREEN
  47010. LNWHITECBLUE
  47011. LNWHITEHRED
  47012. LNWHITEHGREEN
  47013. LNWHITEHBLUE
  47014. LNWORDS
  47015. LCWORD    
  47016. LCWORDLOW
  47017. LCCOLORVALUE
  47018. LCTAGVALUE
  47019. LCSTYLE
  47020. LNKSTART    
  47021. LCKSTRING
  47022. LCKCHUNK    
  47023. LCKTAGPRE
  47024. LCKTAGVALUE
  47025. LCTEMPSTRING
  47026. LCNEXTCHAR
  47027. ATFWORDS
  47028. INTEGER
  47029. ffffff
  47030. TNRECNO
  47031. TNOBJECTCONTINUATIONTYPE
  47032. TCWORD
  47033. TIGDIPLUSIMAGE
  47034. TCFONT
  47035. TNFONTSIZE
  47036. TNFONTSTYLE
  47037. TNPENRED
  47038. TNPENGREEN    
  47039. TNPENBLUE    
  47040. TNFILLRED
  47041. TNFILLGREEN
  47042. TNFILLBLUE
  47043. TOFRX
  47044. LNSELECT
  47045. LNRECNO
  47046. CAUXFULLOUTPUTALIAS
  47047. NRECNO
  47048. FRXWIDTH    
  47049. FRXHEIGHT
  47050. FRXTOP
  47051. FRXRECNO
  47052. DBFRECNO
  47053. CONTTYPE
  47054. CONTENTS
  47055. UNCONTENTS
  47056. FRXINDEX
  47057. DYNAMICS
  47058. ROTATE    
  47059. CFRXALIAS
  47060. COUTPUTALIAS
  47061. PAGENO
  47062. FONTFACE
  47063. FONTSIZE    
  47064. FONTSTYLE
  47065. PENRED
  47066. PENGREEN
  47067. PENBLUE
  47068. FILLRED    
  47069. FILLGREEN
  47070. FILLBLUE
  47071. WIDTH
  47072. HEIGHT
  47073. OWATERMARKBMP
  47074. DESTROY
  47075. DataSessionv
  47076. m.oObjProperties.Text = SPACE(1) + ALLTRIM(TRANSFORM(m.lnValue, &lcFormat.))
  47077. NFRXRECNO
  47078. OOBJPROPERTIES
  47079. VALUE
  47080. LCFORMAT
  47081. LNVALUE
  47082. ARECORDS
  47083. NADJ    
  47084. LNSESSION
  47085. LNSELECT
  47086. SETFRXDATASESSION
  47087. PICTURE
  47088. RELOAD
  47089. LOEXC
  47090. oGDIGraphics
  47091. aRecords[1]
  47092. lHasFJ-
  47093. lNewPage-
  47094. lHasUserFld-
  47095. lUsingWatermark-
  47096. cWatermarkImage
  47097. nWatermarkType
  47098. nWatermarkTransparency
  47099. nWatermarkWidthRatio
  47100. nWatermarkHeightRatio
  47101. oWatermarkBmp
  47102. ADDPROPERTY"
  47103. GPGraphics
  47104. GPGraphics
  47105. _GdiPlus.vcx
  47106. USER/
  47107. <FJ>C
  47108. <TF>C
  47109. GPBITMAP
  47110. \ffc\_gdiplus.vcx
  47111. GpBitmap
  47112. COLORMATRIX
  47113. PR_GdiplusHelper.Prg
  47114. GpAttrib
  47115. PR_GdiplusHelper.Prg
  47116. 333333
  47117. 333333
  47118. 333333
  47119. OGDIGRAPHICS
  47120. SETFRXDATASESSION
  47121. LHASUSERFLD
  47122. LNADJ    
  47123. LNOLDSIZE
  47124. ARECORDS
  47125. LHASFJ
  47126. RESETDATASESSION
  47127. OFOXYPREVIEWER
  47128. CWATERMARKIMAGE
  47129. NWATERMARKTYPE
  47130. NWATERMARKTRANSPARENCY
  47131. NWATERMARKWIDTHRATIO
  47132. NWATERMARKHEIGHTRATIO
  47133. LUSINGWATERMARK
  47134. LOBMP
  47135. CREATEFROMFILE
  47136. LOATT
  47137. LCMATRIX
  47138. COLORMATRIX
  47139. APPLYCOLORMATRIX
  47140. OWATERMARKBMP
  47141. DESTROY
  47142. NBANDOBJCODE    
  47143. NFRXRECNO
  47144. LHASFJ
  47145. LEXPANDFIELDS
  47146. CALLEVALUATECONTENTS
  47147. LNEWPAGE
  47148. ISSUCCESSOR
  47149. SHAREDGDIPLUSGRAPHICS
  47150. GDIPLUSGRAPHICS
  47151. OGDIGRAPHICS    
  47152. SETHANDLE
  47153. GPRECTANGLE
  47154. GPRectangle
  47155. GPBITMAP
  47156. FFC\_Gdiplus.vcx
  47157. GpBitmap
  47158. GPGRAPHICS
  47159. FFC\_Gdiplus.vcx
  47160. GPGRAPHICS
  47161. \FFC\_GdiPlus.vcx
  47162. GPRECTANGLE
  47163. \FFC\_GdiPlus.vcx
  47164. GPFONT
  47165. \FFC\_GdiPlus.vcx
  47166. GPSOLIDBRUSH
  47167. \FFC\_GdiPlus.vcx
  47168. GPCOLOR
  47169. \FFC\_GdiPlus.vcx
  47170. <TF>C
  47171. GPRectangle
  47172. GPFont
  47173. gpColor
  47174. gpSolidBrush
  47175. gpColor
  47176. gpSolidBrush
  47177. TNFRXRECNO
  47178. TNLEFT
  47179. TNTOP
  47180. TNWIDTH
  47181. TNHEIGHT
  47182. TNOBJECTCONTINUATIONTYPE
  47183. TCCONTENTSTOBERENDERED
  47184. TIGDIPLUSIMAGE
  47185. ARECORDS
  47186. LNEWPAGE
  47187. LUSINGWATERMARK
  47188. OGDIGRAPHICS    
  47189. SETHANDLE
  47190. ISSUCCESSOR
  47191. SHAREDGDIPLUSGRAPHICS
  47192. GDIPLUSGRAPHICS
  47193. LNWIDTH
  47194. LNHEIGHT
  47195. NWATERMARKWIDTHRATIO
  47196. NWATERMARKHEIGHTRATIO
  47197. LORECT
  47198. SHAREDPAGEWIDTH
  47199. SHAREDPAGEHEIGHT
  47200. LOBMP
  47201. OWATERMARKBMP
  47202. CREATEFROMFILE
  47203. CWATERMARKIMAGE
  47204. LOGFX
  47205. DRAWIMAGESCALED
  47206. LOOBJECT
  47207. LCTEXT
  47208. LLFLAG
  47209. LOFONT
  47210. LOBRUSH
  47211. LOCOLOR
  47212. LNALPHA
  47213. LLSTOREDATA
  47214. LSTOREDATA
  47215. STOREFRXDATA
  47216. LHASFJ
  47217. DRAWSTRINGINTF
  47218. FONTNAME
  47219. FONTSIZE    
  47220. FONTSTYLE
  47221. FILLRED    
  47222. FILLGREEN
  47223. FILLBLUE
  47224. PENRED
  47225. PENGREEN
  47226. PENBLUE
  47227. CREATE    
  47228. FILLALPHA
  47229. FILLRECTANGLE
  47230. PENALPHA
  47231. DRAWSTRINGJUSTIFIED/
  47232. OGDIGRAPHICS    
  47233. SETHANDLE
  47234. drawstringjustified,
  47235. drawstringintf
  47236. tfprocess
  47237. tfaddtooutput
  47238. Destroyd_
  47239. EvaluateContents
  47240. Init c
  47241. BeforeReport
  47242. BeforeBandVk
  47243. Render
  47244. AfterReport_y
  47245. THIS.CommandClauses.Fileb
  47246. LIGENERALFIELDS
  47247. LLOPENED
  47248. COMMANDCLAUSES
  47249. SETFRXDATASESSION
  47250. OBJTYPE
  47251. OFFSET
  47252. RESETDATASESSIONd
  47253. VNEWVAL
  47254. THIS    
  47255. ISRUNNING
  47256. VERIFYNCNAME
  47257. IMAGESRCATTR
  47258. SYNCHXSLTPROCESSORUSER4
  47259. ?*"<>|
  47260. VNEWVAL
  47261. IMAGEFILEBASENAME
  47262. copyImageFiles
  47263. VNEWVAL
  47264. THIS    
  47265. ISRUNNING$
  47266. COPYIMAGEFILESTOEXTERNALFILELOCATION
  47267. ADJUSTXSLTPARAMETER!
  47268. MAKEEXTERNALFILELOCATIONREACHABLE*
  47269. GdipSaveImageToFile
  47270. GDIPLUS.DLL
  47271. CLSIDFromString
  47272. ole32
  47273. {557CF401-1A04-11D3-9A73-0000F81EF32E}
  47274. GDIPSAVEIMAGETOFILE
  47275. GDIPLUS
  47276. JPGCLSID
  47277. CLSIDFROMSTRING
  47278. OLE32
  47279. SENDGDIPLUSIMAGE!
  47280. MAKEEXTERNALFILELOCATIONREACHABLE
  47281. TNWIDTH
  47282. TNHEIGHT
  47283. UTILITYIMAGE
  47284. LLADJUSTHEIGHT
  47285. LLADJUSTWIDTH
  47286. HEIGHT
  47287. WIDTHd
  47288. VNEWVAL
  47289. THIS    
  47290. ISRUNNING
  47291. VERIFYNCNAME
  47292. FILLALPHAATTR
  47293. SYNCHXSLTPROCESSORUSERd
  47294. VNEWVAL
  47295. THIS    
  47296. ISRUNNING
  47297. VERIFYNCNAME
  47298. FILLREDATTR
  47299. SYNCHXSLTPROCESSORUSERd
  47300. VNEWVAL
  47301. THIS    
  47302. ISRUNNING
  47303. VERIFYNCNAME
  47304. FILLGREENATTR
  47305. SYNCHXSLTPROCESSORUSERd
  47306. VNEWVAL
  47307. THIS    
  47308. ISRUNNING
  47309. VERIFYNCNAME
  47310. FILLBLUEATTR
  47311. SYNCHXSLTPROCESSORUSERd
  47312. VNEWVAL
  47313. THIS    
  47314. ISRUNNING
  47315. VERIFYNCNAME
  47316. PENALPHAATTR
  47317. SYNCHXSLTPROCESSORUSERd
  47318. VNEWVAL
  47319. THIS    
  47320. ISRUNNING
  47321. VERIFYNCNAME
  47322. PENREDATTR
  47323. SYNCHXSLTPROCESSORUSERd
  47324. VNEWVAL
  47325. THIS    
  47326. ISRUNNING
  47327. VERIFYNCNAME
  47328. PENGREENATTR
  47329. SYNCHXSLTPROCESSORUSERd
  47330. VNEWVAL
  47331. THIS    
  47332. ISRUNNING
  47333. VERIFYNCNAME
  47334. PENBLUEATTR
  47335. SYNCHXSLTPROCESSORUSERd
  47336. VNEWVAL
  47337. THIS    
  47338. ISRUNNING
  47339. VERIFYNCNAME
  47340. FONTNAMEATTR
  47341. SYNCHXSLTPROCESSORUSERd
  47342. VNEWVAL
  47343. THIS    
  47344. ISRUNNING
  47345. VERIFYNCNAME
  47346. FONTSTYLEATTR
  47347. SYNCHXSLTPROCESSORUSERd
  47348. VNEWVAL
  47349. THIS    
  47350. ISRUNNING
  47351. VERIFYNCNAME
  47352. FONTSIZEATTR
  47353. SYNCHXSLTPROCESSORUSER]
  47354. VNEWVAL
  47355. LCVAL
  47356. PAGEIMAGEATTR
  47357. SYNCHXSLTPROCESSORUSER_
  47358. VNEWVAL
  47359. LCVAL
  47360. DATATYPEATTR
  47361. SYNCHXSLTPROCESSORUSER_
  47362. VNEWVAL
  47363. LCVAL
  47364. DATATEXTATTR
  47365. SYNCHXSLTPROCESSORUSER*
  47366. NFRXRECNO
  47367. OOBJPROPERTIES
  47368. SETFRXDATASESSION
  47369. FORMATTINGCHANGES
  47370. RELOAD
  47371. FILLRED
  47372. FILLGREEN
  47373. FILLBLUE
  47374. FILLALPHA
  47375. PENRED
  47376. PENGREEN
  47377. PENBLUE
  47378. PENALPHA
  47379. FNAME
  47380. FONTNAME
  47381. FSTYLE    
  47382. FONTSTYLE
  47383. FSIZE
  47384. FONTSIZE
  47385. RESETDATASESSIONc
  47386. CALLEVALUATECONTENTS
  47387. FORMATTINGCHANGES
  47388. FRXRECNO
  47389. RELOAD
  47390. DTEXT
  47391. DTYPE
  47392. FNAME
  47393. FSTYLE
  47394. FSIZE(
  47395. JPGCLSID
  47396. FORMATTINGCHANGES
  47397. UTILITYIMAGE_
  47398. VNEWVAL
  47399. LCVAL
  47400. CONTATTR
  47401. SYNCHXSLTPROCESSORUSER_
  47402. VNEWVAL
  47403. LCVAL
  47404. THIS    
  47405. WIDTHATTR
  47406. SYNCHXSLTPROCESSORUSER_
  47407. VNEWVAL
  47408. LCVAL
  47409. HEIGHTATTR
  47410. SYNCHXSLTPROCESSORUSER_
  47411. VNEWVAL
  47412. LCVAL
  47413. LEFTATTR
  47414. SYNCHXSLTPROCESSORUSER_
  47415. VNEWVAL
  47416. LCVAL
  47417. TOPATTR
  47418. SYNCHXSLTPROCESSORUSER_
  47419. VNEWVAL
  47420. LCVAL
  47421. IDATTRIBUTE
  47422. SYNCHXSLTPROCESSORUSER_
  47423. VNEWVAL
  47424. LCVAL
  47425. IDREFATTRIBUTE
  47426. SYNCHXSLTPROCESSORUSERT
  47427. XML Display Listener
  47428. APPNAME
  47429. HADERROR!
  47430. FRXRecno
  47431. TNLEFT
  47432. TNTOP
  47433. TNWIDTH
  47434. TNHEIGHT
  47435. TNOBJECTCONTINUATIONTYPE
  47436. LCINFO
  47437. ADJUSTSHAPEASPECTRATIO
  47438. IMAGEFIELDTOFILE
  47439. IMAGESRCATTR
  47440. SETFRXDATASESSION
  47441. FORMATTINGCHANGES
  47442. RELOAD
  47443. PENALPHAATTR
  47444. PENREDATTR
  47445. PENGREENATTR
  47446. PENBLUEATTR
  47447. FILLALPHAATTR
  47448. FILLREDATTR
  47449. FILLGREENATTR
  47450. FILLBLUEATTR
  47451. FONTNAMEATTR
  47452. FNAME
  47453. FONTSIZEATTR
  47454. FSIZE
  47455. FONTSTYLEATTR
  47456. FSTYLE
  47457. FRXRecno
  47458. TONODE
  47459. TNLEFT
  47460. TNTOP
  47461. TNWIDTH
  47462. TNHEIGHT
  47463. TNOBJECTCONTINUATIONTYPE
  47464. ADJUSTSHAPEASPECTRATIO
  47465. IMAGEFIELDTOFILE
  47466. SETATTRIBUTE
  47467. IMAGESRCATTR
  47468. SETFRXDATASESSION
  47469. FORMATTINGCHANGES
  47470. RELOAD
  47471. PENALPHAATTR
  47472. PENREDATTR
  47473. PENGREENATTR
  47474. PENBLUEATTR
  47475. FILLALPHAATTR
  47476. FILLREDATTR
  47477. FILLGREENATTR
  47478. FILLBLUEATTR
  47479. FONTNAMEATTR
  47480. FNAME
  47481. FONTSIZEATTR
  47482. FSIZE
  47483. FONTSTYLEATTR
  47484. FSTYLE
  47485. Image
  47486. NFRXRECNO
  47487. NLEFT
  47488. NWIDTH
  47489. NHEIGHT
  47490. NOBJECTCONTINUATIONTYPE
  47491. CCONTENTSTOBERENDERED
  47492. GDIPLUSIMAGE
  47493. LLCOPYIMAGE
  47494. LCFILE
  47495. LIDEFAULTBEHAVIOR
  47496. JPGCLSID
  47497. INITIALIZEFILECOPYSETTINGS
  47498. SETFRXDATASESSION
  47499. COPYIMAGEFILESTOEXTERNALFILELOCATION
  47500. OBJTYPE
  47501. OFFSET
  47502. GENERAL
  47503. UTILITYIMAGE
  47504. PICTURE
  47505. SETCURRENTDATASESSION
  47506. EXTERNALFILELOCATION
  47507. TARGETFILENAME
  47508. IMAGEFIELDTOFILE
  47509. SENDGDIPLUSIMAGE
  47510. GDIPSAVEIMAGETOFILE
  47511. IMAGEFILEBASENAME
  47512. IMAGEFIELDINSTANCE
  47513. RESETDATASESSION
  47514. STRING
  47515. EXCEPTION
  47516. THIS.CommandClauses.NoPageEjectb
  47517. OTEMPIMAGESCOLLECTION
  47518. LCITEM
  47519. LOEXC
  47520. NOPAGEEJECT
  47521. COMMANDCLAUSES
  47522. OLDEXTERNALFILELOCATION
  47523. EXTERNALFILELOCATION
  47524. OLDSENDGDIPLUSIMAGE
  47525. SENDGDIPLUSIMAGE
  47526. RESETDATASESSIONj
  47527. ImageFieldInstance
  47528. ImageFieldToFile
  47529. UtilityImage
  47530. RESETTODEFAULT
  47531. XMLMODE
  47532. OLDSENDGDIPLUSIMAGE
  47533. SENDGDIPLUSIMAGE
  47534. OLDEXTERNALFILELOCATION
  47535. EXTERNALFILELOCATION
  47536. JPGCLSID
  47537. CHECKREPORTFORGENERALFIELDS
  47538. INITIALIZEFILECOPYSETTINGS
  47539. RESETDATASESSION
  47540. externalFileLocation
  47541. copyImageFilesToExternalFileLocation
  47542. imageFileBaseName
  47543. TCNODENAME
  47544. TLASSTRING
  47545. COMMANDCLAUSES
  47546. EXTERNALFILELOCATION$
  47547. COPYIMAGEFILESTOEXTERNALFILELOCATION
  47548. IMAGEFILEBASENAME$
  47549. TLCALLEDEARLY
  47550. RESETDATASESSION
  47551. checkreportforgeneralfields,
  47552. imagesrcattr_assign
  47553. imagefilebasename_assign
  47554. copyimagefilestoexternalfilelocation_assign
  47555. initializefilecopysettings
  47556. adjustshapeaspectratio
  47557. fillalphaattr_assign
  47558. fillredattr_assignk
  47559. fillgreenattr_assign     
  47560. fillblueattr_assign
  47561. penalphaattr_assign
  47562. penredattr_assignC
  47563. pengreenattr_assign
  47564. penblueattr_assign
  47565. fontnameattr_assignb
  47566. fontstyleattr_assign
  47567. fontsizeattr_assign
  47568. pageimageattr_assign
  47569. datatypeattr_assign#
  47570. datatextattr_assign
  47571. EvaluateContentsa
  47572. initializeformattingchangescursor
  47573. Destroy
  47574. contattr_assign
  47575. widthattr_assign|
  47576. heightattr_assign
  47577. leftattr_assign
  47578. topattr_assignP
  47579. idattribute_assign
  47580. idrefattribute_assign
  47581. Init)
  47582. getrawformattinginfo
  47583. setdomformattinginfoC
  47584. Render
  47585. UnloadReport[(
  47586. resetdocument
  47587. BeforeReport
  47588. getvfprdlcontentsb,
  47589. AfterReport
  47590. GetSysColor
  47591. Win32API
  47592. DATASESSIONv
  47593. ThermBack
  47594. shape
  47595. ThermLabel
  47596. label
  47597. ThermShape
  47598. shape
  47599. THIS    
  47600. THERMFORM
  47601. GETSYSCOLOR
  47602. WIN32API
  47603. LITHERMTOP
  47604. LITHERMLEFT
  47605. LITHERMWIDTH
  47606. LITHERMHEIGHT    
  47607. LISESSION
  47608. RESETDATASESSION    
  47609. SCALEMODE
  47610. HEIGHT
  47611. THERMFORMHEIGHT
  47612. HALFHEIGHTCAPTION
  47613. WIDTH
  47614. THERMFORMWIDTH
  47615. AUTOCENTER
  47616. BORDERSTYLE
  47617. CONTROLBOX
  47618. CLOSABLE    
  47619. ISRUNNING    
  47620. MAXBUTTON    
  47621. MINBUTTON
  47622. MOVABLE
  47623. ALWAYSONTOP
  47624. ALLOWOUTPUT    
  47625. ADDOBJECT
  47626. THERMMARGIN
  47627. SETCURRENTDATASESSION
  47628. SETTHERMFORMCAPTION    
  47629. THERMBACK
  47630. VISIBLE    
  47631. BACKSTYLE
  47632. THERMLABEL
  47633. PARENT
  47634. AUTOSIZE
  47635. CAPTION    
  47636. FORECOLOR
  47637. THERMSHAPE    
  47638. FILLSTYLE    
  47639. BACKCOLOR    
  47640. FILLCOLOR
  47641. DRAWMODE9
  47642. VNEWVAL
  47643. SECONDSTEXTF
  47644. VNEWVAL
  47645. THERMFORMCAPTION
  47646. SETTHERMFORMCAPTION
  47647. VNEWVAL
  47648. THIS    
  47649. ISRUNNING
  47650. THERMFORMHEIGHT
  47651. THERMMARGIN    
  47652. THERMFORM
  47653. VNEWVAL
  47654. THIS    
  47655. ISRUNNING
  47656. THERMFORMWIDTH
  47657. THERMMARGIN    
  47658. THERMFORM
  47659. VNEWVAL
  47660. THIS    
  47661. ISRUNNING
  47662. THERMFORMHEIGHT
  47663. THERMFORMWIDTH
  47664. THERMMARGIN    
  47665. THERMFORM9
  47666. VNEWVAL
  47667. INCLUDESECONDS
  47668. _SCREEN.ActiveFormb
  47669. THIS.CommandClauses.InWindowb
  47670. THIS.CommandClauses.Windowb
  47671. _SCREEN.ActiveFormb
  47672. _SCREEN.ActiveFormb
  47673. LOFORM    
  47674. LOTOPFORM
  47675. LCINWINDOW
  47676. ACTIVEFORM
  47677. SHOWWINDOW
  47678. COMMANDCLAUSES
  47679. INWINDOW
  47680. WINDOW
  47681. FORMS
  47682. NAME    
  47683. FORMCOUNT"
  47684. THIS.CommandClauses.Fileb
  47685. Press Esc to cancel... 
  47686. THIS    
  47687. THERMFORM
  47688. THERMFORMCAPTION
  47689. CNAME
  47690. PRINTJOBNAME
  47691. COMMANDCLAUSES
  47692. CAPTION
  47693. VNEWVAL
  47694. LCTYPE
  47695. CMESSAGE
  47696. THERMCAPTION9
  47697. VNEWVAL
  47698. INITSTATUSTEXT9
  47699. VNEWVAL
  47700. PREPASSSTATUSTEXT9
  47701. VNEWVAL
  47702. RUNSTATUSTEXTh
  47703. TLRESETTIMES
  47704. CURRENTRECORD
  47705. PERCENTDONE
  47706. REPORTSTARTRUNDATETIME
  47707. REPORTSTOPRUNDATETIME
  47708. WINDOWS
  47709. SKIPv
  47710. LISELECT
  47711. LCALIAS
  47712. LISKIPS
  47713. LASKIPS
  47714. DESIGNATEDDRIVER
  47715. DRIVINGALIAS
  47716. SETFRXDATASESSION
  47717. OBJTYPE
  47718. OBJCODE
  47719. SETCURRENTDATASESSION
  47720. PLATFORM
  47721. NBANDOBJCODE    
  47722. NFRXRECNO
  47723. THIS    
  47724. ISRUNNING
  47725. HADERROR
  47726. FRXBANDRECNO
  47727. SETCURRENTDATASESSION
  47728. DRIVINGALIASCURRENTRECNO
  47729. DRIVINGALIAS
  47730. CURRENTRECORD
  47731. COMMANDCLAUSES
  47732. RECORDTOTAL
  47733. CURRENTPASS
  47734. TWOPASSPROCESS
  47735. RESETUSERFEEDBACK
  47736. UPDATESTATUS
  47737. RESETDATASESSION=
  47738. VNEWVAL
  47739. THERMPRECISION
  47740. THIS.CommandClauses.Summaryb
  47741. Summary-
  47742. THIS.CommandClauses.RecordTotalb
  47743. RecordTotal
  47744. COMMANDCLAUSES
  47745. NBANDOBJCODE    
  47746. NFRXRECNO
  47747. SUCCESSORSYS2024
  47748. CURRENTPASS
  47749. SETCURRENTDATASESSION
  47750. DESIGNATEDDRIVER
  47751. SYNCHSTATUS
  47752. RESETDATASESSIONs
  47753. THIS    
  47754. ISRUNNING
  47755. POPGLOBALSETS
  47756. REPORTSTOPRUNDATETIME
  47757. CLEARSTATUS    
  47758. THERMFORM
  47759. RESETDATASESSION
  47760. MACDESKTOP
  47761. SCREEN
  47762. MACDESKTOP
  47763. SCREEN
  47764. CMESSAGE
  47765. LOPARENTFORM    
  47766. LCCAPTION
  47767. LCPARENTFORMNAME
  47768. THIS    
  47769. QUIETMODE    
  47770. ISRUNNING
  47771. COMMANDCLAUSES
  47772. NODIALOG
  47773. THERMCAPTION    
  47774. THERMFORM
  47775. CREATETHERM
  47776. CLOSABLE
  47777. MOVABLE
  47778. THERMSHAPE
  47779. WIDTH
  47780. PERCENTDONE    
  47781. THERMBACK
  47782. VISIBLE
  47783. GETPARENTWINDOWREF
  47784. DESKTOP
  47785. MACDESKTOP
  47786. SHOWWINDOW
  47787. ALWAYSONTOP
  47788. AUTOCENTER
  47789. THERMLABEL
  47790. CAPTION
  47791. LEFTm
  47792. THIS    
  47793. THERMFORM
  47794. VISIBLE    
  47795. SUCCESSOR
  47796. CLEARSTATUS7
  47797. DRIVINGALIASCURRENTRECNO    
  47798. ISRUNNING
  47799. RESETDATASESSION
  47800. Initializing... 
  47801. Running calculation prepass... 
  47802. Creating output... 
  47803. sec(s)
  47804. m.cMessage+ " "+ 
  47805. TRANSFORM(THIS.PercentDone,"999"+ 
  47806. IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" 
  47807. + IIF(NOT THIS.IncludeSeconds, "" , " "+
  47808. TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-
  47809. THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)
  47810. INITSTATUSTEXT
  47811. PREPASSSTATUSTEXT
  47812. RUNSTATUSTEXT
  47813. SECONDSTEXT
  47814. THERMCAPTION
  47815. HADERROR
  47816. THIS.CommandClauses.RecordTotalb
  47817. THIS    
  47818. ISRUNNING
  47819. CURRENTRECORD
  47820. COMMANDCLAUSES
  47821. RECORDTOTAL
  47822. UPDATESTATUS
  47823. CLEARSTATUS
  47824. DESIGNATEDDRIVER
  47825. SUCCESSORSYS2024    
  47826. THERMFORM
  47827. REPORTSTOPRUNDATETIME
  47828. POPGLOBALSETSp
  47829. Stop report execution?C
  47830. (If you press 'No', report execution will continue.)
  47831. DATASESSIONv
  47832. Report execution was cancelled.C
  47833. Your results are not complete.
  47834. Report execution was cancelled.C
  47835. Your results are not complete.
  47836. THIS    
  47837. ISRUNNING    
  47838. QUIETMODE    
  47839. PAGELIMIT
  47840. PAGENO
  47841. ALLOWMODALMESSAGES    
  47842. DOMESSAGE
  47843. ISSUCCESSOR
  47844. DESIGNATEDDRIVER
  47845. SUCCESSORSYS2024    
  47846. LISESSION
  47847. SETCURRENTDATASESSION    
  47848. THERMFORM
  47849. LASTERRORMESSAGEK
  47850. Notify
  47851. ESCAPE
  47852. PUBLIC &lcRef.   
  47853. ON ESCAPE &lcRef..CancelReport()      
  47854. ESCAPEv
  47855. STARTMODE
  47856. LCREF
  47857. SETNOTIFYCURSOR
  47858. ONESCAPECOMMAND
  47859. ESCAPEREFERENCE    
  47860. SETESCAPE
  47861. RELEASE &lcRef.
  47862. ON ESCAPE &lcRef
  47863. STARTMODE
  47864. LCREF
  47865. ESCAPEREFERENCE
  47866. ONESCAPECOMMAND
  47867. SETNOTIFYCURSOR    
  47868. SETESCAPE
  47869. WINDOWS
  47870. WINDOWS
  47871. WINDOWS
  47872. WINDOWS
  47873. WINDOWS
  47874. LLFRXAVAILABLE
  47875. LCALIAS
  47876. GETREPORTSCOPEDRIVER
  47877. SETFRXDATASESSION
  47878. FRXBANDRECNO
  47879. COMMANDCLAUSES
  47880. SUMMARY
  47881. OBJTYPE
  47882. OBJCODE
  47883. PLATFORM
  47884. SETCURRENTDATASESSION
  47885. DRIVINGALIAS
  47886. THIS    
  47887. ISRUNNING
  47888. LIRECTOTAL
  47889. LNNEWPERCENT
  47890. LLSHOW
  47891. COMMANDCLAUSES
  47892. RECORDTOTAL
  47893. CURRENTRECORD
  47894. THERMPRECISION
  47895. PERCENTDONE
  47896. DOSTATUS
  47897. CURRENTPASS
  47898. TWOPASSPROCESS
  47899. PREPASSSTATUSTEXT
  47900. RUNSTATUSTEXT
  47901. THIS.CommandClauses.NoDialogb
  47902. RESETUSERFEEDBACK    
  47903. QUIETMODE
  47904. COMMANDCLAUSES
  47905. NODIALOG
  47906. DOSTATUS
  47907. INITSTATUSTEXT
  47908. PUSHGLOBALSETS
  47909. CLEARSTATUSM
  47910. NBANDOBJCODE    
  47911. NFRXRECNO
  47912. SYNCHSTATUS
  47913. RESETDATASESSION
  47914. THIS    
  47915. THERMFORM
  47916. createtherm,
  47917. secondstext_assign\
  47918. thermformcaption_assign
  47919. thermformheight_assign5
  47920. thermformwidth_assign1
  47921. thermmargin_assign,    
  47922. includeseconds_assign
  47923. getparentwindowrefj
  47924. setthermformcaption
  47925. thermcaption_assignM
  47926. initstatustext_assign
  47927. prepassstatustext_assignu
  47928. runstatustext_assign
  47929. resetuserfeedback/
  47930. getreportscopedriver
  47931. synchstatus
  47932. thermprecision_assign
  47933. setfrxrunstartupconditions
  47934. BeforeBand
  47935. UnloadReport
  47936. DoStatus
  47937. ClearStatus
  47938. BeforeReport
  47939. Init4 
  47940. AfterReport
  47941. CancelReport4$
  47942. pushglobalsetsf'
  47943. popglobalsets
  47944. getfrxstartupinfof*
  47945. UpdateStatus7.
  47946. LoadReport
  47947. AfterBandA1
  47948. Destroy
  47949. PROCEDURE applyfx
  47950. LPARAMETERS m.toListener, m.tcMethodToken,;
  47951.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  47952.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  47953. LOCAL m.liSession            
  47954. IF VARTYPE(m.toListener) = "O" && AND ;
  47955.    (NOT m.toListener.IsSuccessor)
  47956.    DO CASE
  47957.    CASE m.tcMethodToken == "DOSTATUS"
  47958.       THIS.DoStatus(m.toListener, m.tP1)
  47959.    CASE m.tcMethodToken == "UPDATESTATUS"
  47960.       THIS.UpdateStatus(m.toListener)    
  47961.    CASE m.tcMethodToken == "CLEARSTATUS"
  47962.       THIS.ClearStatus(m.toListener)
  47963.    CASE m.tcMethodToken == "AFTERBAND"
  47964.        THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  47965.    CASE m.tcMethodToken == "AFTERREPORT"
  47966.       IF SYS(2024) # "Y" 
  47967.          IF THIS.isRunning AND TYPE("m.toListener.CommandClauses.RecordTotal") = "N"
  47968.             THIS.CurrentRecord = m.toListener.CommandClauses.RecordTotal
  47969.          ENDIF   
  47970.          THIS.UpdateStatus(m.toListener) 
  47971.       ENDIF
  47972.       THIS.designatedDriver = ""
  47973.       THIS.drivingAlias = ""
  47974.       THIS.successorSys2024 = "N"
  47975.       THIS.Visible = .F.
  47976.       THIS.ReportStopRunDateTime = DATETIME()
  47977.       THIS.popUserFeedbackGlobalSets()
  47978.       THIS.ClearStatus(m.toListener)       
  47979.    CASE m.tcMethodToken == "BEFOREBAND"
  47980.       IF THIS.successorSys2024 = "Y" AND ;
  47981.          m.toListener.CurrentPass = LISTENER_FULLPASS
  47982.          * user cancelled during the prepass,
  47983.          * we need to re-cancel.
  47984.          m.liSession = SET("DATASESSION")
  47985.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  47986.          IF USED(THIS.designatedDriver)
  47987.             GO BOTTOM IN (THIS.designatedDriver)
  47988.          ENDIF   
  47989.          SET DATASESSION TO (m.liSession)
  47990.       ENDIF   
  47991.       THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  47992.   CASE m.tcMethodToken == "BEFOREREPORT"
  47993.       THIS.setupReport(m.toListener)
  47994.    CASE m.tcMethodToken == "CANCELREPORT"
  47995.       IF THIS.isRunning AND ;
  47996.          (m.toListener.QuietMode OR ;
  47997.          (m.toListener.pageLimit > 0 AND m.toListener.PageNo > m.toListener.pageLimit) OR ;
  47998.           (NOT m.toListener.AllowModalMessages) OR ;
  47999.           m.toListener.DoMessage(This.CancelQueryText,;  && OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  48000.                                  MB_ICONQUESTION+MB_YESNO, This.AttentionText) =  IDYES )
  48001.           m.toListener.cancelRequested = .T.
  48002.           IF m.toListener.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  48003.              * NB: FX should ordinarily not be used in a successor,
  48004.              * but this won't hurt and will take care of the exception
  48005.              THIS.successorSys2024 = "Y"
  48006.              m.liSession = SET("DATASESSION")
  48007.              SET DATASESSION TO (m.toListener.CurrentDataSession)
  48008.              IF USED(THIS.designatedDriver)
  48009.                 GO BOTTOM IN (THIS.designatedDriver)
  48010.              ENDIF   
  48011.              SET DATASESSION TO (m.liSession)
  48012.           ENDIF
  48013.           IF SYS(2024) = "Y"  OR m.toListener.IsSuccessor
  48014.              THIS.Visible = .F.
  48015.              IF (m.toListener.pageLimit = -1 OR m.toListener.PageNo <= m.toListener.pageLimit)
  48016.                 m.toListener.DoMessage(;
  48017.                         This.ReportIncompleteText, ; && OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  48018.                         MB_ICONEXCLAMATION, This.AttentionText)
  48019.              ENDIF
  48020.           ENDIF
  48021.           RETURN .F.
  48022.        ELSE
  48023.           RETURN .T. && did not handle, use default behavior          
  48024.        ENDIF          
  48025.    CASE m.tcMethodToken == "LOADREPORT"
  48026.       THIS.ResetUserFeedback(.T.)
  48027.       m.toListener.AddProperty("reportStartRunDatetime",THIS.reportStartRunDatetime)
  48028.       IF NOT (m.toListener.QuietMode OR ;
  48029.            (TYPE("m.toListener.CommandClauses.NoDialog") = "L" AND ;
  48030.            m.toListener.CommandClauses.NoDialog) )
  48031.            THIS.DoStatus(m.toListener,THIS.initStatusText) 
  48032.           * NB: a user can call LoadReport manually,
  48033.           * hence the need for a TYPE() check here.
  48034.       ENDIF   
  48035.       THIS.pushUserFeedbackGlobalSets(m.toListener) 
  48036.    CASE m.tcMethodToken == "UNLOADREPORT"
  48037.       THIS.ReportStopRunDateTime = DATETIME()
  48038.       m.toListener.AddProperty("reportStopRunDatetime",THIS.reportStopRunDatetime)      
  48039.       THIS.IsRunning = .F.
  48040.       THIS.ClearStatus()       
  48041.       IF NOT THIS.persistBetweenRuns 
  48042.          SET DATASESSION TO (m.toListener.ListenerDataSession)      
  48043.          THIS.Release()
  48044.       ENDIF            
  48045.    ENDCASE
  48046.    SET DATASESSION TO (m.toListener.ListenerDataSession)
  48047. ENDIF
  48048. *!*    LPARAMETERS m.toListener, m.tcMethodToken,;
  48049. *!*                m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  48050. *!*                m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  48051. *!*    LOCAL m.liSession            
  48052. *!*    IF VARTYPE(m.toListener) = "O" && AND ;
  48053. *!*       (NOT m.toListener.IsSuccessor)
  48054. *!*       DO CASE
  48055. *!*       CASE m.tcMethodToken == "DOSTATUS"
  48056. *!*          THIS.DoStatus(m.toListener, m.tP1)
  48057. *!*       CASE m.tcMethodToken == "UPDATESTATUS"
  48058. *!*          THIS.UpdateStatus(m.toListener)    
  48059. *!*       CASE m.tcMethodToken == "CLEARSTATUS"
  48060. *!*          THIS.ClearStatus(m.toListener)
  48061. *!*       CASE m.tcMethodToken == "AFTERBAND"
  48062. *!*           THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  48063. *!*       CASE m.tcMethodToken == "AFTERREPORT"
  48064. *!*          IF SYS(2024) # "Y" 
  48065. *!*             IF THIS.isRunning AND TYPE("m.toListener.CommandClauses.RecordTotal") = "N"
  48066. *!*                THIS.CurrentRecord = m.toListener.CommandClauses.RecordTotal
  48067. *!*             ENDIF   
  48068. *!*             THIS.UpdateStatus(m.toListener) 
  48069. *!*          ENDIF
  48070. *!*          THIS.designatedDriver = ""
  48071. *!*          THIS.drivingAlias = ""
  48072. *!*          THIS.successorSys2024 = "N"
  48073. *!*          THIS.Visible = .F.
  48074. *!*          THIS.ReportStopRunDateTime = DATETIME()
  48075. *!*          THIS.popUserFeedbackGlobalSets()
  48076. *!*          THIS.ClearStatus(m.toListener)       
  48077. *!*       CASE m.tcMethodToken == "BEFOREBAND"
  48078. *!*          IF THIS.successorSys2024 = "Y" AND ;
  48079. *!*             m.toListener.CurrentPass = LISTENER_FULLPASS
  48080. *!*             * user cancelled during the prepass,
  48081. *!*             * we need to re-cancel.
  48082. *!*             m.liSession = SET("DATASESSION")
  48083. *!*             SET DATASESSION TO (m.toListener.CurrentDataSession)
  48084. *!*             IF USED(THIS.designatedDriver)
  48085. *!*                GO BOTTOM IN (THIS.designatedDriver)
  48086. *!*             ENDIF   
  48087. *!*             SET DATASESSION TO (m.liSession)
  48088. *!*          ENDIF   
  48089. *!*          THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  48090. *!*      CASE m.tcMethodToken == "BEFOREREPORT"
  48091. *!*          THIS.setupReport(m.toListener)
  48092. *!*       CASE m.tcMethodToken == "CANCELREPORT"
  48093. *!*          IF THIS.isRunning AND ;
  48094. *!*             (m.toListener.QuietMode OR ;
  48095. *!*             (m.toListener.pageLimit > 0 AND m.toListener.PageNo > m.toListener.pageLimit) OR ;
  48096. *!*              (NOT m.toListener.AllowModalMessages) OR ;
  48097. *!*              m.toListener.DoMessage(OUTPUTCLASS_REPORT_CANCELQUERY_LOC,;
  48098. *!*                                     MB_ICONQUESTION+MB_YESNO) =  IDYES )
  48099. *!*              m.toListener.cancelRequested = .T.
  48100. *!*              IF m.toListener.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  48101. *!*                 * NB: FX should ordinarily not be used in a successor,
  48102. *!*                 * but this won't hurt and will take care of the exception
  48103. *!*                 THIS.successorSys2024 = "Y"
  48104. *!*                 m.liSession = SET("DATASESSION")
  48105. *!*                 SET DATASESSION TO (m.toListener.CurrentDataSession)
  48106. *!*                 IF USED(THIS.designatedDriver)
  48107. *!*                    GO BOTTOM IN (THIS.designatedDriver)
  48108. *!*                 ENDIF   
  48109. *!*                 SET DATASESSION TO (m.liSession)
  48110. *!*              ENDIF
  48111. *!*              IF SYS(2024) = "Y"  OR m.toListener.IsSuccessor
  48112. *!*                 THIS.Visible = .F.
  48113. *!*                 IF (m.toListener.pageLimit = -1 OR m.toListener.PageNo <= m.toListener.pageLimit)
  48114. *!*                    m.toListener.DoMessage(OUTPUTCLASS_REPORT_INCOMPLETE_LOC, ;
  48115. *!*                                   MB_ICONEXCLAMATION)
  48116. *!*                 ENDIF                        
  48117. *!*              ENDIF
  48118. *!*              RETURN .F.
  48119. *!*           ELSE
  48120. *!*              RETURN .T. && did not handle, use default behavior          
  48121. *!*           ENDIF          
  48122. *!*       CASE m.tcMethodToken == "LOADREPORT"
  48123. *!*          THIS.ResetUserFeedback(.T.)
  48124. *!*          m.toListener.AddProperty("reportStartRunDatetime",THIS.reportStartRunDatetime)
  48125. *!*          IF NOT (m.toListener.QuietMode OR ;
  48126. *!*               (TYPE("m.toListener.CommandClauses.NoDialog") = "L" AND ;
  48127. *!*               m.toListener.CommandClauses.NoDialog) )
  48128. *!*               THIS.DoStatus(m.toListener,THIS.initStatusText) 
  48129. *!*              * NB: a user can call LoadReport manually,
  48130. *!*              * hence the need for a TYPE() check here.
  48131. *!*          ENDIF   
  48132. *!*          THIS.pushUserFeedbackGlobalSets(m.toListener) 
  48133. *!*       CASE m.tcMethodToken == "UNLOADREPORT"
  48134. *!*          THIS.ReportStopRunDateTime = DATETIME()
  48135. *!*          m.toListener.AddProperty("reportStopRunDatetime",THIS.reportStopRunDatetime)      
  48136. *!*          THIS.IsRunning = .F.
  48137. *!*          THIS.ClearStatus()       
  48138. *!*          IF NOT THIS.persistBetweenRuns 
  48139. *!*             SET DATASESSION TO (m.toListener.ListenerDataSession)      
  48140. *!*             THIS.Release()
  48141. *!*          ENDIF            
  48142. *!*       ENDCASE
  48143. *!*       SET DATASESSION TO (m.toListener.ListenerDataSession)
  48144. *!*    ENDIF            
  48145. ENDPROC
  48146. PROCEDURE includeseconds_assign
  48147. LPARAMETERS m.vNewVal
  48148. IF VARTYPE(m.vNewVal) = "L"
  48149.    THIS.includeSeconds = m.vNewVal
  48150. ENDIF   
  48151. ENDPROC
  48152. PROCEDURE initstatustext_assign
  48153. LPARAMETERS m.vNewVal
  48154. IF VARTYPE(m.vNewVal) = "C"
  48155.    THIS.initStatusText = m.vNewVal
  48156. ENDIF   
  48157. ENDPROC
  48158. PROCEDURE prepassstatustext_assign
  48159. LPARAMETERS m.vNewVal
  48160. IF VARTYPE(m.vNewVal) = "C"
  48161.    THIS.prepassStatusText = m.vNewVal
  48162. ENDIF   
  48163. ENDPROC
  48164. PROCEDURE runstatustext_assign
  48165. LPARAMETERS vNewVal
  48166. *To do: Modify this routine for the Assign method
  48167. THIS.runStatusText = m.vNewVal
  48168. ENDPROC
  48169. PROCEDURE secondstext_assign
  48170. LPARAMETERS vNewVal
  48171. *To do: Modify this routine for the Assign method
  48172. THIS.secondsText = m.vNewVal
  48173. ENDPROC
  48174. PROCEDURE thermcaption_assign
  48175. LPARAMETERS m.vNewVal
  48176. IF VARTYPE(m.vNewVal) = "C"
  48177.    LOCAL m.lcType, m.cMessage
  48178.    m.cMessage = ""
  48179.    TRY 
  48180.     m.lcType = VARTYPE(EVALUATE(m.vNewVal))
  48181.       IF m.lcType = "C"
  48182.         THIS.thermCaption = m.vNewVal
  48183.     ENDIF
  48184.    CATCH 
  48185.    ENDTRY     
  48186. ENDIF   
  48187. ENDPROC
  48188. PROCEDURE thermformcaption_assign
  48189. LPARAMETERS m.vNewVal
  48190. IF VARTYPE(m.vNewVal) = "C"
  48191.    THIS.thermFormCaption = m.vNewVal
  48192.    THIS.setThermFormCaption()
  48193. ENDIF   
  48194. ENDPROC
  48195. PROCEDURE thermformheight_assign
  48196. LPARAMETERS m.vNewVal
  48197. IF  VARTYPE(m.vNewVal) = "N" AND ;
  48198.    BETWEEN(m.vNewVal,30,SYSMETRIC(SYSMETRIC_SCREENHEIGHT )-30)  AND ;
  48199.    INT(m.vNewVal) # THIS.thermFormHeight
  48200.    THIS.thermFormHeight = INT(m.vNewVal)
  48201.    IF THIS.thermMargin > THIS.thermFormHeight/4
  48202.       THIS.thermMargin = THIS.thermFormHeight/4
  48203.    ENDIF   
  48204.    THIS.synchUserInterface() 
  48205. ENDIF   
  48206. ENDPROC
  48207. PROCEDURE thermformwidth_assign
  48208. LPARAMETERS m.vNewVal
  48209. IF VARTYPE(m.vNewVal) = "N" AND ;
  48210.    BETWEEN(m.vNewVal,100,SYSMETRIC( SYSMETRIC_SCREENWIDTH  )-100) AND ;
  48211.    INT(m.vNewVal) # THIS.ThermFormWidth 
  48212.    THIS.thermFormWidth = INT(m.vNewVal)
  48213.    IF THIS.thermMargin > THIS.thermFormWidth/4
  48214.       THIS.thermMargin = THIS.thermFormWidth/4
  48215.    ENDIF   
  48216.    THIS.synchUserInterface() 
  48217. ENDIF   
  48218. ENDPROC
  48219. PROCEDURE thermmargin_assign
  48220. LPARAMETERS m.vNewVal
  48221. IF VARTYPE(m.vNewVal) = "N" AND ;
  48222.    BETWEEN(m.vNewVal,1,MIN(THIS.ThermFormHeight/4,THIS.ThermFormWidth/4)) AND ;
  48223.    INT(m.vNewVal) # THIS.thermMargin
  48224.    THIS.thermMargin = INT(m.vNewVal)
  48225.    THIS.synchUserInterface() 
  48226. ENDIF   
  48227. ENDPROC
  48228. PROCEDURE getparentwindowref
  48229. LOCAL m.loForm, m.loTopForm, m.lcInWindow
  48230. * first top form in the list
  48231. * will be the current top form.
  48232. ASSERT TYPE("_SCREEN.ActiveForm") # "O"  OR ;
  48233.        INLIST(_SCREEN.ActiveForm.ShowWindow, 0,1,2)
  48234. m.loTopForm = NULL
  48235. IF TYPE("THIS.CommandClauses.InWindow") = "C"
  48236.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.InWindow))
  48237. ENDIF   
  48238. IF EMPTY(lcInWindow) AND TYPE("THIS.CommandClauses.Window") = "C"
  48239.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.Window))
  48240. ENDIF   
  48241. IF NOT EMPTY(m.lcInWindow) 
  48242.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  48243.         IF m.loForm.ShowWindow = 2  AND ;
  48244.            UPPER(m.loForm.Name) == m.lcInWindow
  48245.            m.loTopForm = m.loForm
  48246.            EXIT
  48247.         ENDIF
  48248.      ENDFOR
  48249.      
  48250. ENDIF
  48251. DO CASE
  48252. CASE VARTYPE(m.loTopForm) = "O"
  48253.     * already found
  48254. CASE _SCREEN.FormCount = 0 OR ;
  48255.      (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  48256.      _SCREEN.ActiveForm.ShowWindow = 0 )     && ShowWindow In Screen
  48257.              
  48258.      m.loTopForm = _SCREEN
  48259. CASE (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  48260.       _SCREEN.ActiveForm.ShowWindow = 2 )    && ShowWindow As Top Form
  48261.      m.loTopForm = _SCREEN.ActiveForm
  48262.              
  48263. OTHERWISE 
  48264.                                                
  48265.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  48266.         IF m.loForm.ShowWindow = 2 
  48267.            m.loTopForm = m.loForm
  48268.            EXIT
  48269.         ENDIF
  48270.      ENDFOR
  48271.              
  48272.      IF VARTYPE(m.loTopForm) # "O"
  48273.         m.loTopForm = _SCREEN
  48274.      ENDIF
  48275.                   
  48276. ENDCASE
  48277. IF VARTYPE(m.loTopForm) # "O" OR ;
  48278.    EMPTY(m.loTopForm.Name)
  48279.    m.loTopForm = NULL
  48280. ENDIF
  48281. RETURN m.loTopForm     
  48282. ENDPROC
  48283. PROCEDURE getreportscopedriver
  48284. LPARAMETERS m.toListener
  48285. LOCAL m.liSelect, m.lcAlias, ;
  48286.       m.liSkips,  laSkips[1]
  48287. IF m.toListener.FRXDataSession > 0
  48288.    SET DATASESSION TO (m.toListener.FRXDataSession)
  48289.    RETURN .F.
  48290. ENDIF   
  48291. THIS.designatedDriver = THIS.drivingAlias
  48292. * used later if we have to cancel report as
  48293. * a Successor
  48294. IF USED("frx")
  48295.    m.liSelect = SELECT(0)
  48296.    m.lcAlias = ""
  48297.    SELECT FRX
  48298.    * first look for any target alias that
  48299.    * is the same as the driver
  48300.    SCAN ALL FOR ObjType = FRX_OBJTYP_BAND AND ;
  48301.            Objcode = FRX_OBJCOD_DETAIL AND ;
  48302.            TYPE(Expr) = "C" AND ;
  48303.            NOT (EMPTY(Expr)  OR DELETED())
  48304.        m.lcAlias = ALLTRIM(Expr)
  48305.        SET DATASESSION TO (m.toListener.CurrentDataSession)   
  48306.        m.lcAlias = UPPER(EVALUATE(m.lcAlias)) 
  48307.        SET DATASESSION TO (m.toListener.FRXDataSession)              
  48308.        IF m.lcAlias == UPPER(THIS.drivingAlias)
  48309.           EXIT
  48310.        ENDIF
  48311.    ENDSCAN
  48312.    IF m.lcAlias == UPPER(THIS.drivingAlias)
  48313.       SELECT (m.liSelect)
  48314.       * if the driver is also a target alias,
  48315.       * don't touch.
  48316.       * otherwise:
  48317.    ELSE 
  48318.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  48319.               Objcode = FRX_OBJCOD_DETAIL AND ;
  48320.               Platform = FRX_PLATFORM_WINDOWS AND ;
  48321.               NOT (EMPTY(Expr) OR DELETED())
  48322.       IF FOUND()
  48323.          * use the first detail band, on the theory
  48324.          * that people are going to put pre-processing 
  48325.          * calculations before other bands, 
  48326.          * so an early band has the best chance to be
  48327.          * the right driver.
  48328.          m.lcAlias = ALLTRIM(Expr)
  48329.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  48330.          THIS.drivingAlias = UPPER(EVALUATE(m.lcAlias))
  48331.          SET DATASESSION TO (m.toListener.FrxDataSession)
  48332.          SELECT (m.liSelect)
  48333.       ELSE   
  48334.          * adjust the driver based on any
  48335.          * one to many relationships we can find.
  48336.          SELECT (m.liSelect)
  48337.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  48338.          m.lcAlias = THIS.drivingAlias
  48339.          m.liSelect = SELECT(0)
  48340.          DO WHILE NOT EMPTY(m.lcAlias)
  48341.             SELECT (m.lcAlias)
  48342.             m.liSkips = ALINES(laSkips,SET("SKIP"),",")
  48343.             IF m.liSkips = 0 OR EMPTY(laSkips[1])
  48344.                THIS.drivingAlias = m.lcAlias
  48345.                m.lcAlias = ""
  48346.             ELSE
  48347.                m.lcAlias = laSkips[1]
  48348.                * it doesn't really matter how many lines there
  48349.                * are in the array; this is not going to be perfect
  48350.                * but we can't predict which child 
  48351.                * has the most records.
  48352.             ENDIF
  48353.          ENDDO
  48354.          SELECT (m.liSelect)
  48355.       ENDIF   
  48356.    ENDIF  
  48357.    RETURN .F.    
  48358. ENDIF
  48359. ENDPROC
  48360. PROCEDURE resetuserfeedback
  48361. LPARAMETERS m.tlResetTimes
  48362. THIS.CurrentRecord = 0
  48363. THIS.PercentDone = 0
  48364. IF m.tlResetTimes
  48365.    THIS.ReportStartRunDateTime= DATETIME()
  48366.    THIS.ReportStopRunDateTime= DTOT({})
  48367.    THIS.thermFormCaption = ""
  48368.    THIS.synchUserInterface()
  48369. ENDIF
  48370. ENDPROC
  48371. PROCEDURE setthermformcaption
  48372. *!*    LPARAMETERS tcCommandClausesFile, tcPrintJobName
  48373. *!*    IF EMPTY(THIS.ThermFormCaption)
  48374. *!*       IF VARTYPE(tcCommandClausesFile) = "C"
  48375. *!*          LOCAL m.cName
  48376. *!*          IF EMPTY( tcPrintJobName) OR VARTYPE( tcPrintJobName) # "C"
  48377. *!*             m.cName = PROPER(JUSTFNAME(tcCommandClausesFile))
  48378. *!*          ELSE
  48379. *!*             m.cName =  tcPrintJobName
  48380. *!*          ENDIF   
  48381. *!*          THIS.thermFormCaption = ;
  48382. *!*             m.cName + ": " + OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  48383. *!*       ELSE
  48384. *!*          THIS.thermFormCaption = ""
  48385. *!*       ENDIF
  48386. *!*    ENDIF
  48387. *!*    THIS.Caption = THIS.thermFormCaption
  48388. LPARAMETERS tcCommandClausesFile, tcPrintJobName
  48389. IF EMPTY(THIS.ThermFormCaption)
  48390.    IF VARTYPE(tcCommandClausesFile) = "C"
  48391.       LOCAL m.cName
  48392.       IF EMPTY(tcPrintJobName) OR VARTYPE(tcPrintJobName) # "C"
  48393.          m.cName = PROPER(JUSTFNAME(tcCommandClausesFile))
  48394.       ELSE
  48395.          m.cName =  tcPrintJobName
  48396.       ENDIF   
  48397.       THIS.thermFormCaption = ;
  48398.          m.cName + ": " + This.CancelInstrText && OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  48399.    ELSE
  48400.       THIS.thermFormCaption = ""
  48401.    ENDIF
  48402. ENDIF
  48403. This.Caption = THIS.thermFormCaption
  48404. ENDPROC
  48405. PROCEDURE synchstatus
  48406. LPARAMETERS m.toListener, m.nBandObjCode, m.nFRXRecNo
  48407. IF THIS.isRunning AND ;
  48408.    THIS.frxBandRecno = m.nFRXRecNo
  48409.    WITH m.toListener
  48410.       TRY
  48411.          SET DATASESSION TO (.CurrentDataSession)
  48412.          IF THIS.drivingAliasCurrentRecno  # RECNO(THIS.drivingAlias)
  48413.             THIS.currentRecord = THIS.CurrentRecord + 1
  48414.             THIS.drivingAliasCurrentRecno = RECNO(THIS.drivingAlias)
  48415.          ENDIF   
  48416.          IF THIS.currentRecord >= .CommandClauses.RecordTotal
  48417.             IF .CurrentPass = 0 AND .TwoPassProcess
  48418.                THIS.resetUserFeedback() 
  48419.             ELSE
  48420.                THIS.currentRecord = .CommandClauses.RecordTotal
  48421.             ENDIF
  48422.          ENDIF
  48423.          THIS.updateStatus(m.toListener)
  48424.        CATCH TO err
  48425.           #IF OUTPUTCLASS_DEBUGGING 
  48426.               SUSPEND
  48427.           #ENDIF
  48428.        ENDTRY         
  48429.        SET DATASESSION TO (.ListenerDataSession)       
  48430.    ENDWITH      
  48431. ENDIF  
  48432. ENDPROC
  48433. PROCEDURE dostatus
  48434. LPARAMETERS m.toListener, m.cMessage
  48435. LOCAL m.loParentForm, m.lcCaption, m.lcParentFormName
  48436. IF (VARTYPE(m.toListener) # "O") OR (NOT (m.toListener.QuietMode OR ;
  48437.    (THIS.isRunning AND m.toListener.CommandClauses.NoDialog)))
  48438.    IF EMPTY(m.cMessage) OR ISNULL(m.cMessage)
  48439.       m.cMessage = ""
  48440.    ENDIF
  48441.    m.lcCaption = EVALUATE(THIS.ThermCaption)
  48442.    WITH THIS
  48443.       
  48444.       IF THIS.isRunning
  48445.          THIS.Closable = .F.
  48446.          THIS.Movable = .F.
  48447.       ENDIF
  48448.      .ThermShape.Width = MAX( (((THIS.PercentDone/100) * .ThermBack.Width)-2) ,0)      
  48449.      IF NOT .Visible
  48450.         
  48451.         m.loParentForm = THIS.GetParentWindowRef()
  48452.         
  48453.         DO CASE
  48454.         CASE VARTYPE(m.loParentForm) # "O" AND (NOT _SCREEN.Visible)
  48455.            m.lcParentFormName = "MACDESKTOP"
  48456.         CASE VARTYPE(m.loParentForm) # "O"
  48457.            m.lcParentFormName = "SCREEN"              
  48458.         CASE (NOT m.loParentForm.Visible) AND ;
  48459.            (m.loParentForm.DeskTop OR NOT EMPTY(m.loParentForm.MacDesktop) OR ;
  48460.            m.loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  48461.            * in many cases, 
  48462.            * they've probably made a programming error,
  48463.            * the parent should be visible according to
  48464.            * the requirements of REPORT FORM ... IN WINDOW
  48465.            * if it's a WINDOW clause they
  48466.            * have no need to show it, might not be an error
  48467.            * Either way, they should see the therm
  48468.            * to know that the report is progressing                
  48469.            m.lcParentFormName = "MACDESKTOP"
  48470.         CASE (NOT m.loParentForm.Visible) 
  48471.            * same comment as above
  48472.            m.lcParentFormName = "SCREEN"
  48473.         OTHERWISE
  48474.            m.lcParentFormName = m.loParentForm.Name
  48475.         ENDCASE
  48476.            
  48477.         SHOW WINDOW (.Name) IN WINDOW (m.lcParentFormName) 
  48478.         .AlwaysOnTop = .T.
  48479.         .AutoCenter = .T.
  48480.         .Visible = .T.
  48481.      ENDIF
  48482.      .ThermLabel.Visible = .F.
  48483.      .ThermLabel.Caption = m.lcCaption     
  48484.      .ThermLabel.Left = (.Width - .ThermLabel.Width) /2 && doesn't work until after visibility of form
  48485.      .ThermLabel.Visible = .T.     
  48486.       
  48487.    ENDWITH
  48488.    m.loParentForm = NULL
  48489. ENDIF   
  48490. ENDPROC
  48491. PROCEDURE clearstatus
  48492. LPARAMETERS m.toListener
  48493. IF THIS.Visible 
  48494.    THIS.Visible = .F.
  48495. ENDIF   
  48496. ENDPROC
  48497. PROCEDURE updatestatus
  48498. LPARAMETERS m.toListener
  48499. IF VARTYPE(m.toListener) = "O" AND THIS.isRunning
  48500.    LOCAL m.liRecTotal, m.lnNewPercent, m.llShow
  48501.    m.liRecTotal = m.toListener.CommandClauses.RecordTotal 
  48502.    IF m.liRecTotal > 0 
  48503.       m.lnNewPercent = ROUND(THIS.CurrentRecord/m.liRecTotal,(THIS.ThermPrecision + 2) ) * 100
  48504.       IF (THIS.PercentDone # m.lnNewPercent)
  48505.          THIS.PercentDone = m.lnNewPercent
  48506.          m.llShow = .T.
  48507.          #IF OUTPUTCLASS_DEBUGGING 
  48508.              ? THIS.PercentDone, THIS.CurrentRecord, m.liRecTotal, m.toListener.PageTotal
  48509.              ? REPL(OUTPUTCLASS_STATUSCHAR_PCT_DONE,INT(THIS.PercentDone/100* OUTPUTCLASS_ONE_HUNDRED_PCT_MARK))+ ;
  48510.                REPL(OUTPUTCLASS_STATUSCHAR_PCT_NOT_DONE,MAX(FLOOR(OUTPUTCLASS_ONE_HUNDRED_PCT_MARK - ;
  48511.                                                             (OUTPUTCLASS_ONE_HUNDRED_PCT_MARK *THIS.PercentDone/100)),0) ) 
  48512.          #ENDIF                
  48513.       ENDIF
  48514.    ELSE
  48515.       m.llShow = .T.         
  48516.    ENDIF   
  48517.    IF m.llShow
  48518.       THIS.DoStatus(m.toListener, ;
  48519.                     IIF(m.toListener.CurrentPass = LISTENER_PREPASS  AND m.toListener.TwoPassProcess,;
  48520.                      THIS.PrepassStatusText, ;
  48521.                      THIS.RunStatusText) )
  48522.    ENDIF                     
  48523. ENDIF   
  48524. ENDPROC
  48525. PROCEDURE pushuserfeedbackglobalsets
  48526. LPARAMETERS m.toListener
  48527. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  48528.    PUSH KEY CLEAR
  48529.    LOCAL m.lcRef
  48530.    SET MESSAGE TO ""
  48531.    THIS.SetNotifyCursor = (SET("Notify",2) = "ON")
  48532.    IF THIS.SetNotifyCursor
  48533.       SET NOTIFY CURSOR OFF
  48534.    ENDIF   
  48535.    THIS.OnEscapeCommand = ON("ESCAPE")   
  48536.    m.lcRef = SYS(2015)   
  48537.    PUBLIC &lcRef.   
  48538.    STORE m.toListener TO (m.lcRef)
  48539.    ON ESCAPE &lcRef..CancelReport()      
  48540.    THIS.EscapeReference = m.lcRef   
  48541.    THIS.SetEscape = (SET("ESCAPE")="OFF") 
  48542.    IF THIS.SetEscape
  48543.       SET ESCAPE ON
  48544.    ENDIF   
  48545. ENDIF   
  48546. ENDPROC
  48547. PROCEDURE popuserfeedbackglobalsets
  48548. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  48549.    LOCAL m.lcRef
  48550.    m.lcRef = THIS.EscapeReference
  48551.    IF (NOT EMPTY(m.lcRef)) AND ;
  48552.        TYPE(m.lcRef) = "O"
  48553.       * push occurred earlier
  48554.       STORE NULL TO (m.lcRef)
  48555.       RELEASE &lcRef.
  48556.       THIS.escapeReference = ""
  48557.       m.lcRef = THIS.OnEscapeCommand
  48558.       ON ESCAPE &lcRef
  48559.       POP KEY
  48560.       IF THIS.SetNotifyCursor
  48561.          SET NOTIFY CURSOR ON
  48562.       ENDIF   
  48563.       IF THIS.SetEscape 
  48564.          SET ESCAPE OFF
  48565.       ENDIF   
  48566.    ENDIF   
  48567. ENDIF   
  48568. ENDPROC
  48569. PROCEDURE synchuserinterface
  48570. #define CTLCOLOR_MSGBOX             0
  48571. #define CTLCOLOR_EDIT               1
  48572. #define CTLCOLOR_LISTBOX            2
  48573. #define CTLCOLOR_BTN                3
  48574. #define CTLCOLOR_DLG                4
  48575. #define CTLCOLOR_SCROLLBAR          5
  48576. #define CTLCOLOR_STATIC             6
  48577. #define CTLCOLOR_MAX                7
  48578. #define COLOR_SCROLLBAR             0
  48579. #define COLOR_BACKGROUND            1
  48580. #define COLOR_ACTIVECAPTION         2
  48581. #define COLOR_INACTIVECAPTION       3
  48582. #define COLOR_MENU                  4
  48583. #define COLOR_WINDOW                5
  48584. #define COLOR_WINDOWFRAME           6
  48585. #define COLOR_MENUTEXT              7
  48586. #define COLOR_WINDOWTEXT            8
  48587. #define COLOR_CAPTIONTEXT           9
  48588. #define COLOR_ACTIVEBORDER         10
  48589. #define COLOR_INACTIVEBORDER       11
  48590. #define COLOR_APPWORKSPACE         12
  48591. #define COLOR_HIGHLIGHT            13
  48592. #define COLOR_HIGHLIGHTTEXT        14
  48593. #define COLOR_BTNFACE              15
  48594. #define COLOR_BTNSHADOW            16
  48595. #define COLOR_GRAYTEXT             17
  48596. #define COLOR_BTNTEXT              18
  48597. #define COLOR_INACTIVECAPTIONTEXT  19
  48598. #define COLOR_BTNHIGHLIGHT         20
  48599. #if("4" $ OS())
  48600. #define COLOR_3DDKSHADOW           21
  48601. #define COLOR_3DLIGHT              22
  48602. #define COLOR_INFOTEXT             23
  48603. #define COLOR_INFOBK               24
  48604. #define COLOR_DESKTOP           COLOR_BACKGROUND
  48605. #define COLOR_3DFACE            COLOR_BTNFACE
  48606. #define COLOR_3DSHADOW          COLOR_BTNSHADOW
  48607. #define COLOR_3DHIGHLIGHT       COLOR_BTNHIGHLIGHT
  48608. #define COLOR_3DHILIGHT         COLOR_BTNHIGHLIGHT
  48609. #define COLOR_BTNHILIGHT        COLOR_BTNHIGHLIGHT
  48610. #endif
  48611. DECLARE INTEGER GetSysColor IN Win32API INTEGER  
  48612. LOCAL m.liThermTop, m.liThermLeft, m.liThermWidth, m.liThermHeight
  48613. WITH THIS
  48614.      .Height = .ThermFormHeight     
  48615.      .Width = .ThermFormWidth
  48616.      .ControlBox = .F.
  48617.      .Closable = .T.
  48618.      .Movable = .T.     
  48619.      m.liThermHeight = .Height - (.ThermMargin* 2)
  48620.      m.liThermWidth =  .Width - (.ThermMargin*2)
  48621.      .SetThermFormCaption()    
  48622.      m.liThermTop =  .ThermMargin
  48623.      m.liThermLeft = .ThermMargin  
  48624. ENDWITH
  48625. WITH THIS.ThermBack
  48626.    .Top = m.liThermTop     
  48627.    .Left = m.liThermLeft
  48628.    .Height = m.liThermHeight
  48629.    .Width = m.liThermWidth
  48630. ENDWITH
  48631. WITH THIS.ThermLabel
  48632.    .Top = (.Parent.Height - .Height) /2
  48633.    .ForeColor = GetSysColor( COLOR_MENUTEXT )
  48634. ENDWITH
  48635. WITH THIS.ThermShape
  48636.    .Top = m.liThermTop +1    
  48637.    .Left = m.liThermLeft+1
  48638.    .Height = m.liThermHeight -2
  48639.    .Width = 0
  48640.    .BackColor = .Parent.BackColor
  48641.    .FillColor = GetSysColor(COLOR_HIGHLIGHT)
  48642. ENDWITH
  48643. ENDPROC
  48644. PROCEDURE setupreport
  48645. LPARAMETERS m.toListener
  48646. LOCAL m.llFRXAvailable, m.lcAlias
  48647. THIS.isRunning = .T.
  48648. WITH m.toListener
  48649.    SET DATASESSION TO (.CurrentDataSession)
  48650.    THIS.DrivingAlias = UPPER(ALIAS())
  48651.    IF .FRXDataSession > 0
  48652.       SET DATASESSION TO (.FRXDataSession)   
  48653.    ENDIF
  48654.    m.llFRXAvailable = THIS.getReportScopeDriver(m.toListener) 
  48655.    IF m.llFRXAvailable
  48656.       THIS.setThermformCaption(m.toListener.CommandClauses.File, m.toListener.PrintJobName)
  48657.       IF TYPE("m.toListener.CommandClauses.Summary") # "L"
  48658.          ADDPROPERTY(.CommandClauses,"Summary",.F.)
  48659.       ENDIF   
  48660.       IF TYPE("m.toListener.CommandClauses.RecordTotal") # "N"
  48661.          ADDPROPERTY(.CommandClauses,"RecordTotal",0)
  48662.       ENDIF   
  48663.       IF TYPE("m.toListener.CommandClauses.NoDialog") # "L"
  48664.         ADDPROPERTY(.CommandClauses,"NoDialog",.F.)
  48665.       ENDIF      
  48666.       SET DATASESSION TO (.FRXDataSession)   
  48667.       THIS.FRXBandRecno = 0
  48668.       SELECT FRX
  48669.       IF .CommandClauses.Summary
  48670.          * don't use groups unless
  48671.          * we're forced to by Summary.
  48672.          * Group usage will not work if
  48673.          * there's a group on .T. or some
  48674.          * other nonsensical expression that
  48675.          * doesn't change.
  48676.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  48677.              Objcode = FRX_OBJCOD_GROUPHEADER AND ;
  48678.              Platform = FRX_PLATFORM_WINDOWS AND ;
  48679.              NOT DELETED()
  48680.          DO WHILE NOT EOF()
  48681.             * find the innermost group
  48682.             THIS.FRXBandRecno = RECNO()
  48683.             CONTINUE
  48684.          ENDDO        
  48685.       
  48686.          IF THIS.frxBandRecno = 0
  48687.             * no groups in a Summary report
  48688.             * doesn't make a lot of sense, but
  48689.             * can happen.
  48690.              LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  48691.                 Platform = FRX_PLATFORM_WINDOWS AND ;
  48692.                 Objcode = FRX_OBJCOD_PAGEHEADER AND ;
  48693.                 NOT DELETED()
  48694.              IF NOT EOF()
  48695.                 THIS.FRXBandRecno = RECNO()
  48696.              ENDIF     
  48697.          ENDIF
  48698.       ENDIF
  48699.       IF THIS.FRXBandRecno = 0
  48700.          * not a Summary report.
  48701.          * look for the appropriate detail
  48702.          * using the report driver
  48703.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  48704.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  48705.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  48706.                     TYPE(Expr) = "C" AND ; 
  48707.                     NOT (EMPTY(Expr) OR DELETED())
  48708.          DO WHILE NOT EOF()
  48709.              m.lcAlias = ALLTRIM(Expr)
  48710.              SET DATASESSION TO (.CurrentDataSession)             
  48711.              m.lcAlias = UPPER(EVALUATE(m.lcAlias))
  48712.              SET DATASESSION TO (.FRXDataSession)                          
  48713.              IF m.lcAlias == UPPER(THIS.DrivingAlias)             
  48714.                 THIS.FRXBandRecno = RECNO()
  48715.              ENDIF   
  48716.              CONTINUE && try not to use the first detail band
  48717.          ENDDO
  48718.       ENDIF   
  48719.       IF THIS.frxBandRecno = 0
  48720.          * couldn't match up a band with
  48721.          * the known driver
  48722.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  48723.               Objcode = FRX_OBJCOD_DETAIL AND ;
  48724.               Platform = FRX_PLATFORM_WINDOWS AND ;
  48725.               EMPTY(Expr) AND NOT DELETED()
  48726.          IF NOT EOF()
  48727.             THIS.FRXBandRecno = RECNO()      
  48728.          ELSE
  48729.             IF THIS.FRXBandRecno = 0 
  48730.                LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  48731.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  48732.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  48733.                     NOT DELETED()
  48734.                IF NOT EOF()
  48735.                   THIS.FRXBandRecno = RECNO()
  48736.                ENDIF  
  48737.             ENDIF               
  48738.          ENDIF        
  48739.       ENDIF   
  48740.    ENDIF
  48741.    THIS.DrivingAliasCurrentRecno = 0
  48742.    SET DATASESSION TO (.ListenerDataSession)   
  48743. ENDWITH   
  48744. ENDPROC
  48745. PROCEDURE thermprecision_assign
  48746. LPARAMETERS m.vNewVal
  48747. IF VARTYPE(m.vNewVal) = "N" 
  48748.    THIS.thermPrecision  = ABS(INT(m.vNewVal))
  48749. ENDIF 
  48750. ENDPROC
  48751. PROCEDURE persistbetweenruns_assign
  48752. LPARAMETERS vNewVal
  48753. IF VARTYPE(m.vNewVal) = "L"
  48754.    THIS.persistBetweenRuns = m.vNewVal
  48755. ENDIF   
  48756. ENDPROC
  48757. PROCEDURE Init
  48758. * THIS.Name = "X"+SYS(2015)
  48759. * WITH THIS
  48760. *     .InitStatusText = OUTPUTCLASS_INITSTATUS_LOC
  48761. *     .PrepassStatusText = OUTPUTCLASS_PREPSTATUS_LOC
  48762. *     .RunStatusText =  OUTPUTCLASS_RUNSTATUS_LOC
  48763. *     .SecondsText = OUTPUTCLASS_TIME_SECONDS_LOC
  48764. *     .thermCaption = OUTPUTCLASS_THERMCAPTION_LOC     
  48765. *     .resetUserFeedback()
  48766. * ENDWITH
  48767. This.AddProperty("CancelInstrText", "")
  48768. This.AddProperty("CancelQueryText", "")
  48769. This.AddProperty("ReportIncompleteText", "")
  48770. This.AddProperty("AttentionText", "")
  48771. THIS.Name = "X"+SYS(2015)
  48772. WITH THIS
  48773. *!*    #DEFINE OUTPUTCLASS_INITSTATUS_LOC           "Initializing... "
  48774. *!*    #DEFINE OUTPUTCLASS_PREPSTATUS_LOC           "Running calculation prepass... "
  48775. *!*    #DEFINE OUTPUTCLASS_RUNSTATUS_LOC            "Creating output... "
  48776. *!*    #DEFINE OUTPUTCLASS_TIME_SECONDS_LOC         "sec(s)"
  48777. *!*    #DEFINE OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC  "Press Esc to cancel... "
  48778. *!*    #DEFINE OUTPUTCLASS_REPORT_CANCELQUERY_LOC   "Stop report execution? (If you press 'No', report execution will continue.)"
  48779. *!*    #DEFINE OUTPUTCLASS_REPORT_INCOMPLETE_LOC    "Report execution was cancelled." + CHR(13) + ;
  48780.                                              "Your results are not complete."
  48781. #DEFINE OUTPUTCLASS_THERMCAPTION_LOC2        [m.cMessage+ " "+ ] + ;
  48782.             [TRANSFORM(THIS.PercentDone,"999"+ ] + ;
  48783.             [IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" ] + ;
  48784.             [+ IIF(NOT THIS.IncludeSeconds, "" , "   "+] + ;
  48785.             [TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-] + ;
  48786.             [THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  48787.     IF VARTYPE(_goHelper) = "O"
  48788.         .InitStatusText       = _goHelper.GetLoc("INITSTATUS") + SPACE(1)
  48789.         .PrepassStatusText    = _goHelper.GetLoc("PREPSTATUS") + SPACE(1) 
  48790.         .RunStatusText        = _goHelper.GetLoc("RUNSTATUS")  + SPACE(1) 
  48791.         .SecondsText          = _goHelper.GetLoc("SECONDS")    + SPACE(1)
  48792.         .CancelInstrText      = _goHelper.GetLoc("CANCELINST") + SPACE(1)
  48793.         .CancelQueryText      = _goHelper.GetLoc("CANCELQUER")
  48794.         .ReportIncompleteText = _goHelper.GetLoc("REPINCOMPL")
  48795.         .AttentionText        = _goHelper.GetLoc("ATTENTION")
  48796.     ELSE 
  48797.         .InitStatusText       = OUTPUTCLASS_INITSTATUS_LOC
  48798.         .PrepassStatusText    = OUTPUTCLASS_PREPSTATUS_LOC
  48799.         .RunStatusText        = OUTPUTCLASS_RUNSTATUS_LOC
  48800.         .SecondsText          = OUTPUTCLASS_TIME_SECONDS_LOC
  48801.         .CancelInstrText      = OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  48802.         .CancelQueryText      = OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  48803.         .ReportIncompleteText = OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  48804.         .AttentionText        = "Attention"
  48805.      ENDIF 
  48806.     .thermCaption      = OUTPUTCLASS_THERMCAPTION_LOC2    && Keep original 
  48807.     .resetUserFeedback()
  48808. ENDWITH
  48809. ENDPROC
  48810. PROCEDURE Load
  48811.             
  48812. ENDPROC
  48813. <?xml version="1.0"?>
  48814. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  48815.   <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"/>
  48816.   <xsl:param name="externalFileLocation"/>
  48817.   <!--select="'./whatever/'" or 'http://something/myimages/' or "'./'" or... -->
  48818.   <xsl:param name="copyImageFiles" select="0"/>
  48819.   <xsl:param name="generalFieldDPI" select="96"/>
  48820.   <xsl:param name="fillPatternShade" select="180*3"/>
  48821.   <xsl:param name="fillPatternOffset" select="128"/>
  48822.   <xsl:param name="numberPrecision" select="5"/>
  48823.   <xsl:param name="fieldAlphaOpacityOffset" select="75"/>
  48824.   <xsl:param name="fieldAlphaOpacityShade" select="180*3"/>
  48825.   <xsl:param name="useTextAreaForStretchingText" select="1"/>
  48826.   <xsl:param name="hideScrollbarsForTextAreas" select="0"/>
  48827.   <xsl:param name="PageTitlePrefix_LOC" select="''"/>
  48828. <!--    <xsl:param name="unpagedModeIncludesOnePageHeader" select="0"/> -->
  48829.   <xsl:param name="unpagedModeIncludesTitle" select="1"/>
  48830.   <xsl:param name="noBody" select="0"/>
  48831.   <xsl:param name="useDynamicTextAttributes" select="1"/>
  48832.   <xsl:param name="anchorAttrName" select="1"/>   
  48833.   <!-- id is theoretically better if you wanted to write
  48834.    script against this element, or in case name is 
  48835.    deprecated in a future version of the standard, 
  48836.    but a value of 1 forces name to be used instead. 
  48837.    Current-newer browsers will be okay with this, and older 
  48838.    browsers might prefer it. -->
  48839.   <xsl:variable name="FRUs" select="10000"/>
  48840.   <xsl:variable name="printDPI" select="960"/>
  48841.   <xsl:variable name="FRUsInPixelsat96DPI" select="104.167"/>
  48842.   <xsl:variable name="imagePixelRatio" select="$generalFieldDPI div $printDPI"/>
  48843.   <xsl:variable name="zeros" select="substring('0000000000000000000000000',1,$numberPrecision)"/>
  48844.   <xsl:variable name="thisPageHeight">
  48845.     <xsl:value-of select="number(/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@pageheight  div $printDPI)"/>
  48846.   </xsl:variable>
  48847.   <xsl:variable name="lineNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=6]/name"/>
  48848.   <xsl:variable name="labelNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=5]/name"/>
  48849.   <xsl:variable name="fieldNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=8]/name"/>
  48850.   <xsl:variable name="shapeNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=7]/name"/>
  48851.   <xsl:variable name="pictureNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=17]/name"/>
  48852.   <xsl:variable name="detailNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=4]/name"/>
  48853.   <xsl:variable name="detailHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=9]/name"/>
  48854.   <xsl:variable name="detailFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=10]/name"/>
  48855.   <xsl:variable name="pageHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=1]/name"/>
  48856.   <xsl:variable name="pageFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=7]/name"/>
  48857.   <xsl:variable name="columnHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=2]/name"/>
  48858.   <xsl:variable name="columnFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=6]/name"/>
  48859.   <xsl:variable name="groupHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=3]/name"/>
  48860.   <xsl:variable name="groupFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=5]/name"/>
  48861.   <xsl:variable name="titleNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=0]/name"/>
  48862.   <xsl:variable name="summaryNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=8]/name"/>
  48863.   <xsl:variable name="anchorAttr">
  48864.   <xsl:choose>
  48865.   <xsl:when test="$anchorAttrName=1">name</xsl:when>
  48866.   <xsl:otherwise>id</xsl:otherwise>
  48867.   </xsl:choose> 
  48868.   </xsl:variable>
  48869.   <xsl:key name="Layout" match="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[platform='WINDOWS']" use="concat(frxrecno,../../@id)"/>
  48870.   <xsl:template match="/">
  48871.       <xsl:choose>
  48872.         <xsl:when test="number($noBody)=1">
  48873.         <div>
  48874.          <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"/>        
  48875.           <xsl:call-template name="renderStyles"/>
  48876.           <xsl:call-template name="body"/>
  48877.          </div>
  48878.         </xsl:when>
  48879.         <xsl:otherwise>
  48880.           <xsl:apply-templates select="/" mode="full"/>
  48881.         </xsl:otherwise>
  48882.       </xsl:choose>
  48883.   </xsl:template>
  48884.   <xsl:template match="/" mode="full">
  48885.     <html>
  48886.        <xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  48887.        <xsl:attribute name="dir">rtl</xsl:attribute>
  48888.        </xsl:if>
  48889.       <head>
  48890.         <meta  http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  48891. <xsl:comment> 
  48892. the above repeated-explicit declaration is necessary because 
  48893. some versions of MSXML xslt processing don't include the 
  48894. charset as required by the XSLT standard when method="html".  
  48895. Explicitly including the META creates a doubled meta content-type tag, 
  48896. but we do need the encoding to be specified properly and the doubled tag is okay. 
  48897. </xsl:comment>
  48898.         <meta name="description" 
  48899. content="{/Reports/VFP-Report[1]/Run/property[@id='description']/.}"/>
  48900.         <meta name="author" 
  48901. content="{/Reports/VFP-Report[1]/Run/property[@id='author']/.}"/>
  48902.         <meta name="copyright" 
  48903. content="{/Reports/VFP-Report[1]/Run/property[@id='copyright']/.}"/>
  48904.         <meta name="date" 
  48905. content="{/Reports/VFP-Report[1]/Run/property[@id='date']/.}"/>
  48906.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='keywords']">
  48907.         <meta name="keywords">
  48908.         <xsl:attribute name="content">
  48909.          <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='keywords']">
  48910.          <xsl:value-of select="."/><xsl:if test="not(position()=last())">,</xsl:if>
  48911.         </xsl:for-each>
  48912.         </xsl:attribute>
  48913.         </meta> 
  48914.         </xsl:if>
  48915.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='http-equiv']">
  48916.             <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='http-equiv']//meta">
  48917.           <xsl:variable name="thisMeta" select="concat(ancestor-or-self::*[@id='http-equiv']/@id ,'.',@name)"/>
  48918.           <!-- the extra Run nodes being looked up are potentially evaluated, not original values of the property, 
  48919.           so we can account for expressions -->
  48920.           <meta  http-equiv="{@name}" content="{/Reports/VFP-Report/Run/property[@id=$thisMeta]}"/>
  48921.           </xsl:for-each>
  48922.         </xsl:if>
  48923.         <title>
  48924.           <xsl:choose>
  48925.           <xsl:when test="/Reports/VFP-Report[1]/Run/property[@id='title']">
  48926.             <xsl:value-of select="/Reports/VFP-Report[1]/Run/property[@id='title']/."/>
  48927.           </xsl:when>
  48928.           <xsl:otherwise>
  48929.             <!-- default/VFP 9.0 RTM handling -->
  48930.              <xsl:value-of select="$PageTitlePrefix_LOC"/>
  48931.              <xsl:if test="string-length(/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name) = 0">
  48932.                <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/@id"/>
  48933.              </xsl:if>
  48934.              <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name"/>
  48935.           </xsl:otherwise>
  48936.           </xsl:choose>
  48937.         </title>
  48938.         <xsl:call-template name="renderStyles"/>
  48939.       </head>
  48940.       <body>
  48941.         <xsl:call-template name="body"/>
  48942.       </body>
  48943.     </html>
  48944.   </xsl:template>
  48945.   <xsl:template name="renderStyles">
  48946.      <xsl:call-template name="DocumentStyles"/>
  48947.     <xsl:for-each select="/Reports/VFP-Report">
  48948.       <xsl:call-template name="Styles">
  48949.         <xsl:with-param name="thisReport" select="position()"/>
  48950.         <xsl:with-param name="thisReportID" select="./VFP-RDL/@id"/>
  48951.       </xsl:call-template>
  48952.       <!--        <xsl:call-template name="Script"/> avoid security problems: no script, not even a lone comment indicating TBD -->
  48953.     </xsl:for-each>
  48954.   </xsl:template>
  48955.   <xsl:template name="body">
  48956.     <xsl:for-each select="/Reports/VFP-Report">
  48957.       <xsl:variable name="thisReport" select="position()"/>
  48958.       <xsl:variable name="thisReportID" select="./VFP-RDL/@id"/>
  48959.       <xsl:variable name="thisReportRangeFrom" select="number(./VFP-RDL/VFPDataSet/VFPFRXCommand/@RANGEFROM)"/>
  48960.       <xsl:variable name="separateTitlePage" select="./Data/*[name()=$titleNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='true']"/>
  48961.       <xsl:variable name="separateSummaryPage" select="./Data/*[name()=$summaryNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='8' and pagebreak='true' and ejectbefor='false']"/>
  48962.       <xsl:variable name="reportPages" select="count(./Data/*[(name()=$pageHeaderNodeName) or (name()=$titleNodeName and $separateTitlePage=true()) or  (name()=$summaryNodeName and $separateSummaryPage=true())])"/>
  48963.       <div>
  48964.         <xsl:if test="number($noBody)=1">
  48965.           <xsl:attribute name="style">
  48966.                position=relative;height=<xsl:value-of select="$reportPages * $thisPageHeight"/>in;
  48967.                </xsl:attribute>
  48968.         </xsl:if>
  48969.         <xsl:choose>
  48970.           <xsl:when test="./Data/*[name() = $pageHeaderNodeName]">
  48971.             <xsl:if test="$separateTitlePage">
  48972.               <xsl:apply-templates select="./Data/*[name()=$titleNodeName]" mode="titlesummarypage">
  48973.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  48974.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  48975.               </xsl:apply-templates>
  48976.             </xsl:if>
  48977.             <xsl:apply-templates select="./Data/*[name()=$pageHeaderNodeName]" mode="page">
  48978.               <xsl:with-param name="thisReport" select="$thisReport"/>
  48979.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  48980.               <xsl:with-param name="thisReportRangeFrom" select="$thisReportRangeFrom"/>
  48981.             </xsl:apply-templates>
  48982.             <xsl:if test="$separateSummaryPage">
  48983.               <xsl:apply-templates select="./Data/*[name()=$summaryNodeName]" mode="titlesummarypage">
  48984.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  48985.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  48986.               </xsl:apply-templates>
  48987.             </xsl:if>
  48988.           </xsl:when>
  48989.           <xsl:otherwise>
  48990.             <!-- unpaginated-->
  48991.             <xsl:variable name="thisPageHeaderHeight" select="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height  div $FRUs"/>
  48992.             <xsl:variable name="thisReportPageHeight" select="number($thisPageHeight - ( $thisPageHeaderHeight +  (/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Footer'][1]/height div $FRUs)) )"/>
  48993.             <xsl:if test="./Data/Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  48994.               <!-- show the contents of the first page header -->
  48995.               <xsl:apply-templates mode="formattingBand" select="./Data/Pages/*[@idref = /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/frxrecno][1]">
  48996.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  48997.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  48998.                 <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  48999.                 <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  49000.               </xsl:apply-templates>
  49001.             </xsl:if>
  49002.             
  49003.             <!-- the @id criteria below leaves out the Pages and Columns collections, if any -->
  49004.             <!-- 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 -->
  49005.             <xsl:apply-templates select="./Data/*[@idref and ($unpagedModeIncludesTitle=1 or not(name() = $titleNodeName))]" mode="unpagedBand">
  49006.               <xsl:with-param name="thisReport" select="$thisReport"/>
  49007.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49008.               <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  49009.               <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  49010.               <xsl:with-param name="thisPageHeaderHeight" select="$thisPageHeaderHeight"/>
  49011.             </xsl:apply-templates>
  49012.           </xsl:otherwise>
  49013.         </xsl:choose>
  49014.       </div>
  49015.     </xsl:for-each>
  49016.   </xsl:template>
  49017.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="titlesummarypage">
  49018.     <xsl:param name="thisReport" select="1"/>
  49019.     <xsl:param name="thisReportID"/>
  49020.     <xsl:param name="thisReportRangeFrom" select="1"/>
  49021.     <xsl:variable name="thisBand" select="@id"/>
  49022.     <div>
  49023.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * (number( ./@idref) -$thisReportRangeFrom)"/>in; position:absolute; </xsl:attribute>
  49024.       <xsl:apply-templates select="." mode="band">
  49025.         <xsl:with-param name="thisReport" select="$thisReport"/>
  49026.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49027.       </xsl:apply-templates>
  49028.       <xsl:if test="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[frxrecno=$thisBand and ejectafter='true']">
  49029.         <!-- page footer for this summary page -->
  49030.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$pageFooterNodeName][position()=last()]" mode="band">
  49031.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49032.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49033.         </xsl:apply-templates>
  49034.       </xsl:if>
  49035.     </div>
  49036.   </xsl:template>
  49037.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="page">
  49038.     <xsl:param name="thisReport" select="1"/>
  49039.     <xsl:param name="thisReportID"/>
  49040.     <xsl:param name="thisReportRangeFrom" select="1"/>
  49041.     <xsl:variable name="thisPage" select="@id"/>
  49042.     <div>
  49043.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * ($thisPage -$thisReportRangeFrom)"/>in;position:absolute; </xsl:attribute>
  49044.       <xsl:apply-templates select="." mode="band">
  49045.         <xsl:with-param name="thisReport" select="$thisReport"/>
  49046.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49047.       </xsl:apply-templates>
  49048.       <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']">
  49049.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName]" mode="band">
  49050.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49051.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49052.         </xsl:apply-templates>
  49053.       </xsl:if>
  49054.       <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">
  49055.         <xsl:with-param name="thisReport" select="$thisReport"/>
  49056.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49057.       </xsl:apply-templates>
  49058.     </div>
  49059.   </xsl:template>
  49060.   <xsl:template match="/Reports/VFP-Report/Data/Pages/*" mode="formattingBand">
  49061.     <xsl:param name="thisReport" select="1"/>
  49062.     <xsl:param name="thisReportID"/>
  49063.     <xsl:param name="thisPageHeight"/>
  49064.     <xsl:param name="thisReportPageHeight"/>
  49065.     <xsl:variable name="thisPage" select="@id"/>
  49066.     <xsl:variable name="thisPageRenderOffset" select="(($thisPage - 1) * $thisReportPageHeight)  + sum((/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/height) ) "/>
  49067.     <xsl:for-each select="./*">
  49068.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  49069.       <xsl:call-template name="Render">
  49070.         <xsl:with-param name="thisID" select="$thisID"/>
  49071.         <xsl:with-param name="thisZ" select="position()"/>
  49072.         <xsl:with-param name="thisPage" select="../@idref"/>
  49073.         <xsl:with-param name="thisReport" select="$thisReport"/>
  49074.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49075.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  49076.       </xsl:call-template>
  49077.     </xsl:for-each>
  49078.   </xsl:template>
  49079.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="unpagedBand">
  49080.       <xsl:param name="thisReport" select="1"/>
  49081.     <xsl:param name="thisReportID"/>
  49082.     <xsl:param name="thisPageHeight"/>
  49083.     <xsl:param name="thisReportPageHeight"/>
  49084.     <xsl:param name="thisPageHeaderHeight"/>
  49085.     <xsl:variable name="thisPage" select="@idref"/>
  49086.     <xsl:variable name="thisPageRenderOffset">
  49087.       <xsl:choose>
  49088.         <xsl:when test="../Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  49089.           <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 "/>
  49090.         </xsl:when>
  49091.         <xsl:otherwise>
  49092.           <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) -($thisPageHeaderHeight*$thisPage)  "/>
  49093.         </xsl:otherwise>
  49094.       </xsl:choose>
  49095.     </xsl:variable>
  49096.     <xsl:call-template name="addAnchor"/>
  49097.     <xsl:for-each select="./*">
  49098.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  49099.       <xsl:call-template name="Render">
  49100.         <xsl:with-param name="thisID" select="$thisID"/>
  49101.         <xsl:with-param name="thisZ" select="position()"/>
  49102.         <xsl:with-param name="thisPage" select="../@idref"/>
  49103.         <xsl:with-param name="thisReport" select="$thisReport"/>
  49104.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49105.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  49106.       </xsl:call-template>
  49107.     </xsl:for-each>
  49108.   </xsl:template>
  49109.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="band">
  49110.     <xsl:param name="thisReport" select="1"/>
  49111.     <xsl:param name="thisReportID"/>
  49112.     <xsl:call-template name="addAnchor"/>
  49113.     <xsl:for-each select="./*">
  49114.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  49115.       <!--        <xsl:if test="key('Layout',concat($thisID, $thisReportID))/vpos > key('Layout',preceding-sibling::*/concat(@id,$thisReportID))/vpos"><div style="position=absolute;"/></xsl:if>  -->
  49116.       <xsl:call-template name="Render">
  49117.         <xsl:with-param name="thisID" select="$thisID"/>
  49118.         <xsl:with-param name="thisZ" select="position()"/>
  49119.         <xsl:with-param name="thisPage" select="../@idref"/>
  49120.         <xsl:with-param name="thisReport" select="$thisReport"/>
  49121.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49122.       </xsl:call-template>
  49123.     </xsl:for-each>
  49124.   </xsl:template>
  49125.   <xsl:template name="Render">
  49126.     <xsl:param name="thisID"/>
  49127.     <xsl:param name="thisZ"/>
  49128.     <xsl:param name="thisPage"/>
  49129.     <xsl:param name="thisReport" select="1"/>
  49130.     <xsl:param name="thisReportID" select="1"/>
  49131.     <xsl:param name="topOffset" select="0"/>
  49132.     <xsl:call-template name="addAnchor"/>
  49133.     <xsl:choose>
  49134.       <xsl:when test="name()=$lineNodeName and key('Layout',concat($thisID, $thisReportID))/height <  key('Layout',concat($thisID, $thisReportID))/width">
  49135.         <hr>
  49136.           <xsl:call-template name="addClassAttribute">
  49137.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/>
  49138.         </xsl:call-template>
  49139.         <xsl:call-template name="addTitleAttribute"/>
  49140.           <xsl:call-template name="addStyleAttribute">
  49141.             <xsl:with-param name="topOffset" select="$topOffset"/>
  49142.             <xsl:with-param name="thisZ" select="$thisZ"/>
  49143.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49144.            <xsl:with-param name="thisID" select="$thisID"/>
  49145.            <xsl:with-param name="styleType" select="'HR'"/>
  49146.           </xsl:call-template>
  49147.         </hr>
  49148.       </xsl:when>
  49149.       <xsl:when test="name()=$lineNodeName">
  49150.         <!-- vertical line -->
  49151.         <span>
  49152.           <xsl:call-template name="addClassAttribute">
  49153.             <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  49154.         </xsl:call-template>
  49155.           <xsl:call-template name="addTitleAttribute"/>
  49156.           <xsl:call-template name="addStyleAttribute">
  49157.             <xsl:with-param name="topOffset" select="$topOffset"/>
  49158.             <xsl:with-param name="thisZ" select="$thisZ"/>
  49159.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49160.            <xsl:with-param name="thisID" select="$thisID"/>
  49161.               <xsl:with-param name="styleType" select="'VR'"/>
  49162.           </xsl:call-template>
  49163.         </span>
  49164.       </xsl:when>
  49165.       <xsl:when test="$useTextAreaForStretchingText=1 and string-length(@hlink) = 0  and name()=$fieldNodeName and key('Layout',concat($thisID, $thisReportID))[stretch='true']">
  49166.         <textarea readonly="readonly" rows="0" cols="0">
  49167.           <xsl:call-template name="addClassAttribute">
  49168.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  49169.         </xsl:call-template>
  49170.           <xsl:call-template name="addTitleAttribute"/>
  49171.           <xsl:call-template name="addStyleAttribute">
  49172.             <xsl:with-param name="topOffset" select="$topOffset"/>
  49173.             <xsl:with-param name="thisZ" select="$thisZ"/>
  49174.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49175.           <xsl:with-param name="thisID" select="$thisID"/>
  49176.           <xsl:with-param name="styleType" select="'TextArea'"/>
  49177.           </xsl:call-template>
  49178.           <xsl:value-of select="."/>
  49179.         </textarea>
  49180.       </xsl:when>
  49181.       <xsl:otherwise>
  49182.         <div>
  49183.            <xsl:choose>
  49184.              <xsl:when test="@c=1">
  49185.                 <xsl:call-template name="addClassAttribute">
  49186.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'T')"/> 
  49187.                 </xsl:call-template>
  49188.              </xsl:when>
  49189.              <xsl:when test="@c=2">
  49190.                 <xsl:call-template name="addClassAttribute">
  49191.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'M')"/> 
  49192.                 </xsl:call-template>
  49193.              </xsl:when>
  49194.              <xsl:when test="@c=3">
  49195.                 <xsl:call-template name="addClassAttribute">
  49196.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'B')"/> 
  49197.                 </xsl:call-template>
  49198.              </xsl:when>
  49199.              <xsl:otherwise>
  49200.                 <xsl:call-template name="addClassAttribute">
  49201.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  49202.                 </xsl:call-template>
  49203.              </xsl:otherwise>
  49204.            </xsl:choose>
  49205.           <xsl:call-template name="addTitleAttribute"/>
  49206.           <xsl:call-template name="addStyleAttribute">
  49207.             <xsl:with-param name="topOffset" select="$topOffset"/>
  49208.             <xsl:with-param name="thisZ" select="$thisZ"/>
  49209.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49210.           <xsl:with-param name="thisID" select="$thisID"/>
  49211.           <xsl:with-param name="styleType" select="'Div'"/>
  49212.           </xsl:call-template>
  49213.           <xsl:choose>
  49214.             <xsl:when test="name()=$shapeNodeName or name()=$lineNodeName">
  49215.               <!-- nothing -->
  49216.             </xsl:when>
  49217.             <xsl:when test="name()=$pictureNodeName and string-length(@hlink) > 0">
  49218.               <a href="{@hlink}">
  49219.                 <xsl:call-template name="renderPicture">
  49220.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49221.             <xsl:with-param name="thisID" select="$thisID"/>
  49222.                 </xsl:call-template>
  49223.               </a>
  49224.             </xsl:when>
  49225.             <xsl:when test="name()=$pictureNodeName and string-length(@PLINK) > 0">
  49226.               <a href="{translate(@PLINK,'\','/')}"  target="blank">
  49227.                 <xsl:call-template name="renderPicture">
  49228.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49229.             <xsl:with-param name="thisID" select="$thisID"/>
  49230.                 </xsl:call-template>
  49231.               </a>
  49232.             </xsl:when>
  49233.             <xsl:when test="name()=$pictureNodeName">
  49234.               <xsl:call-template name="renderPicture">
  49235.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49236.             <xsl:with-param name="thisID" select="$thisID"/>
  49237.               </xsl:call-template>
  49238.             </xsl:when>
  49239.             <xsl:when test="string-length(@hlink) > 0">
  49240.               <a href="{@hlink}">
  49241.                 <xsl:call-template name="replaceText"/>
  49242.               </a>
  49243.             </xsl:when>
  49244.             <xsl:when test="string-length(@PLINK) > 0">
  49245.               <a href="{translate(@PLINK,'\','/')}" target="blank">
  49246.                 <xsl:call-template name="replaceText"/>
  49247.               </a>
  49248.             </xsl:when>
  49249.             <xsl:otherwise>
  49250.               <xsl:call-template name="replaceText"/>
  49251.             </xsl:otherwise>
  49252.           </xsl:choose>
  49253.         </div>
  49254.       </xsl:otherwise>
  49255.     </xsl:choose>
  49256.     <!-- /xsl:if -->
  49257.   </xsl:template>
  49258.   <xsl:template name="getCSSName">
  49259.   <xsl:param name="thisReport" select="1"/>
  49260.   <xsl:param name="thisItem" select="0"/>
  49261.   <xsl:param name="itemType" select="''"/>
  49262.   <xsl:param name="firstPass" select="1"/>
  49263.   <xsl:variable name="subst" select="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$thisItem]/@css"/>
  49264.     <xsl:choose>
  49265.      <xsl:when test="number($firstPass)=1 or string-length($subst) = 0"><xsl:value-of select="concat('.FRX',$thisReport,'_',$thisItem,$itemType)"/></xsl:when>
  49266.      <xsl:otherwise>.<xsl:value-of select="$subst"/></xsl:otherwise>
  49267.      </xsl:choose>
  49268.   </xsl:template>
  49269.   <xsl:template match="VFPFRXLayoutObject" mode="imagestyles">
  49270.     <xsl:param name="thisReport" select="1"/>
  49271.     <xsl:param name="firstPass" select="1"/>
  49272.      <xsl:call-template name="getCSSName">
  49273.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49274.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49275.      <xsl:with-param name="firstPass" select="$firstPass"/>
  49276.      </xsl:call-template>{
  49277.   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;
  49278.   <!-- <xsl:if test="offset=0">
  49279. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  49280. </xsl:if>
  49281. <xsl:if test="offset=2">
  49282. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  49283. </xsl:if> -->
  49284.  </xsl:template>
  49285.   <xsl:template match="VFPFRXLayoutObject" mode="shapestyles">
  49286.    <xsl:param name="thisReport" select="1"/>
  49287.    <xsl:param name="firstPass" select="1"/>
  49288.      <xsl:call-template name="getCSSName">
  49289.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49290.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49291.      <xsl:with-param name="firstPass" select="$firstPass"/>
  49292.      </xsl:call-template>{
  49293.        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;
  49294.       }
  49295.       <!--    <xsl:if test="stretch='true'">
  49296. overflow: auto;
  49297.    </xsl:if> -->
  49298.   </xsl:template>
  49299.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesT">
  49300.     <xsl:param name="thisReport" select="1"/>
  49301.    <xsl:param name="firstPass" select="1"/>
  49302.      <xsl:call-template name="getCSSName">
  49303.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49304.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49305.      <xsl:with-param name="itemType" select="'T'"/>
  49306.      <xsl:with-param name="firstPass" select="$firstPass"/>
  49307.      </xsl:call-template>{
  49308.    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;
  49309.       }
  49310.       <!--    <xsl:if test="stretch='true'">
  49311. overflow: auto;
  49312.    </xsl:if> -->
  49313.   </xsl:template>
  49314.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesM">
  49315.     <xsl:param name="thisReport" select="1"/>
  49316.    <xsl:param name="firstPass" select="1"/>
  49317.      <xsl:call-template name="getCSSName">
  49318.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49319.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49320.      <xsl:with-param name="itemType" select="'M'"/>
  49321.      <xsl:with-param name="firstPass" select="$firstPass"/>
  49322.      </xsl:call-template>{
  49323.    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;
  49324.       }
  49325.       <!--    <xsl:if test="stretch='true'">
  49326. overflow: auto;
  49327.    </xsl:if> -->
  49328.   </xsl:template>
  49329.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesB">
  49330.     <xsl:param name="thisReport" select="1"/>
  49331.    <xsl:param name="firstPass" select="1"/>
  49332.      <xsl:call-template name="getCSSName">
  49333.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49334.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49335.      <xsl:with-param name="itemType" select="'B'"/>
  49336.      <xsl:with-param name="firstPass" select="$firstPass"/>
  49337.      </xsl:call-template>{
  49338.    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;
  49339.       }
  49340.       <!--    <xsl:if test="stretch='true'">
  49341. overflow: auto;
  49342.    </xsl:if> -->
  49343.   </xsl:template>
  49344.   <xsl:template match="VFPFRXLayoutObject" mode="textstyles">
  49345.     <xsl:param name="thisReport" select="1"/>
  49346.     <xsl:param name="firstPass" select="1"/>
  49347.      <xsl:call-template name="getCSSName">
  49348.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49349.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49350.      <xsl:with-param name="firstPass" select="$firstPass"/>
  49351.      </xsl:call-template>{
  49352.   <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>
  49353.       <xsl:when test="mode mod 2 = 1">background-color:transparent;</xsl:when>
  49354.       <xsl:otherwise>background-color: <xsl:call-template name="fillcolor"/>;</xsl:otherwise>
  49355.     </xsl:choose><xsl:choose>
  49356.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1 and $hideScrollbarsForTextAreas=1"> overflow:hidden;margin-top:4px;</xsl:when>
  49357.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1"> overflow: auto;margin-top:4px;</xsl:when>
  49358.       <xsl:otherwise>overflow:hidden;</xsl:otherwise>
  49359.     </xsl:choose> position: absolute;
  49360.    }   
  49361.     <!-- tbd, make vertical-align more dynamic -->  
  49362.   </xsl:template>
  49363.   <xsl:template match="VFPFRXLayoutObject" mode="linestyles">
  49364.     <xsl:param name="thisReport" select="1"/>
  49365.    <xsl:param name="firstPass" select="1"/>
  49366.      <xsl:call-template name="getCSSName">
  49367.      <xsl:with-param name="thisReport" select="$thisReport"/>
  49368.      <xsl:with-param name="thisItem" select="frxrecno"/>
  49369.       <xsl:with-param name="firstPass" select="$firstPass"/>
  49370.      </xsl:call-template>{
  49371.    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;
  49372.       <xsl:choose>
  49373.       <xsl:when test="height < width"> width: <xsl:value-of select="width div $FRUs"/>in;
  49374.   height: <xsl:value-of select="floor(height div $FRUsInPixelsat96DPI)"/>px; margin: 0px;</xsl:when>
  49375.       <xsl:otherwise>  height: <xsl:value-of select="height div $FRUs"/>in;
  49376.   width: <xsl:value-of select="floor(width div $FRUsInPixelsat96DPI)"/>px;  </xsl:otherwise>
  49377.     </xsl:choose>
  49378.   </xsl:template>
  49379.   <xsl:template name="pattern">
  49380.     <xsl:choose>
  49381.       <xsl:when test="penpat=0"> none </xsl:when>
  49382.       <xsl:when test="penpat=1"> dotted </xsl:when>
  49383.       <xsl:when test="penpat=2"> dashed </xsl:when>
  49384.       <xsl:otherwise> solid </xsl:otherwise>
  49385.     </xsl:choose>
  49386.   </xsl:template>
  49387.   <xsl:template name="pencolor">#<xsl:call-template name="getHexColorValue">
  49388.       <xsl:with-param name="theNumber" select="penred"/>
  49389.     </xsl:call-template>
  49390.     <xsl:call-template name="getHexColorValue">
  49391.       <xsl:with-param name="theNumber" select="pengreen"/>
  49392.     </xsl:call-template>
  49393.     <xsl:call-template name="getHexColorValue">
  49394.       <xsl:with-param name="theNumber" select="penblue"/>
  49395.     </xsl:call-template>
  49396.   </xsl:template>
  49397.   <xsl:template name="fillcolor">#<xsl:call-template name="getHexColorValue">
  49398.       <xsl:with-param name="theNumber" select="fillred"/>
  49399.       <xsl:with-param name="fill" select="1"/>
  49400.     </xsl:call-template>
  49401.     <xsl:call-template name="getHexColorValue">
  49402.       <xsl:with-param name="theNumber" select="fillgreen"/>
  49403.       <xsl:with-param name="fill" select="1"/>
  49404.     </xsl:call-template>
  49405.     <xsl:call-template name="getHexColorValue">
  49406.       <xsl:with-param name="theNumber" select="fillblue"/>
  49407.       <xsl:with-param name="fill" select="1"/>
  49408.     </xsl:call-template>
  49409.   </xsl:template>
  49410.   <xsl:template name="getFontAttributes">
  49411.     <xsl:param name="theStyles" select="0"/>
  49412.     <xsl:choose>
  49413.       <xsl:when test="fontbold='true'">font-weight: bold;</xsl:when>
  49414.       <xsl:otherwise>font-weight: normal;</xsl:otherwise>
  49415.     </xsl:choose>
  49416.     <xsl:if test="fontstrikethrough='true' or fontunderline='true'">text-decoration: <xsl:if test="fontstrikethrough='true'">line-through </xsl:if>
  49417.       <xsl:if test="fontunderline='true'">underline</xsl:if>;</xsl:if>
  49418.     <xsl:if test="fontitalic='true'">font-style: italic;</xsl:if>
  49419.   </xsl:template>
  49420.   <xsl:template name="getHexColorValue">
  49421.     <xsl:param name="theNumber" select="-1"/>
  49422.     <xsl:param name="fill" select="0"/>
  49423.     <xsl:variable name="useNumber">
  49424.       <xsl:choose>
  49425.         <xsl:when test="$fill=1 and fillpat > 1 and ((fillred+fillblue+fillgreen) < $fillPatternShade)">
  49426.           <xsl:choose>
  49427.             <xsl:when test="($fillPatternOffset + $theNumber) > 254">255</xsl:when>
  49428.             <xsl:otherwise>
  49429.               <xsl:value-of select="$fillPatternOffset + $theNumber"/>
  49430.             </xsl:otherwise>
  49431.           </xsl:choose>
  49432.         </xsl:when>
  49433.         <xsl:otherwise>
  49434.           <xsl:value-of select="$theNumber"/>
  49435.         </xsl:otherwise>
  49436.       </xsl:choose>
  49437.     </xsl:variable>
  49438.     <xsl:choose>
  49439.       <xsl:when test="$useNumber=-1 and $fill=1">FF</xsl:when>
  49440.       <xsl:when test="$useNumber=-1">00</xsl:when>
  49441.       <xsl:otherwise>
  49442.         <xsl:call-template name="getHexForNumber">
  49443.           <xsl:with-param name="theNumber" select="floor($useNumber div 16)"/>
  49444.         </xsl:call-template>
  49445.         <xsl:call-template name="getHexForNumber">
  49446.           <xsl:with-param name="theNumber" select="round($useNumber mod 16)"/>
  49447.         </xsl:call-template>
  49448.       </xsl:otherwise>
  49449.     </xsl:choose>
  49450.   </xsl:template>
  49451.   <xsl:template name="setPrecision">
  49452.     <xsl:param name="theNumber" select="-1"/>
  49453.     <xsl:choose>
  49454.       <xsl:when test="$numberPrecision = -1 or not(contains(string($theNumber),'.'))">
  49455.         <xsl:value-of select="$theNumber"/>
  49456.       </xsl:when>
  49457.       <xsl:when test="$numberPrecision > 0">
  49458.         <!--        <xsl:value-of select="concat(string(floor($theNumber)),'.',substring(substring-after(string($theNumber),'.'),1,$numberPrecision))"/>  -->
  49459.         <xsl:value-of select="format-number($theNumber,concat('##0.',$zeros))"/>
  49460.       </xsl:when>
  49461.       <xsl:when test="$numberPrecision=0">
  49462.         <xsl:value-of select="round($theNumber)"/>
  49463.       </xsl:when>
  49464.       <xsl:otherwise>
  49465.         <!-- shouldn't happen-->
  49466.         <xsl:value-of select="$theNumber"/>
  49467.       </xsl:otherwise>
  49468.     </xsl:choose>
  49469.   </xsl:template>
  49470.   <xsl:template name="getHexForNumber">
  49471.     <xsl:param name="theNumber" select="-1"/>
  49472.     <xsl:choose>
  49473.       <xsl:when test="$theNumber=-1">00</xsl:when>
  49474.       <xsl:when test="$theNumber < 10">
  49475.         <xsl:value-of select="$theNumber"/>
  49476.       </xsl:when>
  49477.       <xsl:when test="$theNumber = 10">A</xsl:when>
  49478.       <xsl:when test="$theNumber = 11">B</xsl:when>
  49479.       <xsl:when test="$theNumber = 12">C</xsl:when>
  49480.       <xsl:when test="$theNumber = 13">D</xsl:when>
  49481.       <xsl:when test="$theNumber = 14">E</xsl:when>
  49482.       <xsl:when test="$theNumber = 15">F</xsl:when>
  49483.     </xsl:choose>
  49484.   </xsl:template>
  49485.   <xsl:template name="getTextAlignment">text-align:<xsl:choose>
  49486.       <xsl:when test="objtype=5"><!-- picture field empty for left (default), @I for centered and @J right -->
  49487.         <xsl:choose>
  49488.           <xsl:when test="string-length(picture) = 0">left;</xsl:when>
  49489.           <xsl:when test="contains(picture,'@J')">right;</xsl:when>
  49490.           <xsl:otherwise>center;</xsl:otherwise>
  49491.         </xsl:choose>
  49492.       </xsl:when>
  49493.       <xsl:otherwise>
  49494.         <xsl:choose>
  49495.           <xsl:when test="offset=0">left;</xsl:when>
  49496.           <xsl:when test="offset=1">right;</xsl:when>
  49497.           <xsl:otherwise>center;</xsl:otherwise>
  49498.         </xsl:choose>
  49499.       </xsl:otherwise>
  49500.     </xsl:choose>
  49501.     <!-- don't include direction at all if you want context -->
  49502.     <xsl:if test="mode < 4">direction:<xsl:choose>
  49503.         <xsl:when test="mode > 1">rtl;</xsl:when>
  49504.         <xsl:otherwise>ltr;</xsl:otherwise>
  49505.       </xsl:choose>
  49506.     </xsl:if>
  49507.   </xsl:template>
  49508.   <xsl:template name="ExternalStyleSheets">
  49509.     <xsl:param name="thisReportNode" select="/Reports/VFP-Report[1]"/>
  49510.     <xsl:param name="thisReportID" select="'this report'"/>
  49511.    <xsl:if test="count($thisReportNode/Run/property[@id='css_sheet']) > 0">
  49512.    <xsl:comment>
  49513.    External stylesheet(s) for <xsl:value-of select="$thisReportID"/>
  49514.    </xsl:comment>
  49515.    <xsl:for-each select="$thisReportNode/Run/property[@id='css_sheet']">
  49516.       <link type="text/css" href="{./text()}" rel="stylesheet"/>
  49517.    </xsl:for-each>
  49518.    </xsl:if>   
  49519.   </xsl:template>
  49520.   <xsl:template name="DocumentStyles">
  49521.   <xsl:comment>Global document styles, if any</xsl:comment>
  49522.     <style type="text/css">
  49523.      <xsl:comment><xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  49524.      <xsl:if test="number($noBody)!=1">html{direction:rtl;} 
  49525.      body{direction:rtl;}</xsl:if>
  49526.      div{direction:rtl;} 
  49527.      span{direction:rtl;}
  49528.      </xsl:if>
  49529.      </xsl:comment>
  49530.     </style>
  49531.   </xsl:template>
  49532.   <xsl:template name="Styles">
  49533.     <xsl:param name="thisReport" select="1"/>
  49534.     <xsl:param name="thisReportID"/>
  49535.     <xsl:comment>
  49536.     Styles for report # <xsl:value-of select="$thisReport"/>  in this run, 
  49537.     <xsl:value-of select="$thisReportID"/>
  49538.     </xsl:comment>
  49539.     <style type="text/css">
  49540.       <xsl:comment>
  49541.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]" mode="linestyles">
  49542.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49543.         </xsl:apply-templates>
  49544.       
  49545.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]">
  49546.         <xsl:variable name="frxrecno" select="frxrecno"/>
  49547.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  49548.               <xsl:apply-templates select="." mode="linestyles">
  49549.               <xsl:with-param name="thisReport" select="$thisReport"/>
  49550.                  <xsl:with-param name="firstPass" select="0"/>
  49551.               </xsl:apply-templates>
  49552.         </xsl:if>
  49553.       </xsl:for-each>
  49554.         
  49555.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestyles">
  49556.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49557.         </xsl:apply-templates>
  49558.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesT">
  49559.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49560.         </xsl:apply-templates>
  49561.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesM">
  49562.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49563.         </xsl:apply-templates>
  49564.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesB">
  49565.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49566.         </xsl:apply-templates>
  49567.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]">
  49568.          <xsl:variable name="frxrecno" select="frxrecno"/>
  49569.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  49570.               <xsl:apply-templates select="." mode="shapestyles">
  49571.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  49572.                 <xsl:with-param name="firstPass" select="0"/>
  49573.               </xsl:apply-templates>
  49574.         </xsl:if>
  49575.       </xsl:for-each>
  49576.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]" mode="textstyles">
  49577.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49578.         </xsl:apply-templates>
  49579.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]">
  49580.         <xsl:variable name="frxrecno" select="frxrecno"/>
  49581.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  49582.               <xsl:apply-templates select="." mode="textstyles">
  49583.               <xsl:with-param name="thisReport" select="$thisReport"/>
  49584.                  <xsl:with-param name="firstPass" select="0"/>
  49585.               </xsl:apply-templates>
  49586.         </xsl:if>
  49587.       </xsl:for-each>
  49588.         
  49589.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]" mode="imagestyles">
  49590.           <xsl:with-param name="thisReport" select="$thisReport"/>
  49591.         </xsl:apply-templates>
  49592.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]">
  49593.         <xsl:variable name="frxrecno" select="frxrecno"/>
  49594.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  49595.               <xsl:apply-templates select="." mode="imagestyles">
  49596.               <xsl:with-param name="thisReport" select="$thisReport"/>
  49597.                  <xsl:with-param name="firstPass" select="0"/>
  49598.               </xsl:apply-templates>
  49599.         </xsl:if>
  49600.       </xsl:for-each>
  49601.       </xsl:comment>
  49602.     </style>
  49603.    <xsl:call-template name="ExternalStyleSheets">
  49604.    <xsl:with-param name="thisReportNode" select="/Reports/VFP-Report[$thisReport]"/> 
  49605.    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  49606.    </xsl:call-template>
  49607.   </xsl:template>
  49608.   <xsl:template name="replaceText">
  49609.     <xsl:choose>
  49610.       <xsl:when test="$useTextAreaForStretchingText=1">
  49611.         <xsl:value-of select="."/>
  49612.       </xsl:when>
  49613.       <xsl:otherwise>
  49614.         <xsl:call-template name="replaceWhiteSpace">
  49615.           <xsl:with-param name="string" select="."/>
  49616.         </xsl:call-template>
  49617.       </xsl:otherwise>
  49618.     </xsl:choose>
  49619.   </xsl:template>
  49620.   <xsl:template name="renderPicture">
  49621.   <xsl:param name="thisReportID"/>
  49622.   <xsl:param name="thisID"/>
  49623.     <img>
  49624.       <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>
  49625.       <xsl:variable name="srcImage">
  49626.    <xsl:choose>
  49627.           <xsl:when test="@img and $externalFileLocation">
  49628.             <xsl:value-of select="translate(concat($externalFileLocation,@img),'\','/')"/>
  49629.           </xsl:when>
  49630.           <xsl:when test="@img and not(contains(./@img,':'))">
  49631.                <xsl:value-of select="translate(@img,'\','/')"/>
  49632.           </xsl:when>
  49633.           <xsl:when test="@img">
  49634.             <xsl:value-of select="concat('file://',translate(@img,'\','/'))"/>
  49635.           </xsl:when>
  49636.           <xsl:when test="$copyImageFiles = '1'">
  49637.             <xsl:value-of select="translate(concat($externalFileLocation,key('Layout',concat($thisID, $thisReportID))/unpathedimg),'\','/')"/>
  49638.           </xsl:when>
  49639.           <xsl:when test="string-length(./text()) > 0 and not(contains(./text(),':')) ">
  49640.             <xsl:value-of select="translate(./text(),'\','/')"/>
  49641.           </xsl:when>
  49642.           <xsl:when test="string-length(./text()) > 0">
  49643.             <xsl:value-of select="concat('file://',translate(./text(),'\','/'))"/>
  49644.           </xsl:when>
  49645.           <xsl:otherwise>
  49646.             <xsl:value-of select="concat('file://',translate(key('Layout',concat($thisID, $thisReportID))/pathedimg,'\','/'))"/>
  49647.           </xsl:otherwise>
  49648.         </xsl:choose>
  49649.       </xsl:variable>
  49650.       <xsl:attribute name="src"><xsl:value-of select="$srcImage"/></xsl:attribute>
  49651.       <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 -->
  49652.  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);
  49653.  </xsl:when><xsl:when test="$imgGeneral/general='1'"><!-- scale and retain --><xsl:choose><xsl:when test="@h > @w">
  49654.  width:100%;
  49655.  </xsl:when><xsl:otherwise>
  49656.  height:100%;
  49657.  </xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise><!-- stretch to fill frame -->
  49658.  height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;    
  49659. width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;    
  49660.  </xsl:otherwise></xsl:choose></xsl:attribute>
  49661.     </img>
  49662.   </xsl:template>
  49663.   <xsl:template name="addClassAttribute">
  49664.   <xsl:param name="item" select="."/>
  49665.   <xsl:param name="default" select="''"/>
  49666.   <xsl:attribute name="class"><xsl:choose>
  49667.   <xsl:when test="string-length($item/@CSS) > 0">
  49668.   <xsl:value-of select="$item/@CSS"/>
  49669.   </xsl:when>
  49670.   <xsl:when test="string-length($item/@css) = 0">
  49671.   <xsl:value-of select="$default"/>
  49672.   </xsl:when>
  49673.   <xsl:otherwise>
  49674.   <xsl:value-of select="$item/@css"/>
  49675.   </xsl:otherwise>
  49676.   </xsl:choose></xsl:attribute>
  49677.   </xsl:template>
  49678.   <xsl:template name="addTitleAttribute">
  49679.     <xsl:param name="item" select="."/>
  49680.     <xsl:if test="string-length($item/@title) > 0">
  49681.       <xsl:attribute name="title"><xsl:value-of select="$item/@title"/></xsl:attribute>
  49682.     </xsl:if>
  49683.   </xsl:template>
  49684.   <xsl:template name="addAnchor">
  49685.     <xsl:param name="item" select="."/>
  49686.     <xsl:if test="string-length($item/@anchor) > 0">
  49687.       <a>
  49688.      <xsl:attribute name="{$anchorAttr}"><xsl:value-of select="$item/@anchor"/></xsl:attribute> 
  49689.         <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  49690.       </a>
  49691.     </xsl:if>
  49692.   </xsl:template>
  49693.   <xsl:template name="addStyleAttribute">
  49694.     <xsl:param name="topOffset" select="0"/>
  49695.     <xsl:param name="thisZ" select="1"/>
  49696.     <xsl:param name="thisReportID"/>
  49697.     <xsl:param name="thisID"/>
  49698.     <xsl:param name="styleType" select="'Div'"/>
  49699. <!-- do NOT mess around with the white space in here, even though it 
  49700. looks ugly the way it is!! -->
  49701. <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;
  49702. top:<xsl:choose>
  49703.   <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>
  49704.   <xsl:otherwise><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="(@t +$topOffset) div $printDPI"/></xsl:call-template></xsl:otherwise>
  49705. </xsl:choose>in;<xsl:choose>
  49706.   <xsl:when test="$styleType='VR'">width:0in;</xsl:when>
  49707.   <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>
  49708. <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>
  49709. <xsl:if test="$useDynamicTextAttributes=1 and key('Layout',concat($thisID,$thisReportID))[objtype=5 or objtype=8]">
  49710. <xsl:call-template name="addDynamicTextStyleAttributes"/>
  49711. </xsl:if>
  49712. </xsl:attribute>
  49713.     </xsl:template>
  49714.     <xsl:template name="addDynamicTextStyleAttributes">
  49715.   <!-- dynamic values for font, omit these attributes if they don't appear on each object-->
  49716.   <xsl:if test="@FNAME">
  49717.     font-family:'<xsl:value-of select="@FNAME"/>';font-size:<xsl:value-of select="@FSIZE"/>pt;
  49718.     <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>
  49719.     font-weight:<xsl:choose><xsl:when test="@FSTYLE mod 2 = 1">bold</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  49720.     font-style:<xsl:choose><xsl:when test="(@FSTYLE div 2) mod 2 =1">italic</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  49721.    background-color:<xsl:call-template name="getAlphaColor">
  49722.    <xsl:with-param name="alpha" select="@FA"/>
  49723.    <xsl:with-param name="r" select="@FR"/>
  49724.    <xsl:with-param name="g" select="@FG"/>
  49725.    <xsl:with-param name="b" select="@FB"/>
  49726.    </xsl:call-template>;color:<xsl:call-template name="getAlphaColor"/>;
  49727.     </xsl:if>
  49728.     </xsl:template>
  49729.    <xsl:template name="getAlphaColor">
  49730.    <xsl:param name="alpha" select="@PA"/>
  49731.    <xsl:param name="r" select="@PR"/>
  49732.    <xsl:param name="g" select="@PG"/>
  49733.    <xsl:param name="b" select="@PB"/>
  49734.    <xsl:choose>
  49735.    <xsl:when test="$alpha=0">transparent</xsl:when>
  49736.    <xsl:when test="$alpha=255 or ($r+$g+$b > $fieldAlphaOpacityShade)"><xsl:value-of select="concat('rgb(',$r,',',$g,',',$b,')')"/></xsl:when>
  49737.    <xsl:otherwise><xsl:value-of select="concat('rgb(',$r+$fieldAlphaOpacityOffset,',',$g+$fieldAlphaOpacityOffset,',',$b+$fieldAlphaOpacityOffset,')')"/></xsl:otherwise>
  49738.    </xsl:choose>
  49739.    </xsl:template>
  49740.     <xsl:template name="replaceWhiteSpace">
  49741.     <xsl:param name="string" select="."/>
  49742.     <xsl:choose>
  49743.       <xsl:when test="contains($string,' ')">
  49744.         <xsl:call-template name="replaceWhiteSpace">
  49745.           <xsl:with-param name="string" select="substring-before($string, ' ')"/>
  49746.         </xsl:call-template>
  49747.         <br/>
  49748.         <xsl:call-template name="replaceWhiteSpace">
  49749.           <xsl:with-param name="string" select="substring-after($string, ' ')"/>
  49750.         </xsl:call-template>
  49751.       </xsl:when>
  49752.       <xsl:otherwise>
  49753.         <xsl:value-of select="$string"/>
  49754.       </xsl:otherwise>
  49755.     </xsl:choose>
  49756.   </xsl:template>
  49757.   <xsl:template name="Script">
  49758.     <script language="JavaScript">
  49759.       <xsl:comment>
  49760.      //TBD
  49761.       </xsl:comment>
  49762.     </script>
  49763.   </xsl:template>
  49764.   <xsl:template match="*|@*" mode="debug">
  49765.    <xsl:copy-of select="."/>
  49766.   </xsl:template> 
  49767. </xsl:stylesheet>
  49768. LCRESULTd
  49769. VNEWVAL
  49770. THIS    
  49771. ISRUNNING
  49772. VERIFYNCNAME
  49773. CSSCLASSATTR
  49774. SYNCHXSLTPROCESSORUSERd
  49775. VNEWVAL
  49776. THIS    
  49777. ISRUNNING
  49778. VERIFYNCNAME
  49779. ANCHORATTR
  49780. SYNCHXSLTPROCESSORUSERd
  49781. VNEWVAL
  49782. THIS    
  49783. ISRUNNING
  49784. VERIFYNCNAME    
  49785. TITLEATTR
  49786. SYNCHXSLTPROCESSORUSERd
  49787. VNEWVAL
  49788. THIS    
  49789. ISRUNNING
  49790. VERIFYNCNAME
  49791. LINKATTR
  49792. SYNCHXSLTPROCESSORUSERd
  49793. VNEWVAL
  49794. THIS    
  49795. ISRUNNING
  49796. VERIFYNCNAME
  49797. CSSCLASSOVERRIDEATTR
  49798. SYNCHXSLTPROCESSORUSER
  49799. ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
  49800. .?=&#
  49801. TCVALUE
  49802. TLENCODEURLCONTROLCHARS
  49803. TLENCODESPACE
  49804. LCRESULT
  49805. LCCHAR
  49806. LCOKCHARS
  49807. TCVAL
  49808. TLXMLENCODE
  49809. LCVAL    
  49810. LCTEMPVAL
  49811. LAVALS
  49812. LIINDEX
  49813. LISEPARATORS
  49814. URLSTRINGENCODE
  49815. XMLRAWCONVH
  49816. LOBJTYPEMODE
  49817. OFOXYPREVIEWER
  49818. COMMANDCLAUSES
  49819. LOPENVIEWER
  49820. PREVIEW
  49821. TOFILE
  49822. TARGETFILENAME    
  49823. CDESTFILE
  49824. LCDESTFILE
  49825. COUTPUTPATH
  49826. LCFILE
  49827. _REPORTLISTENER
  49828. CANCELREPORT    
  49829. QUIETMODE
  49830. LQUIETMODE
  49831. Microsoft.XMLDOM
  49832. Microsoft.XMLDOM
  49833. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49834. HTML.Metatag.HTTP-EQUIV
  49835. /VFPData/reportdata
  49836. [@name='
  49837. ' and @execwhen='
  49838. HTML.Metatag.HTTP-EQUIV
  49839. ']/@execute
  49840. //meta
  49841. content
  49842. HTML.Metatag.HTTP-EQUIV
  49843. HTML.Metatag.HTTP-EQUIV
  49844. RUNCOLLECTOR
  49845. SETFRXDATASESSION
  49846. MEMBERDATAALIAS
  49847. LVVALUE
  49848. LCEXPR
  49849. LISELECT
  49850. LOXML    
  49851. LOXMLTEMP
  49852. LONODE
  49853. FRXHEADERRECNO
  49854. LOADXML
  49855. STYLE
  49856. FRXRECNO
  49857. EXECWHEN
  49858. DECLASS
  49859. EXECUTE
  49860. SELECTSINGLENODE
  49861. SELECTNODES
  49862. GETATTRIBUTE
  49863. EVALUATEUSEREXPRESSION
  49864. GETKEY
  49865. FRXRecno
  49866. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49867. HTML.CSSClass.OverrideFRX
  49868. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49869. HTML.CSSClass.ExtendFRX
  49870. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49871. HTML.Link
  49872. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49873. HTML.Alt-Title
  49874. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49875. HTML.Anchor
  49876. TNLEFT
  49877. TNTOP
  49878. TNWIDTH
  49879. TNHEIGHT
  49880. TNOBJECTCONTINUATIONTYPE
  49881. LCINFO
  49882. LCVAL
  49883. LIRECNO
  49884. SETFRXDATASESSION
  49885. MEMBERDATAALIAS
  49886. FRXRECNO
  49887. EXECWHEN
  49888. DECLASS
  49889. EVALUATEUSEREXPRESSION
  49890. EXECUTE
  49891. CSSCLASSOVERRIDEATTR
  49892. CSSCLASSATTR
  49893. LINKATTR
  49894. PATHENCODE    
  49895. TITLEATTR
  49896. ANCHORATTR
  49897. @id='description'
  49898. @id='
  49899. Document.Description
  49900. @id='author'
  49901. @id='
  49902. Document.Author
  49903. @id='keywords'
  49904. @id='
  49905. Document.Keywords
  49906. @id='title'
  49907. @id='
  49908. Document.Title
  49909. @id='copyright'
  49910. @id='
  49911. Document.Copyright
  49912. @id='date'
  49913. @id='
  49914. Document.Date
  49915. @id='css_sheet'
  49916. @id='
  49917. HTML.CSSFile
  49918. @id='http-equiv'
  49919. @id='
  49920. HTML.Metatag.HTTP-EQUIV
  49921. @idref
  49922. @DTEXT
  49923. @DTYPE
  49924. @PLINK
  49925. @FNAME
  49926. @FSIZE
  49927. @FSTYLE
  49928. @title
  49929. @anchor
  49930. @hlink
  49931. LCRESULT
  49932. GETDEFAULTUSERXSLTASSTRING
  49933. HEIGHTATTR    
  49934. WIDTHATTR
  49935. LEFTATTR
  49936. TOPATTR
  49937. CONTATTR
  49938. IDREFATTRIBUTE
  49939. IDATTRIBUTE
  49940. IMAGESRCATTR
  49941. DATATEXTATTR
  49942. DATATYPEATTR
  49943. PAGEIMAGEATTR
  49944. PENALPHAATTR
  49945. PENREDATTR
  49946. PENGREENATTR
  49947. PENBLUEATTR
  49948. FILLALPHAATTR
  49949. FILLREDATTR
  49950. FILLGREENATTR
  49951. FILLBLUEATTR
  49952. FONTNAMEATTR
  49953. FONTSIZEATTR
  49954. FONTSTYLEATTR    
  49955. TITLEATTR
  49956. CSSCLASSATTR
  49957. CSSCLASSOVERRIDEATTR
  49958. ANCHORATTR
  49959. LINKATTR
  49960. XSLTPROCESSORUSERM
  49961. HTML Listener
  49962. APPNAME
  49963. HADERROR7
  49964. FRXRecno
  49965. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49966. HTML.CSSClass.OverrideFRX
  49967. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49968. HTML.CSSClass.ExtendFRX
  49969. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49970. HTML.Link
  49971. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49972. HTML.Alt-Title
  49973. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49974. HTML.Anchor
  49975. TONODE
  49976. TNLEFT
  49977. TNTOP
  49978. TNWIDTH
  49979. TNHEIGHT
  49980. TNOBJECTCONTINUATIONTYPE
  49981. LCVAL
  49982. LIRECNO
  49983. SETFRXDATASESSION
  49984. MEMBERDATAALIAS
  49985. FRXRECNO
  49986. EXECWHEN
  49987. DECLASS
  49988. EVALUATEUSEREXPRESSION
  49989. EXECUTE
  49990. SETATTRIBUTE
  49991. CSSCLASSOVERRIDEATTR
  49992. CSSCLASSATTR
  49993. LINKATTR
  49994. PATHENCODE    
  49995. TITLEATTR
  49996. ANCHORATTR
  49997. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  49998. HTML.PrintablePageLink
  49999. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  50000. HTML.TextAreasOff
  50001. useTextAreaForStretchingText
  50002. useTextAreaForStretchingText
  50003. useTextAreaForStretchingText
  50004. OLDPAGEIMAGETYPE
  50005. XMLMODE    
  50006. LLSETTING
  50007. LISELECT
  50008. SETFRXDATASESSION
  50009. MEMBERDATAALIAS
  50010. EXECWHEN
  50011. EVALUATESTRINGTOBOOLEAN
  50012. EXECUTE
  50013. PAGEIMAGETYPE
  50014. LISTENERTYPE
  50015. SUPPORTSPAGEIMAGES!
  50016. MAKEEXTERNALFILELOCATIONREACHABLE
  50017. ISSUCCESSOR
  50018. COMMANDCLAUSES
  50019. NOPAGEEJECT
  50020. XSLTPARAMETERS
  50021. GETKEY
  50022. OLDTEXTAREASETTING
  50023. ADJUSTXSLTPARAMETER
  50024. RESETDATASESSION
  50025. TLCALLEDEARLY
  50026. OLDPAGEIMAGETYPE
  50027. PAGEIMAGETYPE
  50028. RESETDATASESSION
  50029. LOBJTYPEMODE
  50030. LLSAVED
  50031. TARGETFILENAME
  50032. OFOXYPREVIEWER
  50033. LSAVED
  50034. LOPENVIEWER    
  50035. SHELLEXECh
  50036. useTextAreaForStretchingText
  50037. OLDTEXTAREASETTING
  50038. ADJUSTXSLTPARAMETER
  50039. UPDATEPROPERTIES
  50040. getdefaultuserxsltasstring,
  50041. cssclassattr_assign
  50042. anchorattr_assign:
  50043. titleattr_assign
  50044. linkattr_assign
  50045. cssclassoverrideattr_assignS
  50046. urlstringencode
  50047. pathencode
  50048. updateproperties
  50049. fillruncollector
  50050. getrawformattinginfo
  50051. getdefaultuserxslt
  50052. setdomformattinginfo
  50053. BeforeReport
  50054. AfterReport
  50055. applyusertransformtooutput
  50056. LoadReport!
  50057. TCNODE
  50058. TLOPEN
  50059. TCIDREF
  50060. TVFORMATTING
  50061. LCNODE
  50062. IDATTRIBUTE
  50063. IDREFATTRIBUTE
  50064. TCNODE
  50065. TCVALUE
  50066. TVIDREF
  50067. TVFORMATTING
  50068. LCVALUE
  50069. LCNODE
  50070. XMLRAWCONV    
  50071. XMLRAWTAGD
  50072. m.lcValue = STRTRAN(m.tcValue, '&', '&' )      
  50073. m.lcValue = STRTRAN(m.lcValue, '<', '<' )
  50074. m.lcValue = STRTRAN(m.lcValue, '>', '>' )
  50075. m.lcValue = STRTRAN(m.lcValue, '"', '"' )
  50076. m.lcValue = STRTRAN(m.lcValue, ['], ''' )
  50077. TCVALUE
  50078. LCVALUE
  50079. LICHAR
  50080. TCCONTENTS
  50081. TARGETHANDLEX
  50082. VNEWVAL
  50083. THIS    
  50084. ISRUNNING
  50085. INCLUDEBREAKSINDATAb
  50086. VNEWVAL
  50087. THIS    
  50088. ISRUNNING
  50089. XMLMODE
  50090. INCLUDEPAGE    
  50091. ISRUNNING    
  50092. DATANODES    
  50093. PAGENODES
  50094. COLUMNNODES
  50095. CURRENTBAND
  50096. CURRENTPAGE
  50097. CURRENTCOLUMN
  50098. EVALUATECONTENTSVALUES
  50099. SUCCESSORGFXNORENDER
  50100. CLEARSTATUS
  50101. Msxml2.FreeThreadedDOMDocument.4.0
  50102. |DOCUMENT|
  50103. |ELEMENT|
  50104. COLLECTION
  50105. externalFileLocation
  50106. TVSOURCE
  50107. TVPROCESSOR
  50108. TVPARAMCOLLECTION
  50109. TVFRXALIAS
  50110. LOSOURCE
  50111. LOPROCESSOR
  50112. LCRETURN    
  50113. LLSUCCESS
  50114. LIPARAM    
  50115. LISESSION
  50116. LLCHARSETSINUSE
  50117. FRXCHARSETSINUSE
  50118. FIXMSXMLOBJECTFORDTDS
  50119. LOADXML
  50120. PARSEERROR
  50121. REASON
  50122. NODETYPESTRING
  50123. LOADPROCESSOROBJECT
  50124. CREATEPROCESSOR
  50125. STYLESHEET    
  50126. BASECLASS
  50127. COUNT
  50128. ADDPARAMETER
  50129. GETKEY
  50130. EXTERNALFILELOCATION
  50131. INPUT    
  50132. TRANSFORM
  50133. OUTPUT
  50134. VNEWVAL
  50135. CURRENTDOCUMENTE
  50136. VNEWVAL
  50137. THIS    
  50138. ISRUNNING
  50139. VERIFYNCNAME
  50140. IDATTRIBUTEE
  50141. VNEWVAL
  50142. THIS    
  50143. ISRUNNING
  50144. VERIFYNCNAME
  50145. IDREFATTRIBUTE
  50146. VNEWVAL
  50147. XSLTPROCESSORRDL
  50148. STYLESHEET
  50149. LOPROCESSOR
  50150. LOADPROCESSOROBJECT
  50151. VNEWVAL
  50152. XSLTPROCESSORUSER
  50153. STYLESHEET
  50154. LOPROCESSOR
  50155. LOADPROCESSOROBJECTf
  50156. QuietMode
  50157. RESETREPORT
  50158. CLOSETARGETFILE
  50159. NOPAGEEJECT
  50160. HADERROR
  50161. RESETTODEFAULT
  50162. CURRENTDOCUMENT?
  50163. TCNAME
  50164. LLVALID
  50165. LICHAR
  50166. LCCHAR9
  50167. VNEWVAL
  50168. THIS 
  50169. INCLUDEFORMATTINGINLAYOUTOBJECTSD
  50170. VNEWVAL
  50171. THIS    
  50172. ISRUNNING
  50173. INCLUDEBANDSWITHNOOBJECTS
  50174. Nodes
  50175. Nodes
  50176. LISELECT    
  50177. LLSUCCESS
  50178. NODES
  50179. OBJTYPE
  50180. VERIFYNCNAME
  50181. OBJVALUE
  50182. VNEWVAL
  50183. THIS    
  50184. ISRUNNING
  50185. NOPAGEEJECT
  50186. DATASESSIONv
  50187. Msxml2.XSLTemplate.4.0
  50188. Msxml2.FreeThreadedDOMDocument.4.0
  50189. TCVAL
  50190. LORETURN
  50191. LOPROCESSOR
  50192. LOSTYLESHEET    
  50193. LISESSION
  50194. RESETDATASESSION
  50195. FIXMSXMLOBJECTFORDTDS
  50196. LOADXML
  50197. PARSEERROR
  50198. REASON
  50199. STYLESHEET
  50200. FRXRecno
  50201. FRXRecno
  50202. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  50203. HTML.PrintablePageLink
  50204. TNLEFT
  50205. TNTOP
  50206. TNWIDTH
  50207. TNHEIGHT
  50208. TNOBJECTCONTINUATIONTYPE
  50209. LCINFO
  50210. CONTATTR 
  50211. INCLUDEFORMATTINGINLAYOUTOBJECTS
  50212. LEFTATTR
  50213. TOPATTR    
  50214. WIDTHATTR
  50215. HEIGHTATTR
  50216. SETFRXDATASESSION
  50217. LLPAGEIMAGES
  50218. CURRENTPAGEIMAGEFILENAME
  50219. MEMBERDATAALIAS
  50220. INCLUDEDATATYPEATTRIBUTES
  50221. FORMATTINGCHANGES
  50222. DTEXT
  50223. DATATYPEATTR
  50224. DTYPE
  50225. DATATEXTATTR
  50226. XMLRAWCONV
  50227. FRXRECNO
  50228. EXECWHEN
  50229. EVALUATESTRINGTOBOOLEAN
  50230. EXECUTE
  50231. PAGEIMAGEATTR
  50232. VNEWVAL
  50233. THIS    
  50234. ISRUNNING
  50235. VERIFYNCNAME
  50236. TOPATTRE
  50237. VNEWVAL
  50238. THIS    
  50239. ISRUNNING
  50240. VERIFYNCNAME
  50241. LEFTATTRE
  50242. VNEWVAL
  50243. THIS    
  50244. ISRUNNING
  50245. VERIFYNCNAME
  50246. HEIGHTATTRE
  50247. VNEWVAL
  50248. THIS    
  50249. ISRUNNING
  50250. VERIFYNCNAME    
  50251. WIDTHATTRE
  50252. VNEWVAL
  50253. THIS    
  50254. ISRUNNING
  50255. VERIFYNCNAME
  50256. CONTATTRJ
  50257. DATASESSIONv
  50258. VFPDataSource
  50259. ORDERv
  50260.  DESCC
  50261. FILTERv
  50262. SKIPv
  50263. VFPDataSource
  50264. 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
  50265. VFPFRXLayoutObject.Tagb
  50266. VFPFRXLayoutObject.Tag2b
  50267. VFPFRXLayoutObject.Fontfaceb
  50268. Nodes
  50269. VFPFRXLayoutNode
  50270. attrC
  50271. VFPFRXLayoutNode
  50272. THIS.C
  50273.  attribute nodename
  50274. XMLAdapter
  50275. VFPFRXLayoutObject
  50276. VFPFRXLayoutNode
  50277. VFPFRXMemberData
  50278. VFPDataSource
  50279. lcResult
  50280. Microsoft.XMLDOM
  50281. VFPFRXCommand
  50282. THIS.CommandClauses.C
  50283. false
  50284. OutputTypeC
  50285. appName
  50286. targetFileName
  50287. VFPFRXPrintJob
  50288. pagewidth
  50289. pageheight
  50290. pagedesignC
  50291. whole
  50292. printable6
  50293. printresolutionCC
  50294. PRINTER
  50295. printresolution
  50296. TCNODENAME
  50297. TLASSTRING
  50298. LISELECTCURRENT
  50299. LISELECTFRX    
  50300. LISESSION
  50301. LIFLDS
  50302. LIDBFS
  50303. LIINDEX1
  50304. LIINDEX2
  50305. LAFLDS
  50306. LADBFS
  50307. LARELS
  50308. LCALIAS
  50309. LCKEY
  50310. LLDESC
  50311. LCFILTER
  50312. LCREL
  50313. LIRELS
  50314. LCSKIP
  50315. LCRESULT
  50316. LLWHOLEPAGE
  50317. ONODE
  50318. OCOMMAND
  50319. SETFRXDATASESSION
  50320. INCLUDEDATASOURCESINVFPRDL
  50321. VFPDATASOURCE    
  50322. THE_ALIAS
  50323. RPT_DRIVER
  50324. THE_DBF    
  50325. THE_ORDER
  50326. ORDER_DESC
  50327. THE_FILTER
  50328. THE_SKIP
  50329. FLDS    
  50330. THE_FIELD
  50331. THE_TYPE
  50332. THE_PARENT
  50333. THE_TARGET
  50334. THE_EXPR
  50335. SETCURRENTDATASESSION
  50336. LIINDEX
  50337. LCDBF
  50338. LITAG
  50339. DRIVINGALIAS
  50340. PREPAREFRXCOPY
  50341. GETFRXLAYOUTOBJECTFIELDLIST
  50342. REMOVEFRXCOPY
  50343. VFPFRXLAYOUTOBJECT
  50344. OBJTYPE
  50345. FONTFACE
  50346. NODES
  50347. OBJVALUE
  50348. OBJCODE
  50349. OBJINFO
  50350. VFPFRXLAYOUTNODE
  50351. RESPECTCURSORCP
  50352. ADDTABLESCHEMA
  50353. MEMBERDATAALIAS
  50354. RESPECTNESTING
  50355. XMLSCHEMALOCATION
  50356. TOXML
  50357. RESETDATASESSION
  50358. LOADXML
  50359. SELECTSINGLENODE
  50360. COMMANDCLAUSES
  50361. CREATEELEMENT
  50362. SETATTRIBUTE
  50363. OUTPUTTYPE
  50364. APPNAME
  50365. TARGETFILENAME
  50366. APPENDCHILD
  50367. SHAREDPAGEWIDTH
  50368. SHAREDPAGEHEIGHT
  50369. PRINTJOBNAME
  50370. VNEWVAL
  50371. INCLUDEDATASOURCESINVFPRDL
  50372. TOBJTYPE
  50373. TNAME
  50374. TPICTURE
  50375. TOFFSET
  50376. TPATHED
  50377. LCRETURN
  50378. LCFILE
  50379. COMMANDCLAUSES
  50380. APPLYUSERTRANSFORM
  50381. XSLTPROCESSORUSER
  50382. APPLYRDLTRANSFORM
  50383. LVPROCESSOR
  50384. XMLMODE
  50385. XSLTPROCESSORRDL
  50386. SAVETARGETFILENAME    
  50387. APPLYXSLT
  50388. TARGETFILENAME
  50389. XSLTPARAMETERSr
  50390. VNEWVAL
  50391. THIS    
  50392. ISRUNNING
  50393. APPLYUSERTRANSFORM
  50394. XSLTPROCESSORUSER
  50395. GETDEFAULTUSERXSLT
  50396. FRXRecno
  50397. FRXRecno
  50398. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  50399. HTML.PrintablePageLink
  50400. TONODE
  50401. TNLEFT
  50402. TNTOP
  50403. TNWIDTH
  50404. TNHEIGHT
  50405. TNOBJECTCONTINUATIONTYPE
  50406. SETATTRIBUTE
  50407. CONTATTR 
  50408. INCLUDEFORMATTINGINLAYOUTOBJECTS
  50409. LEFTATTR
  50410. TOPATTR    
  50411. WIDTHATTR
  50412. HEIGHTATTR
  50413. LLPAGEIMAGES
  50414. SETFRXDATASESSION
  50415. CURRENTPAGEIMAGEFILENAME
  50416. MEMBERDATAALIAS
  50417. INCLUDEDATATYPEATTRIBUTES
  50418. FORMATTINGCHANGES
  50419. DTEXT
  50420. DATATYPEATTR
  50421. DTYPE
  50422. DATATEXTATTR
  50423. FRXRECNO
  50424. EXECWHEN
  50425. EXECUTE
  50426. PAGEIMAGEATTR
  50427. APPLYUSERTRANSFORM
  50428. XSLTPROCESSORUSER2
  50429. Title
  50430. Title Band nodename
  50431. Page Header Band nodename
  50432. Column Header Band nodename
  50433. Group Header Band nodename
  50434. Detail Band nodename
  50435. Group Footer Band nodename
  50436. Column Footer Band nodename
  50437. Page Footer Band nodename
  50438. Summary
  50439. Summary Band nodename
  50440. Detail Header Band nodename
  50441. Detail Footer Band nodename
  50442. VFP-Report
  50443. Report root nodename
  50444. Text object nodename
  50445. Expression object nodename
  50446. Picture object nodename
  50447. Shape object nodename
  50448. Line object nodename
  50449. Variable nodename
  50450. FontRes
  50451. FontResource nodename
  50452. DataEnv
  50453. DataEnvironment nodename
  50454. DE-Cursor
  50455. DE-Cursor nodename
  50456. DE-Relation
  50457. DE-Relation nodename
  50458. Group
  50459. Group selector nodename
  50460. Reports
  50461. XML Document root nodename
  50462. Report scope data root nodename
  50463. VFP-RDL
  50464. RDL layout description root nodename
  50465. Pages
  50466. Pages collection root nodename
  50467. Columns
  50468. Column collection root nodename
  50469. Run property set root nodename
  50470. OBJTYPE
  50471. COLLECTION
  50472. VNEWVAL
  50473. XSLTPARAMETERS    
  50474. BASECLASS
  50475. RECNO() AS FrxRecno, 
  50476. .PLATFORM, 
  50477. .NAME,
  50478. .EXPR,
  50479. .OFFSET,
  50480. .VPOS,
  50481. .HPOS,
  50482. .HEIGHT,
  50483. .OBJTYPE, 
  50484. .TAG, 
  50485. .TAG2,
  50486. .PENSIZE,
  50487. .PENPAT,
  50488. .FILLPAT,
  50489. .WIDTH,
  50490. .STYLE,
  50491. .PICTURE,
  50492. .ORDER,
  50493. .COMMENT,
  50494. .FILLCHAR,
  50495. .PENRED,
  50496. .PENGREEN,
  50497. .PENBLUE,
  50498. .FILLRED,
  50499. .FILLGREEN,
  50500. .FILLBLUE,
  50501. .FONTFACE, 
  50502. .FONTSTYLE,
  50503. .FONTSIZE,
  50504. .MODE,
  50505. .FLOAT,
  50506. .STRETCH,
  50507. .STRETCHTOP,
  50508. BITTEST( 
  50509. .FONTSTYLE, 0 ) AS FontBold,
  50510. BITTEST( 
  50511. .FONTSTYLE, 1 ) AS FontItalic,
  50512. BITTEST( 
  50513. .FONTSTYLE, 3 ) AS FontUnderline,
  50514. BITTEST( 
  50515. .FONTSTYLE, 7 ) AS FontStrikeThrough,
  50516. THIS.GetPathedImageInfo(
  50517. .ObjType, 
  50518. .Name, 
  50519. .Picture, 
  50520. .Offset) AS UnpathedImg,
  50521. THIS.GetPathedImageInfo(
  50522. .ObjType, 
  50523. .Name, 
  50524. .Picture, 
  50525. .Offset, .T.) AS PathedImg,
  50526. .TOP,
  50527. .BOTTOM,
  50528. .NOREPEAT,
  50529. .PAGEBREAK,
  50530. .COLBREAK,
  50531. .RESETPAGE,
  50532. .GENERAL,
  50533. .SPACING,
  50534. .SWAPHEADER,
  50535. .SWAPFOOTER,
  50536. .EJECTBEFOR,
  50537. .EJECTAFTER,
  50538. .TOTALTYPE,
  50539. .RESETTOTAL,
  50540. .DOUBLE,
  50541. .RESOID,1) AS FONTCHARSET,
  50542. .SUPALWAYS,
  50543. .SUPOVFLOW,
  50544. .SUPRPCOL,
  50545. .SUPGROUP,
  50546. .SUPVALCHNG,
  50547. .SUPEXPR,
  50548. .USER,
  50549. OBJECTS.UniqueID AS ObjID, OBJECTS.ObjName, Objects.Locale_ID,
  50550. OBJECTS.START_BAND_ID,OBJECTS.BAND_OFFSET,OBJECTS.END_BAND_ID,
  50551. BANDS.UNIQUEID AS BandID,BANDS.OBJCODE AS BandType,Bands.BANDLABEL,Bands.START,
  50552. Bands.STOP,Bands.BAND_SEQ,Bands.REL_BAND_ID, (
  50553. .ObjType=9 AND (NOT 
  50554. .Plain)) AS BandStretch
  50555. TCALIAS
  50556. LCALIAS
  50557. LCFILE
  50558. COMMANDCLAUSES
  50559. PREPAREFRXSWAPCOPY
  50560. TARGETFILENAME
  50561. TCALIAS
  50562. LCFILE
  50563. REMOVEFRXSWAPCOPYD
  50564. DATASESSIONv
  50565. Collection
  50566. TVVALUE
  50567. TSKEY
  50568. TLREMOVEONLY
  50569. LIINDEX    
  50570. LISESSION
  50571. XSLTPARAMETERS
  50572. RESETDATASESSION
  50573. COUNT
  50574. GETKEY
  50575. REMOVE
  50576. Nodes
  50577. FrxNodes
  50578. XXXX6
  50579. DATASESSIONv
  50580. Microsoft.XMLDOM
  50581. PCCO_
  50582. THIS.runCollector.Baseclassb
  50583. THIS.runCollector.C
  50584. COLLECTION
  50585. THIS.runCollector[C
  50586. TLASSTRING
  50587. LCITEM
  50588. LVVALUE    
  50589. LISESSION
  50590. SETFRXDATASESSION
  50591. NODES
  50592. OBJVALUE
  50593. RESETDATASESSION
  50594. LOADXML
  50595. SETCURRENTDATASESSION
  50596. RUNCOLLECTOR
  50597. LCFIELD1
  50598. LCFIELD2
  50599. LIINDEX
  50600. LISELECT
  50601. ADDRUNNODE    
  50602. LAMEMBERS    
  50603. BASECLASS
  50604. COUNT
  50605. GETKEY
  50606. DOCUMENTELEMENT
  50607. property
  50608. m.vValue.XMLb
  50609. TVVALUEEXPR
  50610. TCPROPERTYNAME
  50611. ONODE
  50612. VVALUE
  50613. CREATEELEMENT
  50614. SETATTRIBUTE
  50615. EVALUATEUSEREXPRESSION
  50616. APPENDCHILD
  50617. DOCUMENTELEMENT9
  50618. TVNEWVAL
  50619. INCLUDEDATATYPEATTRIBUTESE
  50620. VNEWVAL
  50621. THIS    
  50622. ISRUNNING
  50623. VERIFYNCNAME
  50624. DATATYPEATTRE
  50625. VNEWVAL
  50626. THIS    
  50627. ISRUNNING
  50628. VERIFYNCNAME
  50629. DATATEXTATTR]
  50630. FORMATTINGCHANGES
  50631. INCLUDEDATATYPEATTRIBUTES
  50632. FRXRECNO
  50633. DTEXT
  50634. DTYPER
  50635. TVALC
  50636. VNEWVAL
  50637. THIS    
  50638. ISRUNNING
  50639. VERIFYNCNAME
  50640. PAGEIMAGEATTR0
  50641. TCVAL"
  50642. XMLMODE
  50643. XSLTPROCESSORRDL
  50644. ProhibitDTD-
  50645. TOXML
  50646. VALIDATEONPARSE
  50647. RESOLVEEXTERNALS
  50648. SETPROPERTY
  50649. DATASESSIONv
  50650. TCALIAS    
  50651. LISESSION
  50652. LISELECT
  50653. LITALLY
  50654. LIREC
  50655. LCALIAS
  50656. LLSWITCHSESSIONS
  50657. FRXDATASESSION
  50658. SETFRXDATASESSION
  50659. OBJTYPE
  50660. DOUBLE
  50661. RESOIDE
  50662. CALLEVALUATECONTENTS
  50663. INCLUDEDATATYPEATTRIBUTES
  50664. XMLMODE
  50665. LLRESETQUIETMODE
  50666. HADERROR    
  50667. QUIETMODE
  50668. APPLYUSERTRANSFORM
  50669. APPLYRDLTRANSFORM$
  50670. Nodes
  50671. FrxNodes
  50672. XXXX6
  50673. NBANDOBJCODE    
  50674. NFRXRECNO
  50675. INVOKEONCURRENTPASS
  50676. TARGETHANDLE
  50677. LCBAND
  50678. LONODE
  50679. LCIDREF
  50680. LLFORMATBREAKBAND    
  50681. LOOBJECTS
  50682. LLOMITBAND
  50683. SETFRXDATASESSION
  50684. NODES
  50685. OBJVALUE
  50686. INCLUDEBANDSWITHNOOBJECTS    
  50687. FRXCURSOR
  50688. GETOBJECTSINBAND
  50689. UNIQUEID
  50690. FRXDATASESSION
  50691. COUNT
  50692. SETCURRENTDATASESSION
  50693. INCLUDEBREAKSINDATA
  50694. CURRENTBAND    
  50695. XMLRAWTAG
  50696. WRITERAW
  50697. CURRENTPAGE    
  50698. PAGENODES
  50699. CURRENTCOLUMN
  50700. COLUMNNODES
  50701. RESETDATASESSION
  50702. INCLUDEPAGEf
  50703. RESETDOCUMENT
  50704. COLUMNNODES
  50705. CURRENTBAND
  50706. CURRENTCOLUMN
  50707. CURRENTDOCUMENT
  50708. CURRENTPAGE    
  50709. DATANODES    
  50710. PAGENODES
  50711. XSLTPROCESSORRDL
  50712. XSLTPROCESSORUSER
  50713. XSLTPARAMETERS
  50714. SAFETYv
  50715. TCDBF
  50716. TLOVERWRITE
  50717. HADERROR
  50718. LISELECT
  50719. LLSAFETYON
  50720. OBJTYPE
  50721. OBJCODE
  50722. FRXNODES
  50723. INSERTXMLCONFIGRECORDS
  50724. XML Listener
  50725. READCONFIGURATION
  50726. APPNAME
  50727. RESETDOCUMENT
  50728. APPLYUSERTRANSFORM
  50729. GETDEFAULTUSERXSLT
  50730. HADERRORC
  50731. Nodes
  50732. FrxNodes
  50733. XXXX6
  50734. Nodes
  50735. FrxNodes
  50736. XXXX6
  50737. Nodes
  50738. FrxNodes
  50739. XXXX6
  50740. Nodes
  50741. ObjType
  50742. XXXX6
  50743. TLCALLEDEARLY
  50744. SETFRXDATASESSION
  50745. TARGETHANDLE
  50746. HADERROR
  50747. FILLRUNCOLLECTOR
  50748. LCNODE
  50749. XMLMODE
  50750. CURRENTBAND    
  50751. XMLRAWTAG
  50752. WRITERAW
  50753. INCLUDEBREAKSINDATA    
  50754. PAGENODES
  50755. NODES
  50756. OBJVALUE
  50757. COLUMNNODES
  50758. GETRUNNODECONTENTS
  50759. NOPAGEEJECT
  50760. COMMANDCLAUSES
  50761. CURRENTDOCUMENT
  50762. RUNCOLLECTORRESETLEVEL
  50763. RESETRUNCOLLECTOR
  50764. RESETREPORT
  50765. RESETDOCUMENT
  50766. APPLYUSERTRANSFORM
  50767. APPLYRDLTRANSFORM
  50768. APPLYUSERTRANSFORMTOOUTPUT
  50769. RESETDATASESSIONo
  50770. NERROR
  50771. CMETHOD
  50772. NLINE
  50773. CLOSETARGETFILE    
  50774. ISRUNNING    
  50775. QUIETMODE
  50776. CANCELREPORTh
  50777. RENDER
  50778. Nodes
  50779. ObjType
  50780. XXXX6
  50781. XXXXa
  50782. NFRXRECNO
  50783. NLEFT
  50784. NWIDTH
  50785. NHEIGHT
  50786. NOBJECTCONTINUATIONTYPE
  50787. CCONTENTSTOBERENDERED
  50788. GDIPLUSIMAGE
  50789. SUCCESSORGFXNORENDER
  50790. APPLYFX
  50791. INVOKEONCURRENTPASS
  50792. TARGETHANDLE
  50793. LCNODE
  50794. LONODE
  50795. LCFORMATTINGINFO
  50796. LCCONTENTS
  50797. LLTEXTTYPE    
  50798. LOBANDREF
  50799. LIBANDRECNO
  50800. SETFRXDATASESSION
  50801. OBJTYPE
  50802. INCLUDEBREAKSINDATA
  50803. CURRENTPAGE
  50804. CURRENTCOLUMN
  50805. NODES
  50806. OBJVALUE
  50807. GETRAWFORMATTINGINFO
  50808. XMLRAWNODE
  50809. CURRENTBAND    
  50810. FRXCURSOR
  50811. GETBANDFOR
  50812. UNIQUEID
  50813. FRXDATASESSION    
  50814. XMLRAWTAG
  50815. SHAREDPAGENO
  50816. PAGENO
  50817. SETCURRENTDATASESSION
  50818. BEFOREBAND
  50819. WRITERAW
  50820. RESETDATASESSIONN
  50821. Nodes
  50822. FrxNodes
  50823. XXXX6
  50824. NBANDOBJCODE    
  50825. NFRXRECNO
  50826. TLCONTINUEDBAND
  50827. INCLUDEPAGE
  50828. INCLUDEPAGEINOUTPUT
  50829. INVOKEONCURRENTPASS
  50830. TARGETHANDLE
  50831. LCBAND
  50832. LONODE
  50833. LCIDREF
  50834. LLFORMATBREAKBAND
  50835. LCINTERRUPTEDBAND
  50836. LLOMITBAND    
  50837. LOOBJECTS
  50838. SETFRXDATASESSION
  50839. INCLUDEBANDSWITHNOOBJECTS    
  50840. FRXCURSOR
  50841. GETOBJECTSINBAND
  50842. UNIQUEID
  50843. FRXDATASESSION
  50844. COUNT
  50845. NODES
  50846. OBJVALUE
  50847. SETCURRENTDATASESSION
  50848. SHAREDPAGENO
  50849. PAGENO
  50850. INCLUDEBREAKSINDATA
  50851. CURRENTBAND
  50852. WRITERAW    
  50853. XMLRAWTAG
  50854. CURRENTPAGE
  50855. CURRENTCOLUMN
  50856. RESETDATASESSION
  50857. SaveTargetFileName
  50858. Nodes
  50859. _ReportOutputConfig
  50860. OBJECTS-a
  50861. UniqueID
  50862. UniqueID
  50863. Nodes
  50864. FrxNodes
  50865. XXXX6
  50866. Nodes
  50867. ObjType
  50868. XXXX6
  50869. Nodes
  50870. FrxNodes
  50871. XXXX6
  50872. Nodes
  50873. FrxNodes
  50874. XXXX6
  50875. Nodes
  50876. FrxNodes
  50877. XXXX6
  50878. Nodes
  50879. FrxNodes
  50880. XXXX6
  50881. WINDOWS
  50882. Required FRX cursor is not available.
  50883. Required FRX cursor is not available.
  50884. HADERROR
  50885. SETFRXDATASESSION
  50886. ISSUCCESSOR
  50887. SUCCESSORGFXNORENDER!
  50888. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  50889. GFXNORENDERCLASS
  50890. GFXNORENDERCLASSLIB
  50891. LISELECT
  50892. LCDOCUMENT
  50893. LCREPORT
  50894. LCRDL
  50895. LCPAGE
  50896. LCCOL
  50897. LCDATA
  50898. LONODE
  50899. LOPARENT
  50900. TARGETHANDLE
  50901. APPLYUSERTRANSFORM
  50902. APPLYRDLTRANSFORM
  50903. VERIFYTARGETFILE
  50904. TARGETFILENAME
  50905. TARGETFILEEXT
  50906. ADDPROPERTY
  50907. OPENTARGETFILE
  50908. CONFIGURATIONTABLE
  50909. NODES
  50910. VERIFYNODENAMES
  50911. VERIFYATTRIBUTENAMES
  50912. INCLUDEBANDSWITHNOOBJECTS
  50913. XMLMODE
  50914. LOADFRXCURSOR    
  50915. FRXCURSOR
  50916. CREATEOBJECTCURSOR
  50917. FRXDATASESSION
  50918. BANDS
  50919. UNIQUEID
  50920. OBJECTS    
  50921. ISRUNNING
  50922. OBJVALUE
  50923. INCLUDEBREAKSINDATA
  50924. CURRENTDOCUMENT
  50925. WRITERAW    
  50926. XMLRAWTAG
  50927. XMLRAWCONV
  50928. COMMANDCLAUSES
  50929. GETVFPRDLCONTENTS    
  50930. PAGENODES
  50931. COLUMNNODES
  50932. AFTERREPORT!
  50933. INITIALIZEFORMATTINGCHANGESCURSOR
  50934. FORMATTINGCHANGES
  50935. PLATFORM
  50936. OBJTYPE
  50937. FRXRECNO    
  50938. DOMESSAGE
  50939. LASTERRORMESSAGE
  50940. RESETDATASESSION;
  50941. INCLUDEPAGE
  50942. XMLMODE
  50943. TWOPASSPROCESS
  50944. CURRENTPASS
  50945. OBJTYPE
  50946. OBJTYPE
  50947. FRXNODES
  50948. OBJTYPE+OBJCODE+IIF(OBJTYPE=C
  50949. 9999999_
  50950. 9999999_
  50951. SAFETYv
  50952. FIXEDv
  50953. INDEX ON &lcIndex TAG &lcTag
  50954. At least one required index tag is missing C
  50955. from the configuration table.
  50956. At least one required index tag is missing C
  50957. from the configuration table.
  50958. ObjType
  50959. TCALIAS
  50960. LLRETURN
  50961. LAREQUIRED
  50962. LIINDEX
  50963. LISELECT
  50964. LITAG
  50965. LCTAG
  50966. LCINDEX
  50967. LLSAFETYON    
  50968. LLFIXEDON    
  50969. LCMESSAGE
  50970. THIS    
  50971. DOMESSAGE
  50972. LASTERRORMESSAGE
  50973. INSERTXMLCONFIGRECORDST
  50974. VNEWVAL
  50975. THIS.CommandClauses.Fileb
  50976. THIS.CommandClauses.NoPageEjectb
  50977. NoPageEject-
  50978. COMMANDCLAUSES
  50979. FRXRecno
  50980. FRXRecno
  50981. NFRXRECNO
  50982. OOBJPROPERTIES
  50983. INVOKEONCURRENTPASS
  50984. TARGETHANDLE
  50985. SETFRXDATASESSION
  50986. FORMATTINGCHANGES
  50987. EVALUATECONTENTSVALUES
  50988. FRXRECNO
  50989. INCLUDEDATATYPEATTRIBUTES
  50990. VALUE
  50991. DTYPE
  50992. DTEXT
  50993. FORMATDATAVALUE
  50994. RESETDATASESSION
  50995. RUNCOLLECTOR
  50996. DATASESSIONv
  50997. Collection
  50998. Microsoft.XMLDOM
  50999. Microsoft.XMLDOM
  51000. /VFPData/reportdata
  51001. [@name='
  51002. ' and @execwhen='
  51003. ']/@execute
  51004. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  51005. RUNCOLLECTOR    
  51006. LISESSION
  51007. RESETDATASESSION
  51008. SETFRXDATASESSION
  51009. MEMBERDATAALIAS
  51010. LVVALUE
  51011. LCEXPR
  51012. LISELECT
  51013. LOXML    
  51014. LOXMLTEMP
  51015. FRXHEADERRECNO
  51016. LOADXML
  51017. STYLE
  51018. FRXRECNO
  51019. EXECUTE
  51020. EXECWHEN
  51021. DECLASS
  51022. EVALUATEUSEREXPRESSION
  51023. SELECTSINGLENODE
  51024. DOCUMENTELEMENT
  51025. GETKEY
  51026. TVNEWVAL
  51027. RUNCOLLECTORRESETLEVEL    
  51028. xmlrawtag,
  51029. xmlrawnode
  51030. xmlrawconv~
  51031. writeraw
  51032. includebreaksindata_assign#
  51033. xmlmode_assign
  51034. resetreport7
  51035. applyxslt|
  51036. currentdocument_assign
  51037. idattribute_assign1
  51038. idrefattribute_assign
  51039. xsltprocessorrdl_assign0
  51040. xsltprocessoruser_assign
  51041. resetdocument
  51042. verifyncname
  51043. includeformattinginlayoutobjects_assign
  51044. includebandswithnoobjects_assignk
  51045. verifynodenames
  51046. verifyattributenames
  51047. nopageeject_assign
  51048. loadprocessorobject
  51049. getrawformattinginfo
  51050. topattr_assign
  51051. leftattr_assign
  51052. heightattr_assign
  51053. widthattr_assign
  51054. contattr_assign
  51055. getvfprdlcontentsy 
  51056. includedatasourcesinvfprdl_assign
  51057. getpathedimageinfo54
  51058. applyusertransformtooutput
  51059. applyusertransform_assignM9
  51060. getdefaultuserxslt
  51061. setdomformattinginfo
  51062. synchxsltprocessoruser
  51063. insertxmlconfigrecords
  51064. xsltparameters_assignPG
  51065. getfrxlayoutobjectfieldlist9H
  51066. preparefrxcopy
  51067. removefrxcopy
  51068. adjustxsltparameterMQ
  51069. getrunnodecontents
  51070. addrunnode
  51071. includedatatypeattributes_assign'[
  51072. datatypeattr_assign
  51073. datatextattr_assign
  51074. initializeformattingchangescursor
  51075. formatdatavalue:]
  51076. pageimageattr_assign
  51077. evaluatestringtoboolean
  51078. applyrdltransform_accessO^
  51079. fixmsxmlobjectfordtds
  51080. frxcharsetsinuseU_
  51081. resetcallevaluatecontents
  51082. closetargetfile`b
  51083. setfrxdatasessionenvironmentEc
  51084. opentargetfilemc
  51085. AfterBand}c
  51086. Destroy
  51087. createconfigtable    j
  51088. Initpk
  51089. AfterReportal
  51090. ErrorIr
  51091. Render
  51092. BeforeBand
  51093. BeforeReport
  51094. invokeoncurrentpass5
  51095. verifyconfigtable
  51096. targetfileext_assign
  51097. setfrxrunstartupconditionsi
  51098. EvaluateContents-
  51099. resetruncollector
  51100. fillruncollector
  51101. runcollectorresetlevel_assign
  51102. ^5PROCEDURE createtherm
  51103. #define CTLCOLOR_MSGBOX             0
  51104. #define CTLCOLOR_EDIT               1
  51105. #define CTLCOLOR_LISTBOX            2
  51106. #define CTLCOLOR_BTN                3
  51107. #define CTLCOLOR_DLG                4
  51108. #define CTLCOLOR_SCROLLBAR          5
  51109. #define CTLCOLOR_STATIC             6
  51110. #define CTLCOLOR_MAX                7
  51111. #define COLOR_SCROLLBAR             0
  51112. #define COLOR_BACKGROUND            1
  51113. #define COLOR_ACTIVECAPTION         2
  51114. #define COLOR_INACTIVECAPTION       3
  51115. #define COLOR_MENU                  4
  51116. #define COLOR_WINDOW                5
  51117. #define COLOR_WINDOWFRAME           6
  51118. #define COLOR_MENUTEXT              7
  51119. #define COLOR_WINDOWTEXT            8
  51120. #define COLOR_CAPTIONTEXT           9
  51121. #define COLOR_ACTIVEBORDER         10
  51122. #define COLOR_INACTIVEBORDER       11
  51123. #define COLOR_APPWORKSPACE         12
  51124. #define COLOR_HIGHLIGHT            13
  51125. #define COLOR_HIGHLIGHTTEXT        14
  51126. #define COLOR_BTNFACE              15
  51127. #define COLOR_BTNSHADOW            16
  51128. #define COLOR_GRAYTEXT             17
  51129. #define COLOR_BTNTEXT              18
  51130. #define COLOR_INACTIVECAPTIONTEXT  19
  51131. #define COLOR_BTNHIGHLIGHT         20
  51132. #if("4" $ OS())
  51133. #define COLOR_3DDKSHADOW           21
  51134. #define COLOR_3DLIGHT              22
  51135. #define COLOR_INFOTEXT             23
  51136. #define COLOR_INFOBK               24
  51137. #define COLOR_DESKTOP           COLOR_BACKGROUND
  51138. #define COLOR_3DFACE            COLOR_BTNFACE
  51139. #define COLOR_3DSHADOW          COLOR_BTNSHADOW
  51140. #define COLOR_3DHIGHLIGHT       COLOR_BTNHIGHLIGHT
  51141. #define COLOR_3DHILIGHT         COLOR_BTNHIGHLIGHT
  51142. #define COLOR_BTNHILIGHT        COLOR_BTNHIGHLIGHT
  51143. #endif
  51144. IF ISNULL(THIS.ThermForm)
  51145.   DECLARE INTEGER GetSysColor IN Win32API INTEGER  
  51146.   LOCAL m.liThermTop, m.liThermLeft, m.liThermWidth, m.liThermHeight, m.liSession
  51147.   m.liSession = SET("DATASESSION")  
  51148.   THIS.resetDataSession()
  51149.   THIS.ThermForm = CREATEOBJECT("FORM")
  51150.   WITH THIS.ThermForm
  51151.      .ScaleMode = SCALEMODE_PIXELS   
  51152.      .Height = THIS.ThermFormHeight
  51153.      .HalfHeightCaption = .T.
  51154.      .Width = THIS.ThermFormWidth
  51155.      .AutoCenter = .T.
  51156.      .BorderStyle = BORDER_DOUBLE  && fixed dialog
  51157.      .ControlBox = .F.
  51158.      .Closable = (NOT THIS.IsRunning)
  51159.      .MaxButton = .F.
  51160.      .MinButton = .F.
  51161.      .Movable = (NOT THIS.IsRunning)
  51162.      .AlwaysOnTop = .T.
  51163.      .AllowOutput = .F.
  51164.      .AddObject("ThermBack","shape")
  51165.      .AddObject("ThermLabel","label")
  51166.      .AddObject("ThermShape","shape")
  51167.      m.liThermHeight = .Height - (THIS.ThermMargin* 2)
  51168.      m.liThermWidth =  .Width - (THIS.ThermMargin*2)
  51169.   ENDWITH
  51170.   THIS.setCurrentDataSession()
  51171.   THIS.SetThermFormCaption()    
  51172.   m.liThermTop = THIS.ThermMargin
  51173.   m.liThermLeft = THIS.ThermMargin  
  51174.   WITH THIS.ThermForm.ThermBack
  51175.      .Top = m.liThermTop     
  51176.      .Left = m.liThermLeft
  51177.      .Height = m.liThermHeight
  51178.      .Width = m.liThermWidth
  51179.      .Visible = .T.
  51180.      .BorderStyle = BORDER_SINGLE
  51181.      .BackStyle = 0     
  51182.   ENDWITH
  51183.   WITH THIS.ThermForm.ThermLabel
  51184.      .Top = (.Parent.Height - .Height) /2
  51185.      .Autosize = .T.
  51186.      .BackStyle = FILLSTYLE_SOLID      
  51187.      .Caption = ""
  51188.      .Visible = .T.
  51189.      .ForeColor = GetSysColor( COLOR_MENUTEXT )
  51190.   ENDWITH
  51191.   WITH THIS.ThermForm.ThermShape
  51192.      .Top = m.liThermTop +1    
  51193.      .Left = m.liThermLeft+1
  51194.      .Height = m.liThermHeight -2
  51195.      .Width = 0
  51196.      .Visible = .T.
  51197.      .BorderStyle = BORDER_NONE
  51198.      .BackStyle = FILLSTYLE_SOLID         
  51199.      .FillStyle = FILLSTYLE_SOLID    
  51200.      .BackColor = .Parent.BackColor
  51201.      .FillColor = GetSysColor(COLOR_HIGHLIGHT)
  51202.      .DrawMode = DRAWMODE_MERGE_PEN_NOT 
  51203.   ENDWITH
  51204.   SET DATASESSION TO (m.liSession)
  51205. ENDIF
  51206. RETURN NOT ISNULL(THIS.ThermForm)
  51207. ENDPROC
  51208. PROCEDURE secondstext_assign
  51209. LPARAMETERS m.vNewVal
  51210. IF VARTYPE(m.vNewVal) = "C"
  51211.    THIS.SecondsText = m.vNewVal
  51212. ENDIF   
  51213. ENDPROC
  51214. PROCEDURE thermformcaption_assign
  51215. LPARAMETERS m.vNewVal
  51216. IF VARTYPE(m.vNewVal) = "C"
  51217.    THIS.ThermFormCaption = m.vNewVal
  51218.    THIS.SetThermFormCaption()
  51219. ENDIF   
  51220. ENDPROC
  51221. PROCEDURE thermformheight_assign
  51222. LPARAMETERS m.vNewVal
  51223. IF (NOT THIS.IsRunning) AND VARTYPE(m.vNewVal) = "N" AND ;
  51224.    BETWEEN(m.vNewVal,30,SYSMETRIC(SYSMETRIC_SCREENHEIGHT )-30)  AND ;
  51225.    INT(m.vNewVal) # THIS.ThermFormHeight
  51226.    THIS.thermformheight = INT(m.vNewVal)
  51227.    IF THIS.ThermMargin > THIS.ThermFormHeight/4
  51228.       THIS.ThermMargin = THIS.ThermFormHeight/4
  51229.    ENDIF   
  51230.    THIS.thermForm = NULL
  51231. ENDIF   
  51232. ENDPROC
  51233. PROCEDURE thermformwidth_assign
  51234. LPARAMETERS m.vNewVal
  51235. IF (NOT THIS.IsRunning) AND VARTYPE(m.vNewVal) = "N" AND ;
  51236.    BETWEEN(m.vNewVal,100,SYSMETRIC( SYSMETRIC_SCREENWIDTH  )-100) AND ;
  51237.    INT(m.vNewVal) # THIS.ThermFormWidth 
  51238.    THIS.thermformwidth = INT(m.vNewVal)
  51239.    IF THIS.ThermMargin > THIS.ThermFormWidth/4
  51240.       THIS.ThermMargin = THIS.ThermFormWidth/4
  51241.    ENDIF   
  51242.    THIS.ThermForm = NULL
  51243. ENDIF   
  51244. ENDPROC
  51245. PROCEDURE thermmargin_assign
  51246. LPARAMETERS m.vNewVal
  51247. IF (NOT THIS.IsRunning) AND VARTYPE(m.vNewVal) = "N" AND ;
  51248.    BETWEEN(m.vNewVal,1,MIN(THIS.ThermFormHeight/4,THIS.ThermFormWidth/4)) AND ;
  51249.    INT(m.vNewVal) # THIS.ThermMargin
  51250.    THIS.thermmargin = INT(m.vNewVal)
  51251.    THIS.thermForm = NULL
  51252. ENDIF   
  51253. ENDPROC
  51254. PROCEDURE includeseconds_assign
  51255. LPARAMETERS m.vNewVal
  51256. IF VARTYPE(m.vNewVal) = "L"
  51257.    THIS.includeseconds = m.vNewVal
  51258. ENDIF   
  51259. ENDPROC
  51260. PROCEDURE getparentwindowref
  51261. LOCAL m.loForm, m.loTopForm, m.lcInWindow
  51262. * first top form in the list
  51263. * will be the current top form.
  51264. ASSERT TYPE("_SCREEN.ActiveForm") # "O"  OR ;
  51265.        INLIST(_SCREEN.ActiveForm.ShowWindow, 0,1,2)
  51266. m.loTopForm = NULL
  51267. IF TYPE("THIS.CommandClauses.InWindow") = "C"
  51268.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.InWindow))
  51269. ENDIF   
  51270. IF EMPTY(lcInWindow) AND TYPE("THIS.CommandClauses.Window") = "C"
  51271.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.Window))
  51272. ENDIF   
  51273. IF NOT EMPTY(m.lcInWindow) 
  51274.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  51275.         IF m.loForm.ShowWindow = 2  AND ;
  51276.            UPPER(m.loForm.Name) == m.lcInWindow
  51277.            m.loTopForm = m.loForm
  51278.            EXIT
  51279.         ENDIF
  51280.      ENDFOR
  51281.      
  51282. ENDIF
  51283. DO CASE
  51284. CASE VARTYPE(m.loTopForm) = "O"
  51285.     * already found
  51286. CASE _SCREEN.FormCount = 0 OR ;
  51287.      (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  51288.      _SCREEN.ActiveForm.ShowWindow = 0 )     && ShowWindow In Screen
  51289.              
  51290.      m.loTopForm = _SCREEN
  51291. CASE (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  51292.       _SCREEN.ActiveForm.ShowWindow = 2 )    && ShowWindow As Top Form
  51293.      m.loTopForm = _SCREEN.ActiveForm
  51294.              
  51295. OTHERWISE 
  51296.                                                
  51297.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  51298.         IF m.loForm.ShowWindow = 2 
  51299.            m.loTopForm = m.loForm
  51300.            EXIT
  51301.         ENDIF
  51302.      ENDFOR
  51303.              
  51304.      IF VARTYPE(m.loTopForm) # "O"
  51305.         m.loTopForm = _SCREEN
  51306.      ENDIF
  51307.                   
  51308. ENDCASE
  51309. IF VARTYPE(m.loTopForm) # "O" OR ;
  51310.    EMPTY(m.loTopForm.Name)
  51311.    m.loTopForm = NULL
  51312. ENDIF
  51313. RETURN m.loTopForm     
  51314. ENDPROC
  51315. PROCEDURE setthermformcaption
  51316. IF NOT ISNULL(THIS.ThermForm)
  51317.    IF EMPTY(THIS.ThermFormCaption)
  51318.       
  51319.       IF TYPE("THIS.CommandClauses.File") = "C"
  51320.          LOCAL m.cName
  51321.          IF EMPTY(THIS.PrintJobName)
  51322.             m.cName = PROPER(JUSTFNAME(THIS.CommandClauses.File))
  51323.          ELSE
  51324.             m.cName = THIS.PrintJobName
  51325.          ENDIF   
  51326.          THIS.ThermForm.Caption = ;
  51327.             m.cName + ": " + OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  51328.       ELSE
  51329.          THIS.ThermForm.Caption = ""
  51330.       ENDIF
  51331.    ELSE   
  51332.       THIS.ThermForm.Caption = THIS.ThermFormCaption
  51333.    ENDIF
  51334. ENDIF   
  51335. ENDPROC
  51336. PROCEDURE thermcaption_assign
  51337. LPARAMETERS m.vNewVal
  51338. IF VARTYPE(m.vNewVal) = "C"
  51339.    LOCAL m.lcType, m.cMessage
  51340.    m.cMessage = ""
  51341.    TRY 
  51342.     m.lcType = VARTYPE(EVALUATE(m.vNewVal))
  51343.       IF m.lcType = "C"
  51344.         THIS.ThermCaption = m.vNewVal
  51345.     ENDIF
  51346.    CATCH 
  51347.    ENDTRY     
  51348. ENDIF   
  51349. ENDPROC
  51350. PROCEDURE initstatustext_assign
  51351. LPARAMETERS m.vNewVal
  51352. IF VARTYPE(m.vNewVal) = "C"
  51353.    THIS.InitStatusText = m.vNewVal
  51354. ENDIF   
  51355. ENDPROC
  51356. PROCEDURE prepassstatustext_assign
  51357. LPARAMETERS m.vNewVal
  51358. IF VARTYPE(m.vNewVal) = "C"
  51359.    THIS.PrepassStatusText = m.vNewVal
  51360. ENDIF   
  51361. ENDPROC
  51362. PROCEDURE runstatustext_assign
  51363. LPARAMETERS m.vNewVal
  51364. IF VARTYPE(m.vNewVal) = "C"
  51365.    THIS.RunStatusText = m.vNewVal
  51366. ENDIF   
  51367. ENDPROC
  51368. PROCEDURE resetuserfeedback
  51369. LPARAMETERS m.tlResetTimes
  51370. THIS.CurrentRecord = 0
  51371. THIS.PercentDone = 0
  51372. IF m.tlResetTimes
  51373.    THIS.ReportStartRunDateTime= DATETIME()
  51374.    THIS.ReportStopRunDateTime= DTOT({})
  51375. ENDIF   
  51376. ENDPROC
  51377. PROCEDURE getreportscopedriver
  51378. LOCAL m.liSelect, m.lcAlias, ;
  51379.       m.liSkips,  laSkips[1]
  51380. THIS.designatedDriver = THIS.drivingAlias
  51381. * used later if we have to cancel report as
  51382. * a Successor
  51383. THIS.setFRXDataSession()
  51384. IF USED("frx")
  51385.    m.liSelect = SELECT(0)
  51386.    m.lcAlias = ""
  51387.    SELECT FRX
  51388.    * first look for any target alias that
  51389.    * is the same as the driver
  51390.    SCAN ALL FOR ObjType = FRX_OBJTYP_BAND AND ;
  51391.            Objcode = FRX_OBJCOD_DETAIL AND ;
  51392.            TYPE(Expr) = "C" AND ;
  51393.            NOT (EMPTY(Expr)  OR DELETED())
  51394.        m.lcAlias = ALLTRIM(Expr)
  51395.        THIS.setCurrentDataSession()
  51396.        m.lcAlias = UPPER(EVALUATE(m.lcAlias)) 
  51397.        THIS.setFRXDataSession()
  51398.        IF m.lcAlias == UPPER(THIS.drivingAlias)
  51399.           EXIT
  51400.        ENDIF
  51401.    ENDSCAN
  51402.    IF m.lcAlias == UPPER(THIS.drivingAlias)
  51403.       SELECT (m.liSelect)
  51404.       * if the driver is also a target alias,
  51405.       * don't touch.
  51406.       * otherwise:
  51407.    ELSE 
  51408.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51409.               Objcode = FRX_OBJCOD_DETAIL AND ;
  51410.               Platform = FRX_PLATFORM_WINDOWS AND ;
  51411.               NOT (EMPTY(Expr) OR DELETED())
  51412.       IF FOUND()
  51413.          * use the first detail band, on the theory
  51414.          * that people are going to put pre-processing 
  51415.          * calculations before other bands, 
  51416.          * so an early band has the best chance to be
  51417.          * the right driver.
  51418.          m.lcAlias = ALLTRIM(Expr)
  51419.          THIS.setCurrentDataSession()
  51420.          THIS.drivingAlias = UPPER(EVALUATE(m.lcAlias))
  51421.          THIS.setFRXDataSession()
  51422.          SELECT (m.liSelect)
  51423.       ELSE   
  51424.          * adjust the driver based on any
  51425.          * one to many relationships we can find.
  51426.          SELECT (m.liSelect)
  51427.          THIS.setCurrentDataSession()
  51428.          m.lcAlias = THIS.drivingAlias
  51429.          m.liSelect = SELECT(0)
  51430.          DO WHILE NOT EMPTY(m.lcAlias)
  51431.             SELECT (m.lcAlias)
  51432.             m.liSkips = ALINES(laSkips,SET("SKIP"),",")
  51433.             IF m.liSkips = 0 OR EMPTY(laSkips[1])
  51434.                THIS.drivingAlias = m.lcAlias
  51435.                m.lcAlias = ""
  51436.             ELSE
  51437.                m.lcAlias = laSkips[1]
  51438.                * it doesn't really matter how many lines there
  51439.                * are in the array; this is not going to be perfect
  51440.                * but we can't predict which child 
  51441.                * has the most records.
  51442.             ENDIF
  51443.          ENDDO
  51444.          SELECT (m.liSelect)
  51445.       ENDIF   
  51446.    ENDIF  
  51447.    RETURN .F.    
  51448. ENDIF
  51449. ENDPROC
  51450. PROCEDURE synchstatus
  51451. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  51452. IF THIS.isRunning AND (NOT THIS.hadError) AND ;
  51453.    THIS.frxBandRecno = m.nFRXRecNo
  51454.    THIS.setCurrentDataSession() 
  51455.    IF THIS.drivingAliasCurrentRecno  # RECNO(THIS.drivingAlias)
  51456.       THIS.currentRecord = THIS.CurrentRecord + 1
  51457.       THIS.drivingAliasCurrentRecno = RECNO(THIS.drivingAlias)
  51458.    ENDIF   
  51459.    IF THIS.currentRecord >= THIS.CommandClauses.RecordTotal
  51460.       IF THIS.CurrentPass = 0 AND THIS.TwoPassProcess
  51461.          THIS.resetUserFeedback() 
  51462.       ELSE
  51463.          THIS.currentRecord = THIS.CommandClauses.RecordTotal
  51464.       ENDIF
  51465.    ENDIF
  51466.    THIS.UpdateStatus()
  51467.    THIS.resetDataSession()
  51468. ENDIF  
  51469. ENDPROC
  51470. PROCEDURE thermprecision_assign
  51471. LPARAMETERS m.vNewVal
  51472. IF VARTYPE(m.vNewVal) = "N" 
  51473.    THIS.thermPrecision  = ABS(INT(m.vNewVal))
  51474. ENDIF 
  51475. ENDPROC
  51476. PROCEDURE setfrxrunstartupconditions
  51477. DODEFAULT()
  51478. IF TYPE("THIS.CommandClauses.Summary") # "L"
  51479.    ADDPROPERTY(THIS.CommandClauses,"Summary",.F.)
  51480. ENDIF   
  51481. IF TYPE("THIS.CommandClauses.RecordTotal") # "N"
  51482.    ADDPROPERTY(THIS.CommandClauses,"RecordTotal",0)
  51483. ENDIF   
  51484. ENDPROC
  51485. PROCEDURE BeforeBand
  51486. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  51487. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  51488. IF THIS.successorSys2024 = "Y" AND ;
  51489.    THIS.CurrentPass = LISTENER_FULLPASS
  51490.    * user cancelled during the prepass,
  51491.    * we need to re-cancel.
  51492.    THIS.setCurrentDataSession()
  51493.    IF USED(THIS.designatedDriver)
  51494.       GO BOTTOM IN (THIS.designatedDriver)
  51495.    ENDIF   
  51496. ENDIF   
  51497. THIS.synchStatus(m.nBandObjCode,m.nFRXRecNo)
  51498. THIS.resetDataSession()
  51499. ENDPROC
  51500. PROCEDURE UnloadReport
  51501. IF THIS.IsRunning
  51502.    THIS.IsRunning = .F.
  51503.    THIS.PopGlobalSets()
  51504. ENDIF   
  51505. THIS.ReportStopRunDateTime = DATETIME()
  51506. THIS.ClearStatus() 
  51507. THIS.ThermForm = NULL  
  51508. DODEFAULT()
  51509. THIS.resetDataSession()
  51510. ENDPROC
  51511. PROCEDURE DoStatus
  51512. LPARAMETERS m.cMessage
  51513. LOCAL m.loParentForm, m.lcCaption, m.lcParentFormName
  51514. NODEFAULT
  51515. IF (NOT (THIS.QuietMode or ;
  51516.    (THIS.IsRunning AND THIS.CommandClauses.NoDialog)))
  51517.    IF EMPTY(m.cMessage) OR ISNULL(m.cMessage)
  51518.       m.cMessage = ""
  51519.    ENDIF
  51520.    m.lcCaption = EVALUATE(THIS.ThermCaption)
  51521.    IF ((NOT ISNULL(THIS.ThermForm)) OR (THIS.CreateTherm()) )
  51522.       WITH THIS.ThermForm
  51523.       
  51524.          IF THIS.IsRunning
  51525.             .Closable = .F.
  51526.             .Movable = .F.
  51527.          ENDIF
  51528.       
  51529.         .ThermShape.Width = MAX( (((THIS.PercentDone/100) * .ThermBack.Width)-2) ,0)
  51530.       
  51531.         IF NOT .Visible
  51532.         
  51533.            m.loParentForm = THIS.GetParentWindowRef()
  51534.            
  51535.            DO CASE
  51536.            CASE VARTYPE(m.loParentForm) # "O" AND (NOT _SCREEN.Visible)
  51537.               m.lcParentFormName = "MACDESKTOP"
  51538.            CASE VARTYPE(m.loParentForm) # "O"
  51539.               m.lcParentFormName = "SCREEN"              
  51540.            CASE (NOT m.loParentForm.Visible) AND ;
  51541.               (m.loParentForm.DeskTop OR NOT EMPTY(m.loParentForm.MacDesktop) OR ;
  51542.               m.loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  51543.               * in many cases, 
  51544.               * they've probably made a programming error,
  51545.               * the parent should be visible according to
  51546.               * the requirements of REPORT FORM ... IN WINDOW
  51547.               * if it's a WINDOW clause they
  51548.               * have no need to show it, might not be an error
  51549.               * Either way, they should see the therm
  51550.               * to know that the report is progressing                
  51551.               m.lcParentFormName = "MACDESKTOP"
  51552.            CASE (NOT m.loParentForm.Visible) 
  51553.               * same comment as above
  51554.               m.lcParentFormName = "SCREEN"
  51555.            OTHERWISE
  51556.               m.lcParentFormName = m.loParentForm.Name
  51557.            ENDCASE
  51558.            
  51559.            SHOW WINDOW (.Name) IN WINDOW (m.lcParentFormName) 
  51560.            .AlwaysOnTop = .T.
  51561.            .AutoCenter = .T.
  51562.            .Visible = .T.
  51563.         
  51564.         ENDIF
  51565.         .ThermLabel.Visible = .F.
  51566.         .ThermLabel.Caption = m.lcCaption     
  51567.         .ThermLabel.Left = (.Width - .ThermLabel.Width) /2  && must be after visible        
  51568.         .ThermLabel.Visible = .T.     
  51569.       
  51570.       ENDWITH
  51571.    ENDIF
  51572. ENDIF   
  51573. ENDPROC
  51574. PROCEDURE ClearStatus
  51575. NODEFAULT
  51576. IF NOT ISNULL(THIS.ThermForm) 
  51577.    IF THIS.ThermForm.Visible
  51578.       THIS.ThermForm.Visible = .F.
  51579.    ENDIF
  51580. ENDIF
  51581. IF NOT ISNULL(THIS.Successor)
  51582.    THIS.Successor.ClearStatus()
  51583. ENDIF
  51584. ENDPROC
  51585. PROCEDURE BeforeReport
  51586. DODEFAULT()
  51587. * THIS.ResetUserFeedback(.T.)
  51588. THIS.DrivingAliasCurrentRecno = 0
  51589. THIS.IsRunning = .T.
  51590. THIS.resetDataSession()
  51591. ENDPROC
  51592. PROCEDURE Init
  51593. IF DODEFAULT() 
  51594.    THIS.InitStatusText = OUTPUTCLASS_INITSTATUS_LOC
  51595.    THIS.PrepassStatusText = OUTPUTCLASS_PREPSTATUS_LOC
  51596.    THIS.RunStatusText =  OUTPUTCLASS_RUNSTATUS_LOC
  51597.    THIS.SecondsText = OUTPUTCLASS_TIME_SECONDS_LOC
  51598.    THIS.thermCaption = OUTPUTCLASS_THERMCAPTION_LOC 
  51599.    RETURN (NOT THIS.HadError)
  51600.    RETURN .F.
  51601. ENDIF
  51602. ENDPROC
  51603. PROCEDURE AfterReport
  51604. IF SYS(2024) # "Y" 
  51605.    IF THIS.IsRunning OR TYPE("THIS.CommandClauses.RecordTotal") = "N"
  51606.       THIS.CurrentRecord = THIS.CommandClauses.RecordTotal
  51607.    ENDIF   
  51608.    THIS.UpdateStatus() 
  51609. ENDIF
  51610. THIS.IsRunning = .F.
  51611. THIS.ClearStatus() 
  51612. THIS.designatedDriver = ""
  51613. THIS.successorSys2024 = "N"
  51614. THIS.ThermForm = NULL  
  51615. THIS.ReportStopRunDateTime = DATETIME()
  51616. THIS.PopGlobalSets()
  51617. DODEFAULT()
  51618. ENDPROC
  51619. PROCEDURE CancelReport
  51620. IF THIS.IsRunning AND ;
  51621.    (THIS.QuietMode OR ;
  51622.    (THIS.pageLimit > 0 AND THIS.PageNo > THIS.pageLimit) OR ;
  51623.     (NOT THIS.AllowModalMessages) OR ;
  51624.     THIS.DoMessage(OUTPUTCLASS_REPORT_CANCELQUERY_LOC,;
  51625.                    MB_ICONQUESTION+MB_YESNO) =  IDYES )
  51626.    IF THIS.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  51627.       * make an exception for this Listener
  51628.       * to the rule that Successors don't 
  51629.       * handle cancelling the report, because
  51630.       * this guy's job is to handle user intervention:
  51631.       THIS.successorSys2024 = "Y"
  51632.       LOCAL m.liSession
  51633.       m.liSession = SET("DATASESSION")
  51634.       THIS.setCurrentDataSession()
  51635.       IF USED(THIS.designatedDriver)
  51636.          GO BOTTOM IN (THIS.designatedDriver)
  51637.       ENDIF   
  51638.       SET DATASESSION TO (m.liSession)
  51639.    ENDIF
  51640.       
  51641.    DODEFAULT() 
  51642.    IF SYS(2024) = "Y"  OR THIS.IsSuccessor
  51643.       THIS.ThermForm = NULL
  51644.       IF (THIS.pageLimit = -1 OR THIS.PageNo <= THIS.pageLimit)
  51645.          THIS.DoMessage(OUTPUTCLASS_REPORT_INCOMPLETE_LOC, ;
  51646.                         MB_ICONEXCLAMATION)
  51647.          THIS.lastErrorMessage = OUTPUTCLASS_REPORT_INCOMPLETE_LOC                        
  51648.       ENDIF                        
  51649.    ENDIF
  51650.    NODEFAULT   
  51651. ENDIF
  51652. ENDPROC
  51653. PROCEDURE pushglobalsets
  51654. DODEFAULT()
  51655. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  51656.    PUSH KEY CLEAR
  51657.    LOCAL m.lcRef
  51658.    SET MESSAGE TO ""
  51659.    THIS.SetNotifyCursor = (SET("Notify",2) = "ON")
  51660.    IF THIS.SetNotifyCursor
  51661.       SET NOTIFY CURSOR OFF
  51662.    ENDIF   
  51663.    THIS.OnEscapeCommand = ON("ESCAPE")   
  51664.    m.lcRef = SYS(2015)   
  51665.    PUBLIC &lcRef.   
  51666.    STORE THIS TO (m.lcRef)
  51667.    ON ESCAPE &lcRef..CancelReport()      
  51668.    THIS.EscapeReference = m.lcRef   
  51669.    THIS.SetEscape = (SET("ESCAPE")="OFF") 
  51670.    IF THIS.SetEscape
  51671.       SET ESCAPE ON
  51672.    ENDIF   
  51673. ENDIF   
  51674. ENDPROC
  51675. PROCEDURE popglobalsets
  51676. DODEFAULT()
  51677. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  51678.    LOCAL m.lcRef
  51679.    m.lcRef = THIS.EscapeReference
  51680.    IF (NOT EMPTY(m.lcRef)) AND ;
  51681.        TYPE(m.lcRef) = "O"
  51682.       * push occurred earlier
  51683.       STORE NULL TO (m.lcRef)
  51684.       RELEASE &lcRef.
  51685.       THIS.escapeReference = ""
  51686.       m.lcRef = THIS.OnEscapeCommand
  51687.       ON ESCAPE &lcRef
  51688.       POP KEY
  51689.       IF THIS.SetNotifyCursor
  51690.          SET NOTIFY CURSOR ON
  51691.       ENDIF   
  51692.       IF THIS.SetEscape 
  51693.          SET ESCAPE OFF
  51694.       ENDIF   
  51695.    ENDIF   
  51696. ENDIF   
  51697. ENDPROC
  51698. PROCEDURE getfrxstartupinfo
  51699. DODEFAULT()
  51700. LOCAL m.llFRXAvailable, m.lcAlias
  51701. m.llFRXAvailable = THIS.getReportScopeDriver() 
  51702. IF m.llFRXAvailable
  51703.    THIS.SetFRXDataSession()
  51704.    THIS.FRXBandRecno = 0
  51705.    SELECT FRX
  51706.    IF THIS.CommandClauses.Summary
  51707.       * don't use groups unless
  51708.       * we're forced to by Summary.
  51709.       * Group usage will not work if
  51710.       * there's a group on .T. or some
  51711.       * other nonsensical expression that
  51712.       * doesn't change.
  51713.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51714.           Objcode = FRX_OBJCOD_GROUPHEADER AND ;
  51715.           Platform = FRX_PLATFORM_WINDOWS AND ;
  51716.           NOT DELETED()
  51717.       DO WHILE NOT EOF()
  51718.          * find the innermost group
  51719.          THIS.FRXBandRecno = RECNO()
  51720.          CONTINUE
  51721.       ENDDO        
  51722.       
  51723.       IF THIS.frxBandRecno = 0
  51724.          * no groups in a Summary report
  51725.          * doesn't make a lot of sense, but
  51726.          * can happen.
  51727.           LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51728.              Objcode = FRX_OBJCOD_PAGEHEADER AND ;
  51729.              Platform = FRX_PLATFORM_WINDOWS AND ;
  51730.              NOT DELETED()
  51731.           IF NOT EOF()
  51732.              THIS.FRXBandRecno = RECNO()
  51733.           ENDIF     
  51734.       ENDIF
  51735.    ENDIF
  51736.       
  51737.    IF THIS.FRXBandRecno = 0
  51738.       * not a Summary report.
  51739.       * look for the appropriate detail
  51740.       * using the report driver
  51741.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51742.                  Objcode = FRX_OBJCOD_DETAIL AND ;
  51743.                  Platform = FRX_PLATFORM_WINDOWS AND ;
  51744.                  TYPE(Expr) = "C" AND ;
  51745.                  NOT (EMPTY(Expr) OR DELETED())
  51746.        DO WHILE NOT EOF()
  51747.           m.lcAlias = ALLTRIM(Expr)
  51748.           THIS.SetCurrentDataSession()             
  51749.           m.lcAlias = UPPER(EVALUATE(m.lcAlias))
  51750.           THIS.SetFRXDataSession()                          
  51751.           IF m.lcAlias == UPPER(THIS.DrivingAlias)             
  51752.              THIS.FRXBandRecno = RECNO()
  51753.           ENDIF   
  51754.           CONTINUE && try not to use the first detail band
  51755.        ENDDO
  51756.    ENDIF   
  51757.    IF THIS.frxBandRecno = 0
  51758.       * couldn't match up a band with
  51759.       * the known driver
  51760.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51761.            Objcode = FRX_OBJCOD_DETAIL AND ;
  51762.            Platform = FRX_PLATFORM_WINDOWS AND ;
  51763.            EMPTY(Expr) AND NOT DELETED()
  51764.       IF NOT EOF()
  51765.          THIS.FRXBandRecno = RECNO()      
  51766.       ELSE
  51767.          IF THIS.FRXBandRecno = 0 
  51768.             LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  51769.                  Platform = FRX_PLATFORM_WINDOWS AND ;
  51770.                  Objcode = FRX_OBJCOD_DETAIL AND ;
  51771.                  NOT DELETED()
  51772.             IF NOT EOF()
  51773.                THIS.FRXBandRecno = RECNO()
  51774.             ENDIF  
  51775.          ENDIF               
  51776.       ENDIF        
  51777.    ENDIF   
  51778. ENDIF
  51779. THIS.setCurrentDataSession()
  51780. ENDPROC
  51781. PROCEDURE UpdateStatus
  51782. NODEFAULT
  51783. * the THIS.IsRunning check here
  51784. * make sure that this code doesn't
  51785. * run if the Engine calls UpdateStatus
  51786. * after we're through
  51787. IF THIS.isRunning
  51788.    LOCAL m.liRecTotal, m.lnNewPercent, m.llShow
  51789.    m.liRecTotal = THIS.CommandClauses.RecordTotal 
  51790.    IF m.liRecTotal > 0 
  51791.       m.lnNewPercent = ROUND(THIS.CurrentRecord/m.liRecTotal,(THIS.ThermPrecision + 2) ) * 100
  51792.       IF (THIS.PercentDone # m.lnNewPercent)
  51793.          THIS.PercentDone = m.lnNewPercent
  51794.          m.llShow = .T.
  51795.          #IF OUTPUTCLASS_DEBUGGING 
  51796.              ? THIS.PercentDone, THIS.CurrentRecord, m.liRecTotal, THIS.PageTotal
  51797.              ? REPL(OUTPUTCLASS_STATUSCHAR_PCT_DONE,INT(THIS.PercentDone/100* OUTPUTCLASS_ONE_HUNDRED_PCT_MARK))+ ;
  51798.                REPL(OUTPUTCLASS_STATUSCHAR_PCT_NOT_DONE,MAX(FLOOR(OUTPUTCLASS_ONE_HUNDRED_PCT_MARK - ;
  51799.                                                             (OUTPUTCLASS_ONE_HUNDRED_PCT_MARK *THIS.PercentDone/100)),0) ) 
  51800.          #ENDIF                
  51801.       ENDIF
  51802.    ELSE
  51803.       m.llShow = .T.         
  51804.    ENDIF   
  51805.    IF m.llShow
  51806.       THIS.DoStatus( IIF(THIS.CurrentPass = LISTENER_PREPASS  AND THIS.TwoPassProcess,;
  51807.                      THIS.PrepassStatusText, ;
  51808.                      THIS.RunStatusText) )
  51809.    ENDIF                     
  51810. ENDIF   
  51811. ENDPROC
  51812. PROCEDURE LoadReport
  51813. IF DODEFAULT()
  51814.    THIS.ResetUserFeedback(.T.)
  51815.    IF NOT (THIS.QuietMode OR ;
  51816.            (TYPE("THIS.CommandClauses.NoDialog") = "L" AND ;
  51817.            THIS.CommandClauses.NoDialog) )
  51818.       THIS.DoStatus(THIS.initStatusText) 
  51819.       * NB: a user can call LoadReport manually,
  51820.       * hence the need for a TYPE() check here.
  51821.    ENDIF   
  51822.    THIS.PushGlobalSets()
  51823.    THIS.ClearStatus()
  51824.    RETURN .F.
  51825. ENDIF
  51826. ENDPROC
  51827. PROCEDURE AfterBand
  51828. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  51829. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  51830. THIS.synchStatus(m.nBandObjCode,m.nFRXRecNo)
  51831. THIS.resetDataSession()
  51832. ENDPROC
  51833. PROCEDURE Destroy
  51834. STORE NULL TO THIS.thermForm 
  51835. DODEFAULT()
  51836. ENDPROC
  51837. PROCEDURE readconfiguration_assign
  51838. LPARAMETERS m.vNewVal
  51839. IF VARTYPE(m.vNewVal) = "N" AND NOT THIS.IsRunning
  51840.    THIS.ReadConfiguration = m.vNewVal
  51841. ENDIF   
  51842. ENDPROC
  51843. PROCEDURE setconfiguration
  51844. LPARAMETERS m.tlCalledFromInit
  51845. IF NOT THIS.IsRunning 
  51846.    * do some config work, don't change sessions --
  51847.    * at this point we don't have our private session
  51848.    * if we're being called in the Init
  51849.    LOCAL m.liSelect, m.lcPEM, m.llOpened, m.lcOrder, m.liType, m.llQuiet
  51850.    m.liSelect = SELECT(0)
  51851.    IF NOT USED("OutputConfig")
  51852.       * if called from Init, 
  51853.       * do this in quietmode
  51854.       * because the caller has no
  51855.       * opportunity to 
  51856.       * turn off the message
  51857.       m.llQuiet = (m.tlCalledFromInit AND NOT THIS.QuietMode)
  51858.       IF m.llQuiet
  51859.          THIS.QuietMode = .T.
  51860.       ENDIF
  51861.       THIS.GetConfigTable()
  51862.       IF m.llQuiet
  51863.          THIS.QuietMode = .F.
  51864.       ENDIF
  51865.         * CChalom
  51866.         * Sometimes users erase one of the Configuration table files, like the CDX, FPT or DBF
  51867.         * So let's check if it's safe
  51868.         IF FILE(THIS.ConfigurationTable) AND ;
  51869.                 FILE(FORCEEXT(THIS.ConfigurationTable, "CDX")) AND ;
  51870.                 FILE(FORCEEXT(THIS.ConfigurationTable, "FPT"))
  51871.             USE (THIS.ConfigurationTable) ALIAS "OutputConfig" IN 0 AGAIN NOUPDATE SHARED
  51872.             m.llOpened = .T.
  51873.         ELSE 
  51874.             m.llOpened = .F.
  51875.         ENDIF
  51876.    ELSE 
  51877.       m.lcOrder = ORDER("OutputConfig")
  51878.       SET ORDER TO ObjCode
  51879.    ENDIF
  51880.    IF (NOT THIS.HadError) AND THIS.VerifyConfigTable("OutputConfig")
  51881.       SELECT OutputConfig
  51882.       m.liType = THIS.ConfigurationObjtype
  51883.       SCAN FOR ObjType = m.liType AND ;
  51884.             NOT(DELETED() OR ;
  51885.                 ObjName == "" OR ;
  51886.                 ObjValue =="" )
  51887.           
  51888.          IF PEMSTATUS(THIS,ObjName,5) 
  51889.             m.lcPEM = UPPER(PEMSTATUS(THIS,ObjName,3))
  51890.             DO CASE
  51891.             CASE lcPEM == "PROPERTY"
  51892.                STORE EVAL(ObjValue) TO ("THIS."+ObjName)
  51893.             CASE INLIST("|"+lcPEM+"|","|METHOD|","|EVENT|")
  51894.                EVAL("THIS."+ObjName+"("+ObjValue+")")
  51895.             OTHERWISE
  51896.             ENDCASE
  51897.           ENDIF
  51898.       ENDSCAN
  51899.       IF m.llOpened
  51900.          USE IN OutputConfig
  51901.       ELSE
  51902.          SET ORDER TO (m.lcOrder) IN OutputConfig   
  51903.       ENDIF   
  51904.    ENDIF   
  51905.    SELECT (m.liSelect)
  51906. ENDIF   
  51907. ENDPROC
  51908. PROCEDURE getconfigtable
  51909. LPARAMETERS m.tlForceExternal
  51910. LOCAL m.lcDBF, m.lcPath
  51911. m.lcDBF = ""
  51912. IF m.tlForceExternal OR (NOT EMPTY(SYS(2000,FULLPATH(FORCEEXT(OUTPUTCLASS_EXTERNALDBF,"DBF")))))
  51913.    m.lcDBF = FULLPATH(FORCEEXT(OUTPUTCLASS_EXTERNALDBF,"DBF"))
  51914.    m.lcDBF = FORCEEXT(OUTPUTCLASS_INTERNALDBF,"DBF")
  51915. ENDIF
  51916. * CChalom
  51917. * Sometimes users erase one of the COnfiguration table files, like the CDX, FPT or DBF
  51918. * So let's check if it's safe
  51919. LOCAL llIsDBF
  51920. llIsDBF = FILE(m.lcDBF) AND ;
  51921.             FILE(FORCEEXT(m.lcDBF, "CDX")) AND ;
  51922.             FILE(FORCEEXT(m.lcDBF, "FPT"))
  51923. IF NOT llIsDBF && One or more files are missing, so it's safer to delete them all
  51924.     TRY 
  51925.         DELETE FILE (m.lcDBF)
  51926.     CATCH 
  51927.     ENDTRY
  51928.     TRY 
  51929.         DELETE FILE (FORCEEXT(m.lcDBF, "CDX"))
  51930.     CATCH 
  51931.     ENDTRY
  51932.     TRY 
  51933.         DELETE FILE (FORCEEXT(m.lcDBF, "FPT"))
  51934.     CATCH 
  51935.     ENDTRY
  51936. ENDIF 
  51937. * IF NOT (FILE(m.lcDBF) OR THIS.IsRunning)
  51938. IF NOT (llIsDBF OR THIS.IsRunning)
  51939.       m.lcPath = THIS.GetPathForExternals()
  51940.       * this may be the internal *or* external dbf name;
  51941.       * we could be testing and not yet built into an app,
  51942.       * so accept either, before the next test:
  51943.       m.lcDBF = FORCEPATH(m.lcDBF,m.lcPath) 
  51944.       
  51945.       IF NOT FILE(m.lcDBF)
  51946.          * now force to the external name:
  51947.          m.lcDBF = FORCEEXT(FORCEPATH(OUTPUTCLASS_EXTERNALDBF,m.lcPath),"DBF")
  51948.          * now check again
  51949.          IF NOT FILE(m.lcDBF)
  51950.             THIS.CreateConfigTable(m.lcDBF)
  51951.             IF FILE(m.lcDBF)
  51952.                THIS.DoMessage(OUTPUTCLASS_CONFIGTABLECREATED_LOC)
  51953.             ENDIF
  51954.          ENDIF
  51955.       ENDIF
  51956. ENDIF 
  51957. IF NOT FILE(m.lcDBF)
  51958.    m.lcDBF = ""
  51959. ENDIF  
  51960. THIS.ConfigurationTable = m.lcDBF
  51961. RETURN m.lcDBF
  51962. ENDPROC
  51963. PROCEDURE createconfigtable
  51964. LPARAMETERS m.tcDBF, m.tlOverWrite
  51965. LOCAL m.liSelect, m.lcFile
  51966. m.lcFile = FORCEEXT(m.tcDBF,"DBF")
  51967. IF (NOT EMPTY(SYS(2000,m.lcFile))) AND m.tlOverWrite
  51968.    ERASE (m.lcFile) RECYCLE
  51969.    ERASE (FORCEEXT(m.lcFile,"FPT")) RECYCLE
  51970.    ERASE (FORCEEXT(m.lcFile,"CDX")) RECYCLE   
  51971. ENDIF   
  51972. m.liSelect = SELECT(0)
  51973. SELECT 0
  51974. CREATE TABLE (m.lcFile) FREE ;
  51975.    (objtype i, ;
  51976.     objcode i, ;
  51977.     objname v(60), ;
  51978.     objvalue v(60), ;
  51979.     objinfo m)
  51980. IF NOT EMPTY(ALIAS()) && can happen if SAFETY ON and they decide not to overwrite    
  51981.    INDEX ON Objtype TAG ObjType
  51982.    INDEX ON ObjCode TAG ObjCode
  51983.    INDEX ON ObjName TAG ObjName
  51984.    INDEX ON ObjValue TAG ObjValue
  51985.    INDEX ON DELETED() TAG OnDeleted    
  51986.    INSERT INTO (ALIAS()) VALUES ;
  51987.       (OUTPUTCLASS_OBJTYPE_CONFIG,0,'DoMessage','"Welcome to the demo run!",64','Sample initialization/config method call')
  51988.    DELETE NEXT 1
  51989.    INSERT INTO (ALIAS()) VALUES ;
  51990.      (OUTPUTCLASS_OBJTYPE_CONFIG,0,'TargetFileName','"xxx"','Sample initialization/config property')
  51991.    DELETE NEXT 1
  51992.    USE
  51993. ENDIF   
  51994. SELECT (m.liSelect)   
  51995. ENDPROC
  51996. PROCEDURE opentargetfile
  51997.    THIS.VerifyTargetFile() 
  51998.    THIS.TargetHandle = FCREATE(THIS.TargetFileName)
  51999.    IF THIS.TargetHandle < 0 OR THIS.HadError
  52000.       THIS.HadError = .T.
  52001.       THIS.DoMessage(OUTPUTCLASS_NOFILECREATE_LOC,MB_ICONSTOP )
  52002.       THIS.lastErrorMessage = OUTPUTCLASS_NOFILECREATE_LOC
  52003.    ENDIF
  52004. RETURN (NOT THIS.HadError)
  52005.      
  52006. ENDPROC
  52007. PROCEDURE verifytargetfile
  52008. LOCAL m.lcFile
  52009. m.lcFile =  ALLTR(CHRTRAN(CHRTRAN(THIS.TargetFileName,;
  52010.                        OUTPUTCLASS_FILENAME_CHARS_DISALLOWED,"_"),"/","\"))
  52011. * embracing chrtran for slashes is necessary because of FULLPATH behavior.
  52012. IF NOT DIRECTORY(JUSTPATH(m.lcFile))
  52013.    m.lcFile = FULLPATH(ALLTR(m.lcFile))
  52014. ENDIF   
  52015. IF DIRECTORY(m.lcFile)
  52016.    * we have to generate a filename
  52017.    m.lcFile = FORCEPATH(SYS(2015), m.lcFile)
  52018. ENDIF
  52019. THIS.TargetFileName = m.lcFile   
  52020. IF JUSTEXT(THIS.TargetFileName) == "" AND ;
  52021.    RIGHT(THIS.TargetFileName,1) # "."      
  52022.    THIS.TargetFileExt = CHRTRAN(THIS.TargetFileExt,;
  52023.                         OUTPUTCLASS_FILENAME_CHARS_DISALLOWED,"_")
  52024.    THIS.TargetFileName = FORCEEXT(THIS.TargetFileName, ;
  52025.                                     THIS.TargetFileExt)
  52026. ENDIF                                 
  52027. IF NOT EMPTY(SYS(2000,THIS.TargetFileName))
  52028.    ERASE (THIS.TargetFileName) NORECYCLE
  52029. ENDIF
  52030. ENDPROC
  52031. PROCEDURE targetfileext_assign
  52032. LPARAMETERS m.vNewVal
  52033. IF VARTYPE(m.vNewVal) = "C" AND NOT THIS.IsRunning
  52034.    THIS.targetfileext = m.vNewVal
  52035. ENDIF   
  52036. ENDPROC
  52037. PROCEDURE targetfilename_assign
  52038. LPARAMETERS m.vNewVal
  52039. IF VARTYPE(m.vNewVal) = "C" AND NOT THIS.IsRunning
  52040.    THIS.targetfilename = m.vNewVal
  52041. ENDIF   
  52042. ENDPROC
  52043. PROCEDURE targethandle_assign
  52044. LPARAMETERS m.vNewVal
  52045. * Readonly during report run
  52046. IF VARTYPE(m.vNewVal) = "N" AND NOT THIS.IsRunning
  52047.    THIS.targethandle = m.vNewVal
  52048. ENDIF   
  52049. ENDPROC
  52050. PROCEDURE closetargetfile
  52051.    LOCAL laDummy[1]
  52052.      
  52053.    IF THIS.TargetHandle > -1    
  52054.       =FCLOSE(THIS.TargetHandle)
  52055.       THIS.TargetHandle = -1
  52056.      
  52057.       IF ADIR(laDummy,THIS.TargetFileName) = 1 AND ;
  52058.          laDummy[1,2] > 0
  52059.          * NB: have to check this as well as
  52060.          * error because some COM errors may not
  52061.          * end up in THIS.HadError.
  52062.           * if continuation, update status rather than
  52063.           * modal message
  52064.          IF THIS.HadError
  52065.             THIS.DoMessage(OUTPUTCLASS_CREATEERRORS_LOC,MB_ICONEXCLAMATION  )
  52066.             THIS.lastErrorMessage = OUTPUTCLASS_CREATEERRORS_LOC
  52067.         ELSE
  52068.             *IF THIS.DoMessage( OUTPUTCLASS_SUCCESS_LOC + ;
  52069.                             IIF(SYS(2024)="Y",CHR(13)+OUTPUTCLASS_REPORT_INCOMPLETE_LOC,""),;
  52070.                             MB_ICONINFORMATION + MB_YESNO ) = IDYES
  52071.             *   _CLIPTEXT = THIS.TargetFileName
  52072.             * ENDIF
  52073.          ENDIF
  52074.       ELSE
  52075.          THIS.DoMessage(OUTPUTCLASS_NOCREATE_LOC,MB_ICONSTOP )
  52076.          THIS.lastErrorMessage = OUTPUTCLASS_NOCREATE_LOC
  52077.        
  52078.       ENDIF                 
  52079.      
  52080.    ENDIF
  52081. ENDPROC
  52082. PROCEDURE verifyconfigtable
  52083. LPARAMETERS m.tcAlias, m.tcFailureMsgTable, m.tcFailureMsgIndexes
  52084. IF EMPTY(m.tcAlias) OR VARTYPE(m.tcAlias) # "C"
  52085.    RETURN .F.
  52086. ENDIF
  52087. LOCAL m.lcTable, m.lcMessage, m.lcAlias, m.liSelect, ;
  52088.       m.llReturn, m.liTagCount, laRequired[1], laKeys[1], ;
  52089.       m.liFound, m.llExactOff, m.llSafetyOn
  52090. m.llReturn = ;
  52091.        TYPE(m.tcAlias+".OBJTYPE") = "N" AND ;
  52092.        TYPE(m.tcAlias+".OBJCODE") = "N" AND ;  
  52093.        TYPE(m.tcAlias+".OBJNAME") = "C" AND ;
  52094.        TYPE(m.tcAlias+".OBJVALUE") = "C" AND ;
  52095.        TYPE(m.tcAlias+".OBJINFO") = "M" 
  52096.        
  52097. * additional fields may be included and order
  52098. * is not significant
  52099.        
  52100. IF NOT m.llReturn
  52101.    m.lcMessage = IIF(EMPTY(m.tcFailureMsgTable),;
  52102.                          OUTPUTCLASS_CONFIGTABLEWRONG_LOC, ;
  52103.                          m.tcFailureMsgTable)  + ;
  52104.                CHR(13)+CHR(13)+ ;
  52105.                DBF(m.tcAlias)
  52106. ENDIF   
  52107. IF m.llReturn
  52108.    IF (SET("EXACT") = "OFF")
  52109.       SET EXACT ON
  52110.       m.llExactOff = .T.
  52111.    ENDIF
  52112.    m.liSelect = SELECT(0)
  52113.    SELECT (m.tcAlias)
  52114.    * check for required keys...
  52115.    DIME laRequired[5]
  52116.    laRequired[1] = "OBJTYPE"
  52117.    laRequired[2] = "OBJCODE"
  52118.    laRequired[3] = "OBJNAME"
  52119.    laRequired[4] = "OBJVALUE"
  52120.    laRequired[5] = "DELETED()"   
  52121.    IF TAGCOUNT() > 0
  52122.       DIME laKeys[TAGCOUNT()]
  52123.       FOR m.liTagCount = 1 TO TAGCOUNT()
  52124.           laKeys[m.liTagCount] = UPPER(KEY(m.liTagCount))
  52125.       ENDFOR
  52126.       FOR m.liTagCount = 1 TO ALEN(laRequired)
  52127.          m.liFound = ASCAN(laKeys,UPPER(laRequired[m.liTagCount]))
  52128.          IF m.liFound = 0
  52129.             m.llReturn = .F.
  52130.             EXIT
  52131.          ENDIF
  52132.       ENDFOR
  52133.    ELSE
  52134.       m.llReturn = .F.
  52135.    ENDIF      
  52136.    IF NOT m.llReturn
  52137.      m.llSafetyOn = (SET("SAFETY") = "ON")
  52138.      SET SAFETY OFF
  52139.      TRY
  52140.          USE (DBF(m.tcAlias)) EXCLU ALIAS (m.tcAlias)
  52141.          INDEX ON Objtype TAG ObjType
  52142.          INDEX ON ObjCode TAG ObjCode
  52143.          INDEX ON ObjName TAG ObjName
  52144.          INDEX ON ObjValue TAG ObjValue
  52145.          INDEX ON DELETED() TAG OnDeleted    
  52146.          m.llReturn = .T.
  52147.       CATCH
  52148.       ENDTRY   
  52149.       
  52150.       IF m.llSafetyOn
  52151.          SET SAFETY ON
  52152.       ENDIF
  52153.       
  52154.       IF m.llReturn
  52155.          DIME laKeys[TAGCOUNT()]
  52156.          FOR m.liTagCount = 1 TO TAGCOUNT()
  52157.              laKeys[m.liTagCount] = UPPER(KEY(m.liTagCount))
  52158.          ENDFOR
  52159.          FOR m.liTagCount = 1 TO ALEN(laRequired)
  52160.             m.liFound = ASCAN(laKeys,UPPER(laRequired[m.liTagCount]))
  52161.             IF m.liFound = 0
  52162.                m.llReturn = .F.
  52163.                EXIT
  52164.             ENDIF
  52165.          ENDFOR
  52166.       ENDIF
  52167.       USE (DBF(m.tcAlias)) SHARED ALIAS (m.tcAlias)
  52168.    ENDIF
  52169.    IF NOT m.llReturn
  52170.       m.lcMessage =  IIF(EMPTY(m.tcFailureMsgIndexes),;
  52171.                          OUTPUTCLASS_CONFIGINDEXMISSING_LOC, ;
  52172.                          m.tcFailureMsgTable) + CHR(13) 
  52173.       FOR m.liTagCount = 1 TO ALEN(laRequired)
  52174.           m.lcMessage = m.lcMessage +  CHR(13) + ;
  52175.                       laRequired[m.liTagCount] 
  52176.       ENDFOR
  52177.    ENDIF
  52178.    IF m.llExactOff
  52179.       SET EXACT OFF
  52180.    ENDIF
  52181.    SELECT (m.liSelect) 
  52182. ENDIF
  52183. IF NOT(m.llReturn)
  52184.    THIS.DoMessage(m.lcMessage,MB_ICONSTOP )
  52185.    THIS.lastErrorMessage = m.lcMessage
  52186. ENDIF   
  52187. RETURN m.llReturn       
  52188. ENDPROC
  52189. PROCEDURE configurationobjtype_access
  52190. * readonly property
  52191. RETURN OUTPUTCLASS_OBJTYPE_CONFIG
  52192. ENDPROC
  52193. PROCEDURE externalfilelocation_assign
  52194. LPARAMETERS m.vNewVal
  52195. IF THIS.isRunning AND NOT EMPTY(THIS.externalFileLocation)
  52196.    RETURN
  52197. ENDIF   
  52198. IF VARTYPE(m.vNewVal) = "C"
  52199.    THIS.externalFileLocation = ALLTRIM(m.vNewVal)
  52200.    IF NOT EMPTY(THIS.externalFileLocation)
  52201.          THIS.externalFileLocation = ADDBS(THIS.externalFileLocation)
  52202.    ENDIF 
  52203. ENDIF   
  52204. ENDPROC
  52205. PROCEDURE pageimagetype_assign
  52206. LPARAMETERS m.vNewVal
  52207. IF VARTYPE(m.vNewVal) = "N" AND ;
  52208.    (m.vNewVal = 0 OR ;
  52209.    INLIST(m.vNewVal,;
  52210.           LISTENER_DEVICE_TYPE_EMF,;
  52211.           LISTENER_DEVICE_TYPE_TIF,;
  52212.           LISTENER_DEVICE_TYPE_JPG,;
  52213.           LISTENER_DEVICE_TYPE_GIF,;
  52214.           LISTENER_DEVICE_TYPE_PNG,;
  52215.           LISTENER_DEVICE_TYPE_BMP,;
  52216.           LISTENER_DEVICE_TYPE_MTIF))
  52217.    THIS.pageImageType = m.vNewVal
  52218.    THIS.pageImageExtension = THIS.getPageImageExtension() 
  52219. ENDIF
  52220. ENDPROC
  52221. PROCEDURE getpageimageextension
  52222. LOCAL lcExt
  52223. m.lcExt = ""
  52224. DO CASE
  52225. CASE INLIST(THIS.pageImageType,;
  52226.             LISTENER_DEVICE_TYPE_TIF,;
  52227.             LISTENER_DEVICE_TYPE_MTIF)
  52228.    m.lcExt = "TIF"            
  52229. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_JPG
  52230.    m.lcExt = "JPG"
  52231. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_GIF
  52232.    m.lcExt = "GIF"
  52233. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_PNG
  52234.    m.lcExt = "PNG"
  52235. CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_BMP
  52236.    m.lcExt = "BMP"
  52237. ENDCASE
  52238. RETURN m.lcExt
  52239. ENDPROC
  52240. PROCEDURE generatepageimagefilename
  52241. LPARAMETERS m.tiPage, m.tlFullPath
  52242. LOCAL lcFileName
  52243. m.lcFileName = FORCEEXT(JUSTSTEM(THIS.targetFileName) + ;
  52244.                         "_" + ;
  52245.                         PADL(TRANSFORM(m.tiPage),;
  52246.                              OUTPUTFILE_MAX_FILEPLACES ,"0"), ;
  52247.                         THIS.pageImageExtension)
  52248. IF m.tlFullPath
  52249.    RETURN  FULLPATH(FORCEPATH( m.lcFileName,THIS.ExternalFileLocation),;
  52250.                     ADDBS(JUSTPATH(THIS.TargetFileName)))
  52251.    RETURN FORCEPATH(m.lcFileName,THIS.externalFileLocation)
  52252. ENDIF          
  52253.        
  52254.         
  52255. ENDPROC
  52256. PROCEDURE supportspageimages
  52257. LPARAMETERS tcMethodToken
  52258. DO CASE
  52259. CASE THIS.isSuccessor OR EMPTY(THIS.pageImageType)
  52260.    RETURN .F.    
  52261. CASE EMPTY(m.tcMethodToken)
  52262.    RETURN THIS.ListenerType # LISTENER_TYPE_DEF
  52263.         * this indicates the set we are supporting in total
  52264. CASE m.tcMethodToken = "OUTPUTPAGE"
  52265.    RETURN INLIST(THIS.ListenerType,LISTENER_TYPE_PRN,LISTENER_TYPE_PAGED)
  52266. CASE INLIST(m.tcMethodToken,"AFTERREPORT","UNLOADREPORT")
  52267.    RETURN INLIST(THIS.ListenerType,LISTENER_TYPE_PRV,LISTENER_TYPE_ALLPGS)
  52268. ENDCASE  
  52269. ENDPROC
  52270. PROCEDURE outputpageimage
  52271. LPARAMETERS m.tiPage
  52272. LOCAL m.lcFile, m.llError
  52273.    IF THIS.pageImageType = LISTENER_DEVICE_TYPE_MTIF 
  52274.       m.lcFile = THIS.generatePageImageFilename(1, .T.) 
  52275.       IF m.tiPage = 1 
  52276.          IF NOT EMPTY(SYS(2000,m.lcFile))
  52277.             ERASE (m.lcFile) NORECYCLE
  52278.          ENDIF
  52279.          THIS.OutputPage(m.tiPage,m.lcFile,LISTENER_DEVICE_TYPE_TIF )
  52280.       ELSE
  52281.          THIS.OutputPage(m.tiPage,m.lcFile,LISTENER_DEVICE_TYPE_MTIF )
  52282.       ENDIF   
  52283.    ELSE
  52284.       m.lcFile = THIS.generatePageImageFilename(m.tiPage, .T.)   
  52285.       IF NOT EMPTY(SYS(2000,m.lcFile))
  52286.          ERASE (m.lcFile) NORECYCLE
  52287.       ENDIF
  52288.       THIS.OutputPage(m.tiPage,m.lcFile,THIS.pageImageType)
  52289.    ENDIF   
  52290. CATCH WHEN .T.
  52291.    m.llError = .T.
  52292. ENDTRY
  52293. RETURN (NOT m.llError)
  52294. ENDPROC
  52295. PROCEDURE currentpageimagefilename_assign
  52296. LPARAMETERS m.tvNewVal
  52297. IF VARTYPE(m.tvNewVal) # "C"
  52298.    THIS.currentPageImageFilename = ""
  52299.    THIS.currentPageImageFilename = m.tvNewVal
  52300. ENDIF   
  52301. ENDPROC
  52302. PROCEDURE makeexternalfilelocationreachable
  52303. IF EMPTY(THIS.externalFileLocation) 
  52304.    THIS.externalFileLocation = "."
  52305. ENDIF
  52306. IF NOT DIRECTORY(FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))     
  52307.    TRY
  52308.      MD (FULLPATH(THIS.ExternalFileLocation,ADDBS(JUSTPATH(THIS.TargetFileName))))     
  52309.    CATCH
  52310.      LOCAL m.llRunning 
  52311.      m.llRunning = THIS.isRunning
  52312.      THIS.isRunning = .F.
  52313.      THIS.externalFileLocation = "."
  52314.      THIS.isRunning = m.llRunning
  52315.    ENDTRY
  52316. ENDIF
  52317. ENDPROC
  52318. PROCEDURE BeforeBand
  52319. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  52320. IF (m.nBandObjCode = FRX_OBJCOD_PAGEHEADER OR ;
  52321.     m.nBandObjCode = FRX_OBJCOD_TITLE) AND ;
  52322.    THIS.supportsPageImages() 
  52323.    * Note: this assignment does not occur in 
  52324.    * OutputPageImage, because we don't know
  52325.    * what listener mode (PRN vs cached) we're in.
  52326.    * The point of this property is to make the value
  52327.    * available either way, as it will eventually be
  52328.    * used by OutputPageImage no matter when that occurs,
  52329.    * during the run of the report.
  52330.    LOCAL lcFile, liPageNo
  52331.    m.lcFile = ""
  52332.    DO CASE
  52333.    CASE THIS.pageImageType = LISTENER_DEVICE_TYPE_MTIF 
  52334.       m.liPageNo = 1
  52335.    CASE THIS.CommandClauses.RangeFrom < 2 
  52336.       IF THIS.isSuccessor
  52337.          m.liPageNo = THIS.sharedPageNo
  52338.       ELSE
  52339.          m.liPageNo = THIS.PageNo      
  52340.       ENDIF   
  52341.    OTHERWISE      
  52342.       IF THIS.isSuccessor
  52343.          m.liPageNo = (THIS.sharedPageNo - THIS.CommandClauses.RangeFrom) + 1       
  52344.       ELSE
  52345.          m.liPageNo = (THIS.PageNo - THIS.CommandClauses.RangeFrom) + 1 
  52346.       ENDIF   
  52347.    ENDCASE
  52348.    m.lcFile = THIS.generatePageImageFileName(m.liPageNo)
  52349.    THIS.currentPageImageFilename = m.lcFile
  52350.    IF NOT ISNULL(THIS.successor)
  52351.       THIS.successor.currentPageImageFilename = m.lcFile
  52352.    ENDIF   
  52353. ENDIF
  52354. IF THIS.sharedPageNo  = 1 AND ;
  52355.    m.nBandObjCode = FRX_OBJCOD_PAGEHEADER AND ;   
  52356.    (NOT EMPTY(THIS.pageImageType)) AND ;
  52357.    (EMPTY(THIS.currentPageImageFilename)) AND ;
  52358.    ((NOT THIS.TwoPassProcess) OR THIS.CurrentPass = LISTENER_FULLPASS)
  52359.    THIS.DoMessage(OUTPUTFILE_NOIMAGEFILES_LOC,MB_ICONEXCLAMATION)     
  52360. ENDIF   
  52361. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  52362. ENDPROC
  52363. PROCEDURE BeforeReport
  52364. THIS.currentPageImageFilename =""
  52365. IF (NOT EMPTY(THIS.pageImageType)) AND ;
  52366.    (NOT THIS.supportsPageImages()) 
  52367.    IF (NOT THIS.isSuccessor)
  52368.      THIS.ListenerType = LISTENER_TYPE_PAGED
  52369.    ENDIF 
  52370. ENDIF
  52371. IF THIS.supportsPageImages()
  52372.    THIS.makeExternalFileLocationReachable()
  52373. ENDIF   
  52374. IF NOT ISNULL(THIS.successor)
  52375.    THIS.successor.AddProperty("currentPageImageFilename","")
  52376. ENDIF
  52377. DODEFAULT()
  52378.  IF INLIST(THIS.ReadConfiguration,;
  52379.                   OUTPUTCLASS_READCONFIG_REPORT,;
  52380.                   OUTPUTCLASS_READCONFIG_BOTH)
  52381.      THIS.SetConfiguration()
  52382. ENDIF   
  52383. THIS.resetDataSession()
  52384. ENDPROC
  52385. PROCEDURE setfrxdatasessionenvironment
  52386. DODEFAULT()
  52387. SET DELETED ON
  52388. SET EXCLUSIVE OFF
  52389. SET TALK OFF
  52390. ENDPROC
  52391. PROCEDURE Destroy
  52392. THIS.CloseTargetFile()
  52393. DODEFAULT()
  52394. ENDPROC
  52395. PROCEDURE Init
  52396. IF DODEFAULT()
  52397.    * NB: this one doesn't necessarily need its
  52398.    * own AppName LOC'd value, because
  52399.    * it is basically an abstract layer 
  52400.    * and should not be instantiated directly.
  52401.    * Doesn't hurt, though.
  52402.    THIS.appName = OUTPUTFILE_APPNAME_LOC
  52403.    IF INLIST(THIS.ReadConfiguration,;
  52404.                   OUTPUTCLASS_READCONFIG_INIT,;
  52405.                   OUTPUTCLASS_READCONFIG_BOTH)
  52406.      THIS.SetConfiguration(.T.)
  52407.    ENDIF   
  52408.    RETURN .F.   
  52409. ENDIF
  52410. RETURN NOT THIS.HadError
  52411. ENDPROC
  52412. PROCEDURE AfterReport
  52413. DODEFAULT()
  52414. IF (NOT THIS.CommandClauses.NOPAGEEJECT) AND ;
  52415.    THIS.supportsPageImages("AFTERREPORT")
  52416.    LOCAL m.lcFileLocation, m.liPage,  m.lcFile
  52417.    m.lcFileLocation = THIS.ExternalFileLocation
  52418.    THIS.makeExternalFileLocationReachable()
  52419.    FOR m.liPage = 1 TO THIS.OutputPageCount 
  52420.       IF NOT THIS.outputPageImage(m.liPage)
  52421.          EXIT
  52422.       ENDIF
  52423.    NEXT   
  52424.    THIS.externalFileLocation = m.lcFileLocation
  52425. ENDIF
  52426. ENDPROC
  52427. PROCEDURE OutputPage
  52428. LPARAMETERS nPageNo, eDevice, nDeviceType, nLeft, nTop, nWidth, nHeight, nClipLeft, nClipTop, nClipWidth, nClipHeight
  52429. IF THIS.supportsPageImages("OUTPUTPAGE")
  52430.    IF m.nDeviceType < 100
  52431.       * ascertain that this is the native call; have to make
  52432.       * sure it's not recursive... 
  52433.       THIS.OutputPageImage(m.nPageNo)
  52434.    ENDIF
  52435.    IF m.nDeviceType > 99
  52436.       DODEFAULT(nPageNo, eDevice, nDeviceType)   
  52437.    ENDIF
  52438. ENDIF
  52439. ENDPROC
  52440. PROCEDURE createhelperobjects
  52441. LPARAMETERS m.tlCalledFromBeforeReport
  52442. * see note in CheckCollectionMembers method about parameter, which
  52443. * is not used here but could provide significant information to
  52444. * subclasses
  52445. * NB this method creates only required helpers, not optional FX objects
  52446. * which is handled in CheckCollectionMembers
  52447. EXTERNAL CLASS _GDIPLUS.VCX
  52448. LOCAL liSession
  52449. m.liSession = SET("DATASESSION")
  52450. THIS.resetDataSession()
  52451. THIS.ensureCollection()
  52452. THIS.ensureCollection(.T.)
  52453. SET DATASESSION TO (m.liSession)
  52454. IF VARTYPE(THIS.FFCGraphics) # "O"  AND THIS.GFXs.Count > 0
  52455.    THIS.FFCGraphics =;
  52456.       THIS.getObjectInstance("GpGraphics","_GDIPlus.VCX","", .T.,"GP", .T.)
  52457.    IF NOT ISNULL(THIS.FFCGraphics)
  52458.       THIS.FFCGraphics.QuietOnError = THIS.QuietMode
  52459.    ENDIF      
  52460. ENDIF   
  52461. ENDPROC
  52462. PROCEDURE needgfxs
  52463. LPARAMETERS m.tcProgram,;
  52464.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  52465.             m.tP7, m.tP8, m.tP8, m.tP10, m.tP11, m.tP12
  52466. * hook
  52467. * a subclass could evaluate conditions,
  52468. * such as whether any objects have custom properties
  52469. * requiring GFX activity.
  52470. RETURN .T.            
  52471. ENDPROC
  52472. PROCEDURE sendfx
  52473. LPARAMETERS m.tcProgram, ;
  52474.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, ;
  52475.             m.tP6, m.tP7, m.tP8, m.tP9, m.tP10, ;
  52476.             m.tP11, m.tP12)
  52477.   LOCAL m.loFX, m.liRenderBehavior, m.liTemp, m.lcMethodToken
  52478.   m.liRenderBehavior = OUTPUTFX_DEFAULT_RENDER_BEHAVIOR   
  52479.   IF THIS.IsSuccessor
  52480.      * Only the lead does this work.     
  52481.      RETURN m.liRenderBehavior
  52482.   ENDIF
  52483.   m.lcMethodToken = THIS.upperMethodName(m.tcProgram)  
  52484.   IF VARTYPE(THIS.FXs) = "O" AND THIS.FXs.Count > 0
  52485.      * The order of the 
  52486.      * invocation of this method,
  52487.      * which precedes the DODEFAULT()
  52488.      * in each event, 
  52489.      * makes the results available 
  52490.      * for all Successors.
  52491.      FOR EACH m.loFX IN THIS.FXs FOXOBJECT
  52492.          IF VARTYPE(m.loFX) = "O" && contract API is checked in LoadReport and BeforeReport
  52493.                                 && but the object could release itself midway through a run
  52494.             THIS.setCurrentDataSession()                                
  52495.             m.loFX.ApplyFX(THIS,m.lcMethodToken, ;
  52496.                        @tP1, @tP2, @tP3, @tP4, @tP5, @tP6, ;
  52497.                        @tP7, @tP8, @tP9, @tP10, @tP11, @tP12)
  52498.          ENDIF              
  52499.       NEXT
  52500.   ENDIF
  52501.   IF VARTYPE(THIS.GFXs) = "O" AND THIS.GFXs.Count > 0 AND ;
  52502.      THIS.NeedGFXs(m.lcMethodToken,;
  52503.                    m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, ;
  52504.                    m.tP6, m.tP7, m.tP8, m.tP9, m.tP10, ;
  52505.                    m.tP11, m.tP12)
  52506.       FOR EACH m.loFX IN THIS.GFXs FOXOBJECT
  52507.           IF VARTYPE(m.loFX) = "O" && contract API is checked in LoadReport and BeforeReport
  52508.                                    && but the object could release itself midway through a run          
  52509.              THIS.setCurrentDataSession()                                                                   
  52510.              m.liTemp = INT(VAL(TRANSFORM(m.loFX.ApplyFX(THIS, m.lcMethodToken, ;
  52511.                         @tP1, @tP2, @tP3, @tP4, @tP5, @tP6, ;
  52512.                         @tP7, @tP8, @tP9, @tP10, @tP11, @tP12))))
  52513.              IF m.liTemp > m.liRenderBehavior  && behavior is cumulative
  52514.                 m.liRenderBehavior = INT(m.liTemp)
  52515.              ENDIF      
  52516.           ENDIF
  52517.       NEXT
  52518.   ENDIF
  52519.  RETURN m.liRenderBehavior  && this value only affects calls during Render method 
  52520. ENDPROC
  52521. PROCEDURE checkcollectionmembers
  52522. LPARAMETERS m.tlCalledFromBeforeReport
  52523. * NB: use of this argument and 
  52524. * no distinction made between calls from
  52525. * BeforeReport and LoadReport at this level,
  52526. * this distinction is made available for subclasses
  52527. * that might not have all materials prepared for
  52528. * creation of required collection members during Load.
  52529. LOCAL m.liIndex, m.loX, m.loXs as Collection
  52530. THIS.getFeedbackFXObject()
  52531. THIS.getMemberDataScriptFXObject()
  52532. THIS.getRotateGFXObject()
  52533. THIS.getNoRenderGFXObject()
  52534. m.loXs = THIS.FXs
  52535. FOR m.liIndex = 1 TO THIS.FXs.Count
  52536.    m.loX = loXs.Item(m.liIndex)
  52537.    IF VARTYPE(m.loX) # "O" OR ;
  52538.      (NOT PEMSTATUS(m.loX,"ApplyFX",5))
  52539.      loXs.Remove(m.liIndex)
  52540.    ENDIF
  52541. m.loXs = THIS.GFXs
  52542. FOR m.liIndex = 1 TO THIS.GFXs.Count
  52543.    m.loX = loXs.Item(liIndex)
  52544.    IF VARTYPE(m.loX) # "O" OR ;
  52545.      (NOT PEMSTATUS(m.loX,"ApplyFX",5))
  52546.      loXs.Remove(m.liIndex)
  52547.    ENDIF
  52548. STORE NULL TO m.loX, m.loXs
  52549. ENDPROC
  52550. PROCEDURE uppermethodname
  52551. LPARAMETERS m.tcProgram
  52552. LOCAL m.lcProgram
  52553. m.lcProgram = UPPER(TRANSFORM(m.tcProgram))
  52554. RETURN SUBSTR(m.lcProgram,RAT(".",m.lcProgram) + 1)      
  52555. ENDPROC
  52556. PROCEDURE cancelrequested_assign
  52557. LPARAMETERS m.vNewVal
  52558. IF VARTYPE(m.vNewVal) = "L"
  52559.    THIS.cancelRequested = m.vNewVal
  52560. ENDIF   
  52561. ENDPROC
  52562. PROCEDURE fxfeedbackclass_assign
  52563. LPARAMETERS m.vNewVal
  52564. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52565.    THIS.fxFeedbackClass = m.vNewVal
  52566. ENDIF
  52567. ENDPROC
  52568. PROCEDURE fxfeedbackclasslib_assign
  52569. LPARAMETERS vNewVal
  52570. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52571.    THIS.fxFeedbackClassLib = m.vNewVal
  52572. ENDIF   
  52573. ENDPROC
  52574. PROCEDURE fxfeedbackmodule_assign
  52575. LPARAMETERS vNewVal
  52576. IF VARTYPE(m.vNewVal) = "C" 
  52577.    THIS.fxFeedbackModule = m.vNewVal
  52578. ENDIF   
  52579. ENDPROC
  52580. PROCEDURE getfeedbackfxobject
  52581. LPARAMETERS m.tlQuiet
  52582. IF (NOT THIS.QuietMode) AND ;
  52583.    (NOT THIS.isSuccessor) AND ;
  52584.    (TYPE("THIS.CommandClauses.NoDialog") # "L" OR ;
  52585.     (NOT THIS.CommandClauses.NoDialog))
  52586.    THIS.addCollectionMember(;
  52587.          THIS.fxFeedbackClass,;
  52588.          THIS.fxFeedbackClassLib,;
  52589.          THIS.fxFeedbackModule, .T.)
  52590.       
  52591.    IF NOT THIS.checkCollectionForSpecifiedMember(;
  52592.           THIS.fxFeedbackClass,;
  52593.           THIS.fxFeedbackClassLib)
  52594.        IF _VFP.StartMode = 0 AND NOT m.tlQuiet
  52595. *          THIS.DoMessage(OUTPUTFX_USERFEEDBACK_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  52596.        ENDIF       
  52597.        THIS.QuietMode = .T.
  52598.    ENDIF 
  52599. ENDIF   
  52600. ENDPROC
  52601. PROCEDURE classpath_assign
  52602. LPARAMETERS m.vNewVal
  52603. IF VARTYPE(m.vNewVal) = "C" AND ;
  52604.    DIRECTORY(m.vNewVal)
  52605.    IF NOT EMPTY(m.vNewVal)
  52606.       m.vNewVal = ADDBS(m.vNewVal)
  52607.    ENDIF
  52608.    THIS.classPath = m.vNewVal
  52609.    THIS.ResetToDefault("classPath")   
  52610. ENDIF 
  52611. ENDPROC
  52612. PROCEDURE getobjectinstance
  52613. LPARAMETERS m.tcClass, m.tcClassLib, m.tcModule, ;
  52614.             m.tlAssignUniqueNameToObject, ;
  52615.             m.tcNamePrefix, m.tlMandatoryObject
  52616. IF VARTYPE(m.tcClass) # "C" OR EMPTY(m.tcClass)
  52617.    IF m.tlMandatoryObject
  52618.       THIS.DoMessage(OUTPUTFX_REQUIREDOBJECTDEF_MISSING_LOC,MB_ICONEXCLAMATION)
  52619.    ENDIF
  52620.    RETURN NULL
  52621. ENDIF
  52622. LOCAL m.loX,m.lcForceVCX, m.lcForceFXP, m.lcUseThisLib, m.lcExternalsPath, m.liSession
  52623. liSession = SET("DATASESSION")
  52624. THIS.ResetDataSession()
  52625. m.lcForceVCX = FORCEEXT(m.tcClassLib,"VCX")
  52626. m.lcForceFXP = STRTRAN(m.tcClassLib,".PRG",".FXP")
  52627. m.lcExternalsPath = THIS.getPathForExternals()
  52628. m.loX = NULL
  52629.    DO CASE
  52630.    CASE FILE(m.tcClassLib) OR ;
  52631.         FILE(m.lcForceVCX) OR ;
  52632.         ATC(FULLPATH(m.lcForceVCX) + " ALIAS ",SET("CLASSLIB")) > 0 OR ;
  52633.         ATC("\" + JUSTFNAME(m.lcForceVCX) + " ALIAS ",SET("CLASSLIB")) > 0 OR ;
  52634.         ATC(m.tcClassLib,SET("PROCEDURE")) > 0 OR ;
  52635.         ATC(m.lcForceFXP,SET("PROCEDURE")) > 0
  52636.         m.lcUseThisLib = m.tcClassLib
  52637.    CASE FILE(FORCEPATH(m.tcClassLib,m.lcExternalsPath)) OR ;
  52638.         FILE(FORCEPATH(m.lcForceVCX,m.lcExternalsPath)) OR ;
  52639.         FILE(FORCEPATH(m.lcForceFXP,m.lcExternalsPath)) 
  52640.         m.lcUseThisLib = FORCEPATH(m.tcClassLib,m.lcExternalsPath)
  52641.    CASE FILE(FORCEPATH(m.tcClassLib,HOME(0)+"FFC\")) OR ;
  52642.         FILE(FORCEPATH(m.lcForceVCX,HOME(0)+"FFC\")) 
  52643.         FILE(FORCEPATH(m.lcForceFXP,HOME(0)+"FFC\"))         
  52644.         m.lcUseThisLib = FORCEPATH(m.tcClassLib,HOME(0) + "FFC\") 
  52645.    CASE FILE(FORCEPATH(m.tcClassLib,HOME(0)+"FFC\" + THIS.classPath)) OR ;
  52646.         FILE(FORCEPATH(m.lcForceVCX,HOME(0)+"FFC\" + THIS.classPath)) 
  52647.         FILE(FORCEPATH(m.lcForceFXP,HOME(0)+"FFC\" + THIS.classPath))         
  52648.         m.lcUseThisLib = FORCEPATH(m.tcClassLib,HOME(0) + "FFC\" + THIS.classPath) 
  52649.    OTHERWISE
  52650.         m.lcUseThisLib = m.tcClassLib
  52651.         * may error, but if it's a required object,
  52652.         * it *should* error.
  52653.    ENDCASE 
  52654.              
  52655.    m.loX =  NEWOBJECT(m.tcClass, m.lcUseThisLib, ;
  52656.             IIF(VARTYPE(m.tcModule)="C",m.tcModule,""))          
  52657.    IF (NOT ISNULL(m.loX)) AND m.tlAssignUniqueNameToObject
  52658.       m.tcNamePrefix = IIF(VARTYPE(m.tcNamePrefix) = "C", ;
  52659.                             m.tcNamePrefix, "FXH")
  52660.       m.loX.Name = m.tcNamePrefix + SYS(2015)                         
  52661.    ENDIF   
  52662. CATCH TO err
  52663.    m.loX = NULL
  52664.    #IF OUTPUTCLASS_DEBUGGING 
  52665.        SUSPEND
  52666.    #ENDIF
  52667. ENDTRY
  52668. IF m.tlMandatoryObject AND ISNULL(m.loX)
  52669.    THIS.DoMessage(OUTPUTFX_REQUIREDOBJECT_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  52670. ENDIF
  52671. SET DATASESSION TO (m.liSession)
  52672. RETURN m.loX
  52673. ENDPROC
  52674. PROCEDURE checkcollectionforspecifiedmember
  52675. LPARAMETERS m.tcClass, m.tcClassLib, m.tlInGFX, m.tlReturnRef
  52676. LOCAL m.liIndex, m.loXs, m.loX, m.lcForceVCX, m.lcClassLib, ;
  52677.       m.lcClass, m.lcThisLib, m.llFound, m.loRef
  52678. THIS.ensureCollection(m.tlInGFX) 
  52679. IF m.tlInGFX
  52680.   m.loXs = THIS.GFXs
  52681.    m.loXs = THIS.FXs
  52682. ENDIF   
  52683. m.loRef = NULL
  52684. m.lcClass = UPPER(m.tcClass)
  52685. IF NOT EMPTY(m.tcClassLib)
  52686.    m.lcClassLib = UPPER(JUSTFNAME(m.tcClassLib))
  52687.    m.lcForceVCX = FORCEEXT(lcClassLib,"VCX")
  52688.    m.lcForceFXP = STRTRAN(lcClassLib,".PRG",".FXP")
  52689. ENDIF   
  52690. FOR m.liIndex = 1 TO m.loXs.Count
  52691.    m.loX = loXs.Item(liIndex)
  52692.    m.lcThisLib = UPPER(JUSTFNAME(loX.ClassLibrary))
  52693.    IF UPPER(loX.Class) == m.lcClass AND ;
  52694.       (EMPTY(m.lcClassLib) OR ;
  52695.        m.lcThisLib == m.lcClassLib OR ;
  52696.        m.lcThisLib == m.lcForceVCX OR ;
  52697.        m.lcThisLib == m.lcForceFXP) 
  52698.        m.llFound = .T.
  52699.        m.loRef = m.loX
  52700.        EXIT
  52701.    ENDIF         
  52702. IF m.tlReturnRef
  52703.    RETURN m.loRef
  52704.    RETURN m.llFound
  52705. ENDIF   
  52706. ENDPROC
  52707. PROCEDURE addcollectionmember
  52708. LPARAMETERS m.tcClass, m.tcClassLib,m.tcModule,m.tlSingleton, m.tlInGFX, m.tlRequired
  52709. LOCAL m.loX, m.lExists, m.liReturn
  52710. m.liReturn = OUTPUTFX_ADDCOLLECTION_NOACTION 
  52711. IF m.tlSingleton
  52712.   m.lExists =  THIS.checkCollectionForSpecifiedMember(m.tcClass,m.tcClassLib,m.tlInGFX)
  52713.   * checkCollectionForSpecifiedMember will have done this already
  52714.   THIS.ensureCollection(m.tlInGFX)  
  52715. ENDIF
  52716. IF NOT m.lExists               
  52717.    m.loX = THIS.getObjectInstance(;
  52718.           m.tcClass,;
  52719.           m.tcClassLib,;
  52720.           m.tcModule, ;
  52721.          .T., IIF(tlInGFX,"GFX","FX"),tlRequired)
  52722.    IF ISNULL(m.loX)      
  52723.       m.liReturn = OUTPUTFX_ADDCOLLECTION_FAILURE
  52724.    ELSE
  52725.       IF (NOT PEMSTATUS(m.loX,"ApplyFX",5))
  52726.          m.liReturn = OUTPUTFX_ADDCOLLECTION_UNSUITABLE
  52727.       ELSE
  52728.          IF tlInGFX
  52729.             THIS.GFXs.Add(m.loX)         
  52730.          ELSE
  52731.             THIS.FXs.Add(m.loX)
  52732.          ENDIF            
  52733.          m.liReturn = OUTPUTFX_ADDCOLLECTION_SUCCESS
  52734.       ENDIF            
  52735.    ENDIF   
  52736. ENDIF   
  52737. RETURN m.liReturn
  52738. ENDPROC
  52739. PROCEDURE getpathforexternals
  52740. * this is  mostly for standalone use
  52741. * first figure out where to put it
  52742. * with the idea of not littering
  52743. * the disk too much based on CURDIR().
  52744. * For app pieces, look for a container module
  52745. * and put it there.
  52746. * if there isn't one,
  52747. * put it with the VCX
  52748.       
  52749. LOCAL m.liLevel, m.lcSys16, m.lcPath
  52750. IF ":" $ THIS.classPath
  52751.    * explicit path
  52752.    m.lcPath = THIS.classPath
  52753.    FOR m.liLevel = PROGRAM(-1) TO 1 STEP -1
  52754.        m.lcSys16 = UPPER(SYS(16,m.liLevel))
  52755.       IF INLIST(RIGHT(m.lcSys16,3),"APP","EXE","DLL")
  52756.          m.lcPath = JUSTPATH(m.lcSys16)
  52757.          EXIT
  52758.       ENDIF
  52759.    ENDFOR
  52760.    IF (NOT EMPTY(lcPath)) AND ;
  52761.       (NOT EMPTY(THIS.classPath)) AND ;
  52762.        DIRECTORY(FULLPATH(THIS.classPath,ADDBS(lcPath)))
  52763.        m.lcPath = FULLPATH(THIS.classPath,ADDBS(lcPath))
  52764.    ENDIF
  52765. ENDIF   
  52766.       
  52767. IF EMPTY(m.lcPath)
  52768.    m.lcPath = JUSTPATH(THIS.ClassLibrary)
  52769.    IF (NOT EMPTY(lcPath)) AND ;
  52770.       (NOT EMPTY(THIS.classPath)) AND ;
  52771.        DIRECTORY(FULLPATH(THIS.classPath,ADDBS(lcPath)))
  52772.        m.lcPath = FULLPATH(THIS.classPath,ADDBS(lcPath))
  52773.    ENDIF
  52774. ENDIF
  52775. IF NOT DIRECTORY(m.lcPath)
  52776.    m.lcPath = ""
  52777. ELSE 
  52778.    m.lcPath = ADDBS(m.lcPath)   
  52779. ENDIF
  52780. RETURN m.lcPath
  52781. ENDPROC
  52782. PROCEDURE ffcgraphics_assign
  52783. LPARAMETERS m.tvNewVal
  52784. DO CASE
  52785. CASE ISNULL(m.tvNewVal) AND (NOT THIS.isRunning)
  52786.    THIS.FFCGraphics = m.tvNewVal
  52787. CASE VARTYPE(m.tvNewVal) = "O"
  52788.    LOCAL laDummy[1]
  52789.    IF ACLASS(laDummy,m.tvNewVal) > 0 AND ;
  52790.       ASCAN(laDummy,"GpGraphics",1,ALEN(laDummy),1, 7) > 0 && case insensitive, exact on
  52791.       THIS.FFCGraphics = m.tvNewVal
  52792.    ENDIF      
  52793. OTHERWISE
  52794.    * don't   
  52795. ENDCASE
  52796. ENDPROC
  52797. PROCEDURE getmemberdatascriptfxobject
  52798. THIS.setFRXDataSession()
  52799. IF USED(THIS.memberDataAlias) AND ;
  52800.    RECCOUNT(THIS.memberDataAlias) > 0
  52801.    SELECT (THIS.memberDataAlias)
  52802.    LOCATE FOR (NOT EMPTY(Execute))
  52803.    IF NOT EOF()
  52804.       THIS.addCollectionMember(;
  52805.            THIS.fxMemberDataScriptClass,;
  52806.            THIS.fxMemberDataScriptClassLib,;
  52807.            THIS.fxMemberDataScriptModule, .T.)
  52808.       IF NOT THIS.checkCollectionForSpecifiedMember(;
  52809.            THIS.fxMemberDataScriptClass,;
  52810.            THIS.fxMemberDataScriptClassLib)
  52811.            THIS.DoMessage(OUTPUTFX_SCRIPTING_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  52812.       ENDIF
  52813.    ENDIF      
  52814.    IF USED("FRX")
  52815.       SELECT FRX
  52816.    ENDIF
  52817. ENDIF
  52818. ENDPROC
  52819. PROCEDURE fxmemberdatascriptclass_assign
  52820. LPARAMETERS m.vNewVal
  52821. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52822.    THIS.fxMemberDataScriptClass = m.vNewVal
  52823. ENDIF
  52824. ENDPROC
  52825. PROCEDURE fxmemberdatascriptclasslib_assign
  52826. LPARAMETERS vNewVal
  52827. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52828.    THIS.fxMemberDataScriptClassLib = m.vNewVal
  52829. ENDIF   
  52830. ENDPROC
  52831. PROCEDURE fxmemberdatascriptmodule_assign
  52832. LPARAMETERS vNewVal
  52833. IF VARTYPE(m.vNewVal) = "C" 
  52834.    THIS.fxMemberDataScriptModule = m.vNewVal
  52835. ENDIF   
  52836. ENDPROC
  52837. PROCEDURE frxcursor_access
  52838. IF (NOT THIS.IsRunning) AND ;
  52839.    ISNULL(THIS.frxCursor) AND THIS.loadFRXCursor
  52840.    THIS.frxCursor = ;
  52841.       THIS.getObjectInstance("FRXCursor","_FRXCURSOR.VCX","", .T.,"frx", .T.)
  52842.    IF ISNULL(THIS.frxCursor)
  52843.       THIS.loadFRXCursor = .F.
  52844.    ELSE
  52845.       THIS.frxCursor.QuietMode = THIS.QuietMode      
  52846.    ENDIF
  52847. ENDIF      
  52848. RETURN THIS.frxCursor
  52849. ENDPROC
  52850. PROCEDURE frxcursor_assign
  52851. LPARAMETERS m.vNewVal
  52852. IF ISNULL(m.vNewVal) OR (NOT THIS.IsRunning)
  52853.    THIS.frxcursor = m.vNewVal
  52854. ENDIF   
  52855. ENDPROC
  52856. PROCEDURE loadfrxcursor_assign
  52857. LPARAMETERS m.vNewVal
  52858. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning
  52859.    THIS.loadfrxcursor = m.vNewVal
  52860. ENDIF   
  52861. ENDPROC
  52862. PROCEDURE memberdataalias_assign
  52863. LPARAMETERS m.vNewVal
  52864. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52865.    THIS.memberDataAlias = m.vNewVal
  52866. ENDIF   
  52867. ENDPROC
  52868. PROCEDURE creatememberdatacursor
  52869. IF USED("FRX")
  52870.    SELECT FRX
  52871.    LOCATE FOR Platform = FRX_PLATFORM_WINDOWS AND NOT (EMPTY(Style) OR DELETED())
  52872.    IF  EOF() 
  52873.       THIS.loadFrxCursor = .F.
  52874.    ELSE
  52875.       THIS.loadFRXCursor = .T.
  52876.       DO CASE
  52877.       CASE (NOT THIS.loadFRXCursor) OR ISNULL(THIS.FRXCursor)
  52878.          * message already taken care of
  52879.       CASE PEMSTATUS(THIS.FRXCursor,"UnpackFRXMemberdata",5)
  52880.          THIS.FRXCursor.UnpackFRXMemberData("FRX",THIS.memberDataAlias,THIS.FRXDataSession)
  52881.       OTHERWISE
  52882.          THIS.DoMessage(OUTPUTFX_SCRIPTING_UNAVAILABLE_LOC ,MB_ICONEXCLAMATION)      
  52883.       ENDCASE
  52884.    ENDIF
  52885. ENDIF
  52886. ENDPROC
  52887. PROCEDURE runcollectorresetlevel_assign
  52888. LPARAMETERS tvNewVal
  52889. IF VARTYPE(m.tvNewVal) = "N" AND ;
  52890.    INLIST(m.tvNewVal,OUTPUTFX_RUNCOLLECTOR_RESET_NEVER , ;
  52891.                      OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT,;
  52892.                      OUTPUTFX_RUNCOLLECTOR_RESET_ONCHAIN)
  52893.    THIS.runCollectorResetLevel = m.tvNewVal
  52894. ENDIF   
  52895. ENDPROC
  52896. PROCEDURE getfrxrecno
  52897. LPARAMETERS m.tcMethodToken,m.tP1, m.tP2
  52898. LOCAL m.liFRXRecno, m.liSession
  52899. m.liFRXRecno = 0
  52900. DO CASE
  52901. CASE INLIST(m.tcMethodToken,"BEFOREREPORT","AFTERREPORT","LOADREPORT","UNLOADREPORT")
  52902.    IF THIS.frxHeaderRecno = -1
  52903.       * this is an early call. find the value early if possible
  52904.       m.liSession = SET("DATASESSION")
  52905.       THIS.setFRXDataSession()
  52906.       IF USED("FRX")
  52907.          SELECT FRX
  52908.          LOCATE FOR ObjType = FRX_OBJTYP_REPORTHEADER AND ;
  52909.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  52910.                     NOT DELETED()
  52911.          THIS.frxHeaderRecno = RECNO()
  52912.       ELSE
  52913.          THIS.frxHeaderRecno = 1
  52914.       ENDIF
  52915.       SET DATASESSION TO (m.liSession)
  52916.    ENDIF   
  52917.    m.liFRXRecNo = THIS.frxHeaderRecno 
  52918. CASE INLIST(m.tcMethodToken,"BEFOREBAND","AFTERBAND") AND ;
  52919.      VARTYPE(m.tP2) = "N" && Band events
  52920.    m.liFRXRecNo = m.tP2          
  52921. CASE VARTYPE(m.tP1) = "N"  && Render, other events   
  52922.    m.liFRXRecNo = m.tP1
  52923. OTHERWISE
  52924.    * called inappropriately
  52925. ENDCASE
  52926. RETURN  m.liFRXRecno
  52927. ENDPROC
  52928. PROCEDURE getrotategfxobject
  52929. THIS.setFRXDataSession()
  52930. IF USED(THIS.memberDataAlias) AND RECCOUNT(THIS.memberDataAlias) > 0
  52931.    SELECT (THIS.memberDataAlias)
  52932.    LOCATE FOR  Type = FRX_BLDR_MEMBERDATATYPE AND ;
  52933.                Name == FRX_BLDR_NAMESPACE_ROTATE AND ;
  52934.                NOT EMPTY(Execute)                    
  52935.    IF NOT EOF()
  52936.       THIS.addCollectionMember(;
  52937.            THIS.gfxRotateClass,;
  52938.            THIS.gfxRotateClassLib,;
  52939.            THIS.gfxRotateModule, .T., .T.)
  52940.       IF NOT THIS.checkCollectionForSpecifiedMember(;
  52941.            THIS.gfxRotateClass,;
  52942.            THIS.gfxRotateClassLib, .T.)
  52943.            THIS.DoMessage(OUTPUTFX_ROTATION_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  52944.       ENDIF
  52945.    ENDIF      
  52946.    IF USED("FRX")
  52947.       SELECT FRX
  52948.    ENDIF
  52949. ENDIF
  52950. ENDPROC
  52951. PROCEDURE gfxrotateclass_assign
  52952. LPARAMETERS m.vNewVal
  52953. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52954.    THIS.gfxRotateClass = m.vNewVal
  52955. ENDIF
  52956. ENDPROC
  52957. PROCEDURE gfxrotateclasslib_assign
  52958. LPARAMETERS m.vNewVal
  52959. IF VARTYPE(m.vNewVal) = "C" AND NOT EMPTY(m.vNewVal)
  52960.    THIS.gfxRotateClassLib = m.vNewVal
  52961. ENDIF
  52962. ENDPROC
  52963. PROCEDURE gfxrotatemodule_assign
  52964. LPARAMETERS m.vNewVal
  52965. IF VARTYPE(m.vNewVal) = "C" 
  52966.    THIS.gfxRotateModule = m.vNewVal
  52967. ENDIF
  52968. ENDPROC
  52969. PROCEDURE removecollectionmember
  52970. LPARAMETERS m.tcName, m.tlInGFX, m.tlNameIsClass
  52971. LOCAL m.liIndex, m.loXs, m.loX, m.llFound, m.lcName
  52972. IF EMPTY(m.tcName) OR VARTYPE(m.tcName) # "C"
  52973.    RETURN .F.
  52974. ENDIF   
  52975. IF m.tlInGFX
  52976.   m.loXs = THIS.GFXs
  52977.    m.loXs = THIS.FXs
  52978. ENDIF   
  52979. m.lcName = ALLTRIM(UPPER(m.tcName))
  52980. FOR m.liIndex = 1 TO m.loXs.Count
  52981.    m.loX = loXs.Item(liIndex)
  52982.    IF (UPPER(loX.Name) == m.lcName) OR ;
  52983.       (m.tlNameIsClass AND UPPER(loX.Class) == m.lcName)
  52984.        m.loXs.Remove(m.liIndex)
  52985.        m.llFound = .T.
  52986.        EXIT
  52987.    ENDIF         
  52988. RETURN m.llFound
  52989. ENDPROC
  52990. PROCEDURE reportstoprundatetime_access
  52991. LOCAL m.lox, m.ldt
  52992. m.lox = THIS.checkCollectionForSpecifiedMember(;
  52993.       THIS.fxFeedbackClass, THIS.fxFeedbackClassLib,.F., .T.) 
  52994. IF (NOT ISNULL(m.lox)) AND PEMSTATUS(m.lox,"reportStopRunDatetime",5)
  52995.    m.ldt = lox.reportStopRunDateTime
  52996.    m.ldt = THIS.reportStopRunDateTime 
  52997. ENDIF   
  52998. m.lox = NULL
  52999. RETURN m.ldt
  53000. ENDPROC
  53001. PROCEDURE reportstartrundatetime_access
  53002. LOCAL m.lox, m.ldt
  53003. m.lox = THIS.checkCollectionForSpecifiedMember(;
  53004.       THIS.fxFeedbackClass, THIS.fxFeedbackClassLib,.f., .t.) 
  53005. IF (NOT ISNULL(m.lox)) AND PEMSTATUS(m.lox,"reportStartRunDatetime",5)
  53006.    m.ldt = m.lox.reportStartRunDateTime
  53007.    m.ldt = THIS.reportStartRunDateTime   
  53008. ENDIF   
  53009. m.lox = NULL
  53010. RETURN m.ldt
  53011. ENDPROC
  53012. PROCEDURE evaluateuserexpression
  53013. LPARAMETERS m.tvValueExpr
  53014. LOCAL m.liSession, m.lvValue
  53015. m.lvValue = ""
  53016. m.liSession = SET("DATASESSION")
  53017. THIS.setCurrentDataSession()
  53018. IF TYPE(m.tvValueExpr) # "U"
  53019.    m.lvValue = EVALUATE(m.tvValueExpr)
  53020.    THIS.setFRXDataSession()
  53021.    IF TYPE(m.tvValueExpr) # "U"
  53022.       m.lvValue = EVALUATE(m.tvValueExpr)
  53023.    ELSE
  53024.       THIS.resetDataSession()
  53025.       IF TYPE(m.tvValueExpr) # "U"
  53026.          m.lvValue = EVALUATE(m.tvValueExpr)
  53027.       ELSE
  53028.          IF TYPE ("THIS.CommandClauses.StartDatasession") = "N" AND ;
  53029.             THIS.CommandClauses.StartDatasession > 0 AND ;
  53030.             (THIS.CommandClauses.StartDatasession # THIS.ListenerDataSession)
  53031.             SET DATASESSION TO (THIS.CommandClauses.StartDataSession)
  53032.             IF TYPE(m.tvValueExpr) # "U"
  53033.                m.lvValue = EVALUATE(m.tvValueExpr)
  53034.             ENDIF
  53035.          ENDIF   
  53036.       ENDIF
  53037.    ENDIF
  53038. ENDIF
  53039. SET DATASESSION TO (m.liSession)
  53040. RETURN m.lvValue 
  53041. ENDPROC
  53042. PROCEDURE gfxnorenderclass_assign
  53043. LPARAMETERS m.vNewVal
  53044. IF VARTYPE(m.vNewVal) = "C" 
  53045.    THIS.gfxNoRenderClass = m.vNewVal
  53046. ENDIF
  53047. ENDPROC
  53048. PROCEDURE gfxnorenderclasslib_assign
  53049. LPARAMETERS m.vNewVal
  53050. IF VARTYPE(m.vNewVal) = "C" 
  53051.    THIS.gfxNoRenderClassLib = m.vNewVal
  53052. ENDIF
  53053. ENDPROC
  53054. PROCEDURE gfxnorendermodule_assign
  53055. LPARAMETERS m.vNewVal
  53056. IF VARTYPE(m.vNewVal) = "C" 
  53057.    THIS.gfxNoRenderModule = m.vNewVal
  53058. ENDIF
  53059. ENDPROC
  53060. PROCEDURE getnorendergfxobject
  53061. IF NOT EMPTY(THIS.gfxNoRenderClass)
  53062.    LOCAL m.llNeedThisGFX, m.llOpenedMemberData
  53063.    THIS.setFRXDataSession()
  53064.    IF (NOT USED(THIS.memberDataAlias)) AND ;
  53065.       (NOT THIS.CommandClauses.IsDesignerLoaded) AND ;
  53066.       (NOT THIS.checkCollectionForSpecifiedMember(;
  53067.               THIS.gfxNoRenderClass,;
  53068.               THIS.gfxNoRenderClassLib, .T.))
  53069.       IF NOT USED("FRX") && during LoadReport
  53070.          IF FILE(THIS.CommandClauses.File)
  53071.             USE (THIS.CommandClauses.File) AGAIN SHARED NOUPDATE ALIAS FRX
  53072.             * this is a special situation, in that
  53073.             * this gfx needs to be available to do a swap
  53074.             * *before* memberdata is commonly available.
  53075.             * At this point, depending on what else has happened,
  53076.             * Memberdata may or may not be here. If it is not,
  53077.             * we could build the memberdata cursor here temporarily --
  53078.             * the gfx itself will do that, in fact -- but in this
  53079.             * method we're just ascertaining the requirement for
  53080.             * the gfx to *exist*.  This doesn't merit the extra time
  53081.             * to do an exact comparison of the appropriate memberdata
  53082.             * element.  If we might need it, the class should be 
  53083.             * instantiated.  Let it do the special build of memberdata
  53084.             * later and do its evaluations at that time.
  53085.             LOCATE FOR  FRX_BLDR_ADVPROP_PREPROCESS_NORENDER $ Style ;
  53086.                         AND NOT DELETED()
  53087.             m.llNeedThisGFX = (NOT EOF())
  53088.             USE IN FRX
  53089.          ELSE
  53090.             * built-into another app, just load without the check
  53091.             m.llNeedThisGFX = .T.
  53092.          ENDIF
  53093.          IF m.llNeedThisGFX
  53094.             THIS.loadFrxCursor = .T.
  53095.          ENDIF    
  53096.       ENDIF              
  53097.    ENDIF      
  53098.    IF (NOT m.llNeedThisGFX) AND ;
  53099.       USED(THIS.memberDataAlias) AND ;
  53100.       RECCOUNT(THIS.memberDataAlias) > 0
  53101.       * now we'll check in the normal way later in the report for
  53102.       * any required instance suppression, which occurs
  53103.       * later in the report cycle and can use the normal build
  53104.       * of memberdata
  53105.       SELECT (THIS.memberDataAlias)
  53106.       LOCATE FOR Type = FRX_BLDR_MEMBERDATATYPE AND ;
  53107.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  53108.                  (ExecWhen == FRX_BLDR_ADVPROP_INSTANCE_NORENDER AND ;
  53109.                  NOT EMPTY(Execute))  OR ;
  53110.                  (ExecWhen == FRX_BLDR_ADVPROP_PREPROCESS_NORENDER)
  53111.       IF NOT EOF()
  53112.          m.llNeedThisGFX = .T.
  53113.       ENDIF
  53114.    ENDIF
  53115.    IF m.llNeedThisGFX
  53116.       THIS.addCollectionMember(;
  53117.            THIS.gfxNoRenderClass,;
  53118.            THIS.gfxNoRenderClassLib,;
  53119.            THIS.gfxNoRenderModule, .T., .T.)
  53120.       IF NOT THIS.checkCollectionForSpecifiedMember(;
  53121.            THIS.gfxNoRenderClass,;
  53122.            THIS.gfxNoRenderClassLib, .T.)
  53123.            THIS.DoMessage(OUTPUTFX_CONDITIONALRENDERING_UNAVAILABLE_LOC,MB_ICONEXCLAMATION)
  53124.       ENDIF
  53125.    ENDIF         
  53126.    IF USED("FRX")
  53127.       SELECT FRX
  53128.    ENDIF
  53129. ENDIF
  53130. ENDPROC
  53131. PROCEDURE ensurecollection
  53132. LPARAMETERS m.tlGFXs
  53133. IF m.tlGFXs
  53134.    IF VARTYPE(THIS.GFXs) # "O" OR ;
  53135.       (NOT UPPER(THIS.GFXs.BaseClass) == "COLLECTION")
  53136.       THIS.GFXs = CREATEOBJECT("Collection")
  53137.    ENDIF
  53138.    IF VARTYPE(THIS.FXs) # "O" OR ;
  53139.       (NOT UPPER(THIS.FXs.BaseClass) == "COLLECTION")
  53140.       THIS.FXs = CREATEOBJECT("Collection")    
  53141.    ENDIF
  53142. ENDIF
  53143. ENDPROC
  53144. PROCEDURE setgdiplusgraphics
  53145. LPARAMETERS tnHandle
  53146. IF VARTYPE(THIS.FFCGraphics) = "O"
  53147.    THIS.FFCGraphics.SetHandle(tnHandle)
  53148. ENDIF
  53149. This.sharedGdiplusGraphics = tnHandle
  53150. This.nExternalGdiPlusGfx   = tnHandle
  53151. * THIS.GDIPlusGraphics = tnHandle
  53152. ENDPROC
  53153. PROCEDURE CancelReport
  53154. IF THIS.FXs.Count > 0
  53155.    THIS.sendFX(PROGRAM())  
  53156.    IF THIS.cancelRequested
  53157.       DODEFAULT()
  53158.    ELSE
  53159.       NODEFAULT
  53160.    ENDIF
  53161.    DODEFAULT()
  53162. ENDIF      
  53163. ENDPROC
  53164. PROCEDURE Destroy
  53165. STORE NULL TO THIS.FXs, THIS.GFXs, THIS.FFCGraphics, ;
  53166.       THIS.FRXCursor
  53167. DODEFAULT()
  53168. ENDPROC
  53169. PROCEDURE Render
  53170. LPARAMETERS m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  53171.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  53172. LOCAL m.liDefaultBehavior,m.llNeedGFXs, m.lnState
  53173. LOCAL lhGfx
  53174. * lhGfx = IIF(This.GDIPlusGraphics > 0, This.GDIPlusGraphics, This.nExternalGdiPlusGfx)
  53175. lhGfx = This.GDIPlusGraphics
  53176. m.llNeedGFXs = (NOT THIS.IsSuccessor) AND THIS.GFXs.Count > 0 AND ;
  53177.                THIS.NeedGFXs(PROGRAM(),m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  53178.                m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage) ;
  53179.                AND (lhGfx > 0)
  53180. IF m.llNeedGFXs
  53181.    THIS.FFCGraphics.SetHandle(lhGfx)
  53182.    * done in BeforeBand for the page header
  53183.    * for GFX objects, in case they (for any reason) choose to
  53184.    * manipulate the page in other methods than Render.
  53185.    * but we'll do it again here.
  53186.    THIS.FFCGraphics.Save(@m.lnState)
  53187. ENDIF
  53188.           
  53189. m.liDefaultBehavior = ;
  53190.     THIS.sendFX(PROGRAM(),m.nFRXRecNo,;
  53191.                 @m.nLeft,@m.nTop,@m.nWidth,@m.nHeight,;
  53192.                 @m.nObjectContinuationType, ;
  53193.                 @m.cContentsToBeRendered, @m.GDIPlusImage)
  53194. NODEFAULT
  53195. * note that FX objects get the args passed by reference, 
  53196. * however the GFX objects
  53197. * should not be seeking to change these args and 
  53198. * receive the args passed by value. Their
  53199. * job is to draw, not to change what is drawn by others or the base.
  53200.                    
  53201. DO CASE
  53202.        
  53203. CASE m.llNeedGFXs AND ;
  53204.      m.liDefaultBehavior = OUTPUTFX_BASERENDER_RENDER_BEFORE_RESTORE
  53205.      
  53206.      DODEFAULT( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  53207.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  53208.      THIS.FFCGraphics.Restore(m.lnState)
  53209. CASE m.llNeedGFXs AND ;
  53210.      m.liDefaultBehavior >= OUTPUTFX_BASERENDER_NORENDER
  53211.      THIS.FFCGraphics.Restore(m.lnState)                        
  53212.      IF (NOT ISNULL(THIS.Successor))
  53213.         THIS.SetSuccessorDynamicProperties()
  53214.         THIS.Successor.Render(m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  53215.              m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  53216.      ENDIF
  53217.                
  53218. CASE m.llNeedGFXs && OUTPUTFX_BASERENDER_AFTERRESTORE, ;
  53219.                   && OUTPUTFX_DEFAULT_RENDER_BEHAVIOR
  53220.      THIS.FFCGraphics.Restore(m.lnState)
  53221.      DODEFAULT( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  53222.                 m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  53223. OTHERWISE  && no GFX behavior at all, just base behavior
  53224.      DODEFAULT( m.nFRXRecno, m.nLeft, m.nTop, m.nWidth, m.nHeight, ;
  53225.                 m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage)
  53226. ENDCASE
  53227. RETURN m.liDefaultBehavior
  53228. ENDPROC
  53229. PROCEDURE AdjustObjectSize
  53230. LPARAMETERS m.nFRXRecno, m.oObjProperties
  53231. THIS.sendFX(PROGRAM(),m.nFRXRecno, m.oObjProperties)
  53232. NODEFAULT
  53233. IF (NOT ISNULL(THIS.Successor))
  53234.    THIS.SetSuccessorDynamicProperties()
  53235.    THIS.Successor.AdjustObjectSize(m.nFRXRecno, m.oObjProperties)
  53236. ENDIF
  53237. DODEFAULT(m.nFRXRecno, m.oObjProperties)
  53238. ENDPROC
  53239. PROCEDURE EvaluateContents
  53240. LPARAMETERS m.nFRXRecno, m.oObjProperties
  53241. THIS.sendFX(PROGRAM(),m.nFRXRecno, m.oObjProperties)
  53242. NODEFAULT
  53243. IF (NOT ISNULL(THIS.Successor))
  53244.    THIS.SetSuccessorDynamicProperties()
  53245.    THIS.Successor.EvaluateContents(m.nFRXRecno, m.oObjProperties)
  53246. ENDIF
  53247. DODEFAULT(m.nFRXRecno, m.oObjProperties)
  53248. ENDPROC
  53249. PROCEDURE AfterBand
  53250. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  53251. THIS.sendFX(PROGRAM(),m.nBandObjCode, m.nFRXRecNo)  
  53252. NODEFAULT
  53253. RETURN DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  53254. ENDPROC
  53255. PROCEDURE BeforeBand
  53256. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  53257. IF m.nBandObjCode = FRX_OBJCOD_PAGEHEADER  ;
  53258.    AND THIS.GFXs.Count > 0
  53259.    THIS.FFCGraphics.SetHandle(THIS.GDIPlusGraphics)
  53260. ENDIF
  53261. THIS.sendFX(PROGRAM(),m.nBandObjCode, m.nFRXRecNo)  
  53262. NODEFAULT
  53263. RETURN DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  53264. ENDPROC
  53265. PROCEDURE UnloadReport
  53266. THIS.sendFX(PROGRAM())  
  53267. THIS.CommandClauses.File = THIS.commandClausesFile 
  53268. THIS.commandClausesFile = NULL
  53269. RETURN DODEFAULT()
  53270. ENDPROC
  53271. PROCEDURE AfterReport
  53272. THIS.sendFX(PROGRAM())  
  53273. NODEFAULT
  53274. RETURN DODEFAULT()
  53275. ENDPROC
  53276. PROCEDURE BeforeReport
  53277. THIS.setFRXDataSession()
  53278. IF (NOT THIS.IsSuccessor)
  53279.    THIS.createMemberDataCursor()  
  53280.    IF NOT ISNULL(THIS.successor)
  53281.       THIS.successor.AddProperty("memberDataAlias",THIS.memberDataAlias)
  53282.    ENDIF               
  53283. ENDIF       
  53284. * second opportunity to create FX and GFX objects,
  53285. * in case some are needed that were not needed before:
  53286. THIS.checkCollectionMembers(.T.)
  53287. * second opportunity to create non-optional helper members,
  53288. * in case some are needed that were not needed before,
  53289. * Any items that would have been required for
  53290. * FX/GFX-specific use should already have been created during
  53291. * LoadReport, so this set of calls is "backwards" 
  53292. * from LoadReport pairing:
  53293. THIS.createHelperObjects(.T.)
  53294. * note: at this point,
  53295. * the FX and GFX objects have 
  53296. * an opportunity to
  53297. * adjust items such as CallAdjustObjectSize, CallEvaluateContents, TwoPassProcess
  53298. THIS.sendFX(PROGRAM())  
  53299. NODEFAULT
  53300. RETURN DODEFAULT()
  53301. ENDPROC
  53302. PROCEDURE LoadReport
  53303. * always start with full reset for this run:
  53304. THIS.CallAdjustObjectSize = LISTENER_CALLDYNAMICMETHOD_NEVER
  53305. THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_NEVER
  53306. THIS.commandClausesFile = THIS.CommandClauses.File
  53307. * see notes in BeforeReport
  53308. THIS.setFRXDataSessionEnvironment() 
  53309. THIS.createHelperObjects()
  53310. THIS.checkCollectionMembers()
  53311. THIS.sendFX(PROGRAM())  
  53312. *!*    Fix by Cathy Pountney
  53313. *!*    http://cathypountney.blogspot.com/2009/04/set-talk-appears-to-be-on-when-running.html
  53314. * Modify the fxListener class of the _ReportListener class library and change the code in 
  53315. * the LoadReport method. 
  53316. * Simply move This.setFRXDataSessionEnvironment() so it comes before This.createHelperObjects()
  53317. * and the problem is solved.  
  53318. * Original code:
  53319. *!*    THIS.createHelperObjects()
  53320. *!*    THIS.checkCollectionMembers()
  53321. *!*    THIS.setFRXDataSessionEnvironment() 
  53322. *!*    THIS.sendFX(PROGRAM())  
  53323. NODEFAULT
  53324. RETURN DODEFAULT() && these changes can be passed on to successors
  53325. ENDPROC
  53326. PROCEDURE Init
  53327. IF DODEFAULT()
  53328.    THIS.AppName = OUTPUTFX_APPNAME_LOC
  53329.    THIS.Name = "FX" + SYS(2015)
  53330.    THIS.createHelperObjects()
  53331.    *&* THIS.getFeedbackFXObject(.T.)
  53332.    RETURN .F.   
  53333. ENDIF
  53334. RETURN NOT THIS.hadError 
  53335. ENDPROC
  53336. PROCEDURE DoStatus
  53337. LPARAMETERS m.cMessage
  53338. THIS.sendFX(PROGRAM(),m.cMessage)  
  53339. NODEFAULT
  53340. ENDPROC
  53341. PROCEDURE UpdateStatus
  53342. THIS.sendFX(PROGRAM())  
  53343. NODEFAULT
  53344. ENDPROC
  53345. PROCEDURE resetcalladjustobjectsize
  53346. * abstract, note that fx and gfx objects already
  53347. * have an opportunity via sendFX call.
  53348. ENDPROC
  53349. PROCEDURE resetcallevaluatecontents
  53350. * abstract, note that fx and gfx objects already
  53351. * have an opportunity via sendFX call.
  53352. ENDPROC
  53353. PROCEDURE ClearStatus
  53354. THIS.sendFX(PROGRAM())  
  53355. ENDPROC
  53356. PROCEDURE quietmode_assign
  53357. LPARAMETERS m.vNewVal
  53358. DODEFAULT(m.vNewVal)
  53359. IF THIS.loadFRXCursor AND (NOT ISNULL(THIS.FRXCursor))
  53360.    THIS.FRXCursor.QuietMode = THIS.QuietMode
  53361. ENDIF   
  53362. IF NOT ISNULL(THIS.FFCGraphics)
  53363.    THIS.FFCGraphics.QuietOnError = THIS.QuietMode
  53364. ENDIF      
  53365. ENDPROC
  53366. PROCEDURE getdefaultuserxsltasstring
  53367. LOCAL m.lcResult
  53368. SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  53369. SET TEXTMERGE ON 
  53370. *!* -------------------------------------------------------------------
  53371. *!* -------------------------------------------------------------------
  53372. *!* -------------------------------------------------------------------
  53373. *!* 2011-08-12 - Jacques Parent
  53374. *!* -------------------------------------------------------------------
  53375. *!* The following text have been modified to let boxes that print from 
  53376. *!* header to footer can print correctly.
  53377. *!* -------------------------------------------------------------------
  53378. *!* Changes (This is pretty complicated...)
  53379. *!*     - Classe "getCSSName" have been modified to add an "itemType"
  53380. *!*          to the class name:  T = TOP; M = Middle; B = Bottom;
  53381. *!*          Default:  do not add anything.
  53382. *!*        - New clases "shapestylesT", "shapestylesM" and "shapestylesB"
  53383. *!*       have been created:
  53384. *!*         shapestylesT:  Print only top, left and right lines
  53385. *!*         shapestylesM:  Print left and right lines
  53386. *!*         shapestylesB:  Print only bottom, left and right lines
  53387. *!*        - "Render" class have been modified to add a "T", "M" or "B"
  53388. *!*          to the boxes' class depending of the "@c" variable,
  53389. *!*       containing the "continuation" information (0 = complete;
  53390. *!*          (1 = Top; 2 = Middle; 3 = Bottom)
  53391. *!* -------------------------------------------------------------------
  53392. *!* I am hoping that this change do not cause problems elseware...  It 
  53393. *!* is a pain do search in that text when you have never heard of xsl
  53394. *!* or Microsoft DOM...  but I've managed for this time.  So let's hope! :)
  53395. *!* -------------------------------------------------------------------
  53396. *!* -------------------------------------------------------------------
  53397. *!* -------------------------------------------------------------------
  53398. <?xml version="1.0"?>
  53399. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  53400.   <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"/>
  53401.   <xsl:param name="externalFileLocation"/>
  53402.   <!--select="'./whatever/'" or 'http://something/myimages/' or "'./'" or... -->
  53403.   <xsl:param name="copyImageFiles" select="0"/>
  53404.   <xsl:param name="generalFieldDPI" select="96"/>
  53405.   <xsl:param name="fillPatternShade" select="180*3"/>
  53406.   <xsl:param name="fillPatternOffset" select="128"/>
  53407.   <xsl:param name="numberPrecision" select="5"/>
  53408.   <xsl:param name="fieldAlphaOpacityOffset" select="75"/>
  53409.   <xsl:param name="fieldAlphaOpacityShade" select="180*3"/>
  53410.   <xsl:param name="useTextAreaForStretchingText" select="1"/>
  53411.   <xsl:param name="hideScrollbarsForTextAreas" select="0"/>
  53412.   <xsl:param name="PageTitlePrefix_LOC" select="''"/>
  53413. <!--    <xsl:param name="unpagedModeIncludesOnePageHeader" select="0"/> -->
  53414.   <xsl:param name="unpagedModeIncludesTitle" select="1"/>
  53415.   <xsl:param name="noBody" select="0"/>
  53416.   <xsl:param name="useDynamicTextAttributes" select="1"/>
  53417.   <xsl:param name="anchorAttrName" select="1"/>   
  53418.   <!-- id is theoretically better if you wanted to write
  53419.    script against this element, or in case name is 
  53420.    deprecated in a future version of the standard, 
  53421.    but a value of 1 forces name to be used instead. 
  53422.    Current-newer browsers will be okay with this, and older 
  53423.    browsers might prefer it. -->
  53424.   <xsl:variable name="FRUs" select="10000"/>
  53425.   <xsl:variable name="printDPI" select="960"/>
  53426.   <xsl:variable name="FRUsInPixelsat96DPI" select="104.167"/>
  53427.   <xsl:variable name="imagePixelRatio" select="$generalFieldDPI div $printDPI"/>
  53428.   <xsl:variable name="zeros" select="substring('0000000000000000000000000',1,$numberPrecision)"/>
  53429.   <xsl:variable name="thisPageHeight">
  53430.     <xsl:value-of select="number(/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@pageheight  div $printDPI)"/>
  53431.   </xsl:variable>
  53432.   <xsl:variable name="lineNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=6]/name"/>
  53433.   <xsl:variable name="labelNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=5]/name"/>
  53434.   <xsl:variable name="fieldNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=8]/name"/>
  53435.   <xsl:variable name="shapeNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=7]/name"/>
  53436.   <xsl:variable name="pictureNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=17]/name"/>
  53437.   <xsl:variable name="detailNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=4]/name"/>
  53438.   <xsl:variable name="detailHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=9]/name"/>
  53439.   <xsl:variable name="detailFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=10]/name"/>
  53440.   <xsl:variable name="pageHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=1]/name"/>
  53441.   <xsl:variable name="pageFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=7]/name"/>
  53442.   <xsl:variable name="columnHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=2]/name"/>
  53443.   <xsl:variable name="columnFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=6]/name"/>
  53444.   <xsl:variable name="groupHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=3]/name"/>
  53445.   <xsl:variable name="groupFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=5]/name"/>
  53446.   <xsl:variable name="titleNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=0]/name"/>
  53447.   <xsl:variable name="summaryNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=8]/name"/>
  53448.   <xsl:variable name="anchorAttr">
  53449.   <xsl:choose>
  53450.   <xsl:when test="$anchorAttrName=1">name</xsl:when>
  53451.   <xsl:otherwise>id</xsl:otherwise>
  53452.   </xsl:choose> 
  53453.   </xsl:variable>
  53454.   <xsl:key name="Layout" match="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[platform='WINDOWS']" use="concat(frxrecno,../../@id)"/>
  53455.   <xsl:template match="/">
  53456.       <xsl:choose>
  53457.         <xsl:when test="number($noBody)=1">
  53458.         <div>
  53459.          <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"/>        
  53460.           <xsl:call-template name="renderStyles"/>
  53461.           <xsl:call-template name="body"/>
  53462.          </div>
  53463.         </xsl:when>
  53464.         <xsl:otherwise>
  53465.           <xsl:apply-templates select="/" mode="full"/>
  53466.         </xsl:otherwise>
  53467.       </xsl:choose>
  53468.   </xsl:template>
  53469.   <xsl:template match="/" mode="full">
  53470.     <html>
  53471.        <xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  53472.        <xsl:attribute name="dir">rtl</xsl:attribute>
  53473.        </xsl:if>
  53474.       <head>
  53475.         <meta  http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  53476. <xsl:comment> 
  53477. the above repeated-explicit declaration is necessary because 
  53478. some versions of MSXML xslt processing don't include the 
  53479. charset as required by the XSLT standard when method="html".  
  53480. Explicitly including the META creates a doubled meta content-type tag, 
  53481. but we do need the encoding to be specified properly and the doubled tag is okay. 
  53482. </xsl:comment>
  53483.         <meta name="description" 
  53484. content="{/Reports/VFP-Report[1]/Run/property[@id='description']/.}"/>
  53485.         <meta name="author" 
  53486. content="{/Reports/VFP-Report[1]/Run/property[@id='author']/.}"/>
  53487.         <meta name="copyright" 
  53488. content="{/Reports/VFP-Report[1]/Run/property[@id='copyright']/.}"/>
  53489.         <meta name="date" 
  53490. content="{/Reports/VFP-Report[1]/Run/property[@id='date']/.}"/>
  53491.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='keywords']">
  53492.         <meta name="keywords">
  53493.         <xsl:attribute name="content">
  53494.          <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='keywords']">
  53495.          <xsl:value-of select="."/><xsl:if test="not(position()=last())">,</xsl:if>
  53496.         </xsl:for-each>
  53497.         </xsl:attribute>
  53498.         </meta> 
  53499.         </xsl:if>
  53500.         <xsl:if test="/Reports/VFP-Report/Run/property[@id='http-equiv']">
  53501.             <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='http-equiv']//meta">
  53502.           <xsl:variable name="thisMeta" select="concat(ancestor-or-self::*[@id='http-equiv']/@id ,'.',@name)"/>
  53503.           <!-- the extra Run nodes being looked up are potentially evaluated, not original values of the property, 
  53504.           so we can account for expressions -->
  53505.           <meta  http-equiv="{@name}" content="{/Reports/VFP-Report/Run/property[@id=$thisMeta]}"/>
  53506.           </xsl:for-each>
  53507.         </xsl:if>
  53508.         <title>
  53509.           <xsl:choose>
  53510.           <xsl:when test="/Reports/VFP-Report[1]/Run/property[@id='title']">
  53511.             <xsl:value-of select="/Reports/VFP-Report[1]/Run/property[@id='title']/."/>
  53512.           </xsl:when>
  53513.           <xsl:otherwise>
  53514.             <!-- default/VFP 9.0 RTM handling -->
  53515.              <xsl:value-of select="$PageTitlePrefix_LOC"/>
  53516.              <xsl:if test="string-length(/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name) = 0">
  53517.                <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/@id"/>
  53518.              </xsl:if>
  53519.              <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name"/>
  53520.           </xsl:otherwise>
  53521.           </xsl:choose>
  53522.         </title>
  53523.         <xsl:call-template name="renderStyles"/>
  53524.       </head>
  53525.       <body>
  53526.         <xsl:call-template name="body"/>
  53527.       </body>
  53528.     </html>
  53529.   </xsl:template>
  53530.   <xsl:template name="renderStyles">
  53531.      <xsl:call-template name="DocumentStyles"/>
  53532.     <xsl:for-each select="/Reports/VFP-Report">
  53533.       <xsl:call-template name="Styles">
  53534.         <xsl:with-param name="thisReport" select="position()"/>
  53535.         <xsl:with-param name="thisReportID" select="./VFP-RDL/@id"/>
  53536.       </xsl:call-template>
  53537.       <!--        <xsl:call-template name="Script"/> avoid security problems: no script, not even a lone comment indicating TBD -->
  53538.     </xsl:for-each>
  53539.   </xsl:template>
  53540.   <xsl:template name="body">
  53541.     <xsl:for-each select="/Reports/VFP-Report">
  53542.       <xsl:variable name="thisReport" select="position()"/>
  53543.       <xsl:variable name="thisReportID" select="./VFP-RDL/@id"/>
  53544.       <xsl:variable name="thisReportRangeFrom" select="number(./VFP-RDL/VFPDataSet/VFPFRXCommand/@RANGEFROM)"/>
  53545.       <xsl:variable name="separateTitlePage" select="./Data/*[name()=$titleNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='true']"/>
  53546.       <xsl:variable name="separateSummaryPage" select="./Data/*[name()=$summaryNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='8' and pagebreak='true' and ejectbefor='false']"/>
  53547.       <xsl:variable name="reportPages" select="count(./Data/*[(name()=$pageHeaderNodeName) or (name()=$titleNodeName and $separateTitlePage=true()) or  (name()=$summaryNodeName and $separateSummaryPage=true())])"/>
  53548.       <div>
  53549.         <xsl:if test="number($noBody)=1">
  53550.           <xsl:attribute name="style">
  53551.                position=relative;height=<xsl:value-of select="$reportPages * $thisPageHeight"/>in;
  53552.                </xsl:attribute>
  53553.         </xsl:if>
  53554.         <xsl:choose>
  53555.           <xsl:when test="./Data/*[name() = $pageHeaderNodeName]">
  53556.             <xsl:if test="$separateTitlePage">
  53557.               <xsl:apply-templates select="./Data/*[name()=$titleNodeName]" mode="titlesummarypage">
  53558.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  53559.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53560.               </xsl:apply-templates>
  53561.             </xsl:if>
  53562.             <xsl:apply-templates select="./Data/*[name()=$pageHeaderNodeName]" mode="page">
  53563.               <xsl:with-param name="thisReport" select="$thisReport"/>
  53564.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53565.               <xsl:with-param name="thisReportRangeFrom" select="$thisReportRangeFrom"/>
  53566.             </xsl:apply-templates>
  53567.             <xsl:if test="$separateSummaryPage">
  53568.               <xsl:apply-templates select="./Data/*[name()=$summaryNodeName]" mode="titlesummarypage">
  53569.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  53570.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53571.               </xsl:apply-templates>
  53572.             </xsl:if>
  53573.           </xsl:when>
  53574.           <xsl:otherwise>
  53575.             <!-- unpaginated-->
  53576.             <xsl:variable name="thisPageHeaderHeight" select="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height  div $FRUs"/>
  53577.             <xsl:variable name="thisReportPageHeight" select="number($thisPageHeight - ( $thisPageHeaderHeight +  (/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Footer'][1]/height div $FRUs)) )"/>
  53578.             <xsl:if test="./Data/Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  53579.               <!-- show the contents of the first page header -->
  53580.               <xsl:apply-templates mode="formattingBand" select="./Data/Pages/*[@idref = /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/frxrecno][1]">
  53581.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  53582.                 <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53583.                 <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  53584.                 <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  53585.               </xsl:apply-templates>
  53586.             </xsl:if>
  53587.             
  53588.             <!-- the @id criteria below leaves out the Pages and Columns collections, if any -->
  53589.             <!-- 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 -->
  53590.             <xsl:apply-templates select="./Data/*[@idref and ($unpagedModeIncludesTitle=1 or not(name() = $titleNodeName))]" mode="unpagedBand">
  53591.               <xsl:with-param name="thisReport" select="$thisReport"/>
  53592.               <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53593.               <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  53594.               <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  53595.               <xsl:with-param name="thisPageHeaderHeight" select="$thisPageHeaderHeight"/>
  53596.             </xsl:apply-templates>
  53597.           </xsl:otherwise>
  53598.         </xsl:choose>
  53599.       </div>
  53600.     </xsl:for-each>
  53601.   </xsl:template>
  53602.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="titlesummarypage">
  53603.     <xsl:param name="thisReport" select="1"/>
  53604.     <xsl:param name="thisReportID"/>
  53605.     <xsl:param name="thisReportRangeFrom" select="1"/>
  53606.     <xsl:variable name="thisBand" select="@id"/>
  53607.     <div>
  53608.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * (number( ./@idref) -$thisReportRangeFrom)"/>in; position:absolute; </xsl:attribute>
  53609.       <xsl:apply-templates select="." mode="band">
  53610.         <xsl:with-param name="thisReport" select="$thisReport"/>
  53611.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53612.       </xsl:apply-templates>
  53613.       <xsl:if test="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[frxrecno=$thisBand and ejectafter='true']">
  53614.         <!-- page footer for this summary page -->
  53615.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$pageFooterNodeName][position()=last()]" mode="band">
  53616.           <xsl:with-param name="thisReport" select="$thisReport"/>
  53617.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53618.         </xsl:apply-templates>
  53619.       </xsl:if>
  53620.     </div>
  53621.   </xsl:template>
  53622.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="page">
  53623.     <xsl:param name="thisReport" select="1"/>
  53624.     <xsl:param name="thisReportID"/>
  53625.     <xsl:param name="thisReportRangeFrom" select="1"/>
  53626.     <xsl:variable name="thisPage" select="@id"/>
  53627.     <div>
  53628.       <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * ($thisPage -$thisReportRangeFrom)"/>in;position:absolute; </xsl:attribute>
  53629.       <xsl:apply-templates select="." mode="band">
  53630.         <xsl:with-param name="thisReport" select="$thisReport"/>
  53631.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53632.       </xsl:apply-templates>
  53633.       <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']">
  53634.         <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName]" mode="band">
  53635.           <xsl:with-param name="thisReport" select="$thisReport"/>
  53636.           <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53637.         </xsl:apply-templates>
  53638.       </xsl:if>
  53639.       <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">
  53640.         <xsl:with-param name="thisReport" select="$thisReport"/>
  53641.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53642.       </xsl:apply-templates>
  53643.     </div>
  53644.   </xsl:template>
  53645.   <xsl:template match="/Reports/VFP-Report/Data/Pages/*" mode="formattingBand">
  53646.     <xsl:param name="thisReport" select="1"/>
  53647.     <xsl:param name="thisReportID"/>
  53648.     <xsl:param name="thisPageHeight"/>
  53649.     <xsl:param name="thisReportPageHeight"/>
  53650.     <xsl:variable name="thisPage" select="@id"/>
  53651.     <xsl:variable name="thisPageRenderOffset" select="(($thisPage - 1) * $thisReportPageHeight)  + sum((/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/height) ) "/>
  53652.     <xsl:for-each select="./*">
  53653.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  53654.       <xsl:call-template name="Render">
  53655.         <xsl:with-param name="thisID" select="$thisID"/>
  53656.         <xsl:with-param name="thisZ" select="position()"/>
  53657.         <xsl:with-param name="thisPage" select="../@idref"/>
  53658.         <xsl:with-param name="thisReport" select="$thisReport"/>
  53659.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53660.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  53661.       </xsl:call-template>
  53662.     </xsl:for-each>
  53663.   </xsl:template>
  53664.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="unpagedBand">
  53665.       <xsl:param name="thisReport" select="1"/>
  53666.     <xsl:param name="thisReportID"/>
  53667.     <xsl:param name="thisPageHeight"/>
  53668.     <xsl:param name="thisReportPageHeight"/>
  53669.     <xsl:param name="thisPageHeaderHeight"/>
  53670.     <xsl:variable name="thisPage" select="@idref"/>
  53671.     <xsl:variable name="thisPageRenderOffset">
  53672.       <xsl:choose>
  53673.         <xsl:when test="../Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  53674.           <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 "/>
  53675.         </xsl:when>
  53676.         <xsl:otherwise>
  53677.           <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) -($thisPageHeaderHeight*$thisPage)  "/>
  53678.         </xsl:otherwise>
  53679.       </xsl:choose>
  53680.     </xsl:variable>
  53681.     <xsl:call-template name="addAnchor"/>
  53682.     <xsl:for-each select="./*">
  53683.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  53684.       <xsl:call-template name="Render">
  53685.         <xsl:with-param name="thisID" select="$thisID"/>
  53686.         <xsl:with-param name="thisZ" select="position()"/>
  53687.         <xsl:with-param name="thisPage" select="../@idref"/>
  53688.         <xsl:with-param name="thisReport" select="$thisReport"/>
  53689.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53690.         <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  53691.       </xsl:call-template>
  53692.     </xsl:for-each>
  53693.   </xsl:template>
  53694.   <xsl:template match="/Reports/VFP-Report/Data/*" mode="band">
  53695.     <xsl:param name="thisReport" select="1"/>
  53696.     <xsl:param name="thisReportID"/>
  53697.     <xsl:call-template name="addAnchor"/>
  53698.     <xsl:for-each select="./*">
  53699.       <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  53700.       <!--        <xsl:if test="key('Layout',concat($thisID, $thisReportID))/vpos > key('Layout',preceding-sibling::*/concat(@id,$thisReportID))/vpos"><div style="position=absolute;"/></xsl:if>  -->
  53701.       <xsl:call-template name="Render">
  53702.         <xsl:with-param name="thisID" select="$thisID"/>
  53703.         <xsl:with-param name="thisZ" select="position()"/>
  53704.         <xsl:with-param name="thisPage" select="../@idref"/>
  53705.         <xsl:with-param name="thisReport" select="$thisReport"/>
  53706.         <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53707.       </xsl:call-template>
  53708.     </xsl:for-each>
  53709.   </xsl:template>
  53710.   <xsl:template name="Render">
  53711.     <xsl:param name="thisID"/>
  53712.     <xsl:param name="thisZ"/>
  53713.     <xsl:param name="thisPage"/>
  53714.     <xsl:param name="thisReport" select="1"/>
  53715.     <xsl:param name="thisReportID" select="1"/>
  53716.     <xsl:param name="topOffset" select="0"/>
  53717.     <xsl:call-template name="addAnchor"/>
  53718.     <xsl:choose>
  53719.       <xsl:when test="name()=$lineNodeName and key('Layout',concat($thisID, $thisReportID))/height <  key('Layout',concat($thisID, $thisReportID))/width">
  53720.         <hr>
  53721.           <xsl:call-template name="addClassAttribute">
  53722.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/>
  53723.         </xsl:call-template>
  53724.         <xsl:call-template name="addTitleAttribute"/>
  53725.           <xsl:call-template name="addStyleAttribute">
  53726.             <xsl:with-param name="topOffset" select="$topOffset"/>
  53727.             <xsl:with-param name="thisZ" select="$thisZ"/>
  53728.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53729.            <xsl:with-param name="thisID" select="$thisID"/>
  53730.            <xsl:with-param name="styleType" select="'HR'"/>
  53731.           </xsl:call-template>
  53732.         </hr>
  53733.       </xsl:when>
  53734.       <xsl:when test="name()=$lineNodeName">
  53735.         <!-- vertical line -->
  53736.         <span>
  53737.           <xsl:call-template name="addClassAttribute">
  53738.             <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  53739.         </xsl:call-template>
  53740.           <xsl:call-template name="addTitleAttribute"/>
  53741.           <xsl:call-template name="addStyleAttribute">
  53742.             <xsl:with-param name="topOffset" select="$topOffset"/>
  53743.             <xsl:with-param name="thisZ" select="$thisZ"/>
  53744.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53745.            <xsl:with-param name="thisID" select="$thisID"/>
  53746.               <xsl:with-param name="styleType" select="'VR'"/>
  53747.           </xsl:call-template>
  53748.         </span>
  53749.       </xsl:when>
  53750.       <xsl:when test="$useTextAreaForStretchingText=1 and string-length(@hlink) = 0  and name()=$fieldNodeName and key('Layout',concat($thisID, $thisReportID))[stretch='true']">
  53751.         <textarea readonly="readonly" rows="0" cols="0">
  53752.           <xsl:call-template name="addClassAttribute">
  53753.              <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  53754.         </xsl:call-template>
  53755.           <xsl:call-template name="addTitleAttribute"/>
  53756.           <xsl:call-template name="addStyleAttribute">
  53757.             <xsl:with-param name="topOffset" select="$topOffset"/>
  53758.             <xsl:with-param name="thisZ" select="$thisZ"/>
  53759.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53760.           <xsl:with-param name="thisID" select="$thisID"/>
  53761.           <xsl:with-param name="styleType" select="'TextArea'"/>
  53762.           </xsl:call-template>
  53763.           <xsl:value-of select="."/>
  53764.         </textarea>
  53765.       </xsl:when>
  53766.       <xsl:otherwise>
  53767.         <div>
  53768.            <xsl:choose>
  53769.              <xsl:when test="@c=1">
  53770.                 <xsl:call-template name="addClassAttribute">
  53771.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'T')"/> 
  53772.                 </xsl:call-template>
  53773.              </xsl:when>
  53774.              <xsl:when test="@c=2">
  53775.                 <xsl:call-template name="addClassAttribute">
  53776.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'M')"/> 
  53777.                 </xsl:call-template>
  53778.              </xsl:when>
  53779.              <xsl:when test="@c=3">
  53780.                 <xsl:call-template name="addClassAttribute">
  53781.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'B')"/> 
  53782.                 </xsl:call-template>
  53783.              </xsl:when>
  53784.              <xsl:otherwise>
  53785.                 <xsl:call-template name="addClassAttribute">
  53786.                    <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  53787.                 </xsl:call-template>
  53788.              </xsl:otherwise>
  53789.            </xsl:choose>
  53790.           <xsl:call-template name="addTitleAttribute"/>
  53791.           <xsl:call-template name="addStyleAttribute">
  53792.             <xsl:with-param name="topOffset" select="$topOffset"/>
  53793.             <xsl:with-param name="thisZ" select="$thisZ"/>
  53794.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53795.           <xsl:with-param name="thisID" select="$thisID"/>
  53796.           <xsl:with-param name="styleType" select="'Div'"/>
  53797.           </xsl:call-template>
  53798.           <xsl:choose>
  53799.             <xsl:when test="name()=$shapeNodeName or name()=$lineNodeName">
  53800.               <!-- nothing -->
  53801.             </xsl:when>
  53802.             <xsl:when test="name()=$pictureNodeName and string-length(@hlink) > 0">
  53803.               <a href="{@hlink}">
  53804.                 <xsl:call-template name="renderPicture">
  53805.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53806.             <xsl:with-param name="thisID" select="$thisID"/>
  53807.                 </xsl:call-template>
  53808.               </a>
  53809.             </xsl:when>
  53810.             <xsl:when test="name()=$pictureNodeName and string-length(@PLINK) > 0">
  53811.               <a href="{translate(@PLINK,'\','/')}"  target="blank">
  53812.                 <xsl:call-template name="renderPicture">
  53813.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53814.             <xsl:with-param name="thisID" select="$thisID"/>
  53815.                 </xsl:call-template>
  53816.               </a>
  53817.             </xsl:when>
  53818.             <xsl:when test="name()=$pictureNodeName">
  53819.               <xsl:call-template name="renderPicture">
  53820.             <xsl:with-param name="thisReportID" select="$thisReportID"/>
  53821.             <xsl:with-param name="thisID" select="$thisID"/>
  53822.               </xsl:call-template>
  53823.             </xsl:when>
  53824.             <xsl:when test="string-length(@hlink) > 0">
  53825.               <a href="{@hlink}">
  53826.                 <xsl:call-template name="replaceText"/>
  53827.               </a>
  53828.             </xsl:when>
  53829.             <xsl:when test="string-length(@PLINK) > 0">
  53830.               <a href="{translate(@PLINK,'\','/')}" target="blank">
  53831.                 <xsl:call-template name="replaceText"/>
  53832.               </a>
  53833.             </xsl:when>
  53834.             <xsl:otherwise>
  53835.               <xsl:call-template name="replaceText"/>
  53836.             </xsl:otherwise>
  53837.           </xsl:choose>
  53838.         </div>
  53839.       </xsl:otherwise>
  53840.     </xsl:choose>
  53841.     <!-- /xsl:if -->
  53842.   </xsl:template>
  53843.   <xsl:template name="getCSSName">
  53844.   <xsl:param name="thisReport" select="1"/>
  53845.   <xsl:param name="thisItem" select="0"/>
  53846.   <xsl:param name="itemType" select="''"/>
  53847.   <xsl:param name="firstPass" select="1"/>
  53848.   <xsl:variable name="subst" select="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$thisItem]/@css"/>
  53849.     <xsl:choose>
  53850.      <xsl:when test="number($firstPass)=1 or string-length($subst) = 0"><xsl:value-of select="concat('.FRX',$thisReport,'_',$thisItem,$itemType)"/></xsl:when>
  53851.      <xsl:otherwise>.<xsl:value-of select="$subst"/></xsl:otherwise>
  53852.      </xsl:choose>
  53853.   </xsl:template>
  53854.   <xsl:template match="VFPFRXLayoutObject" mode="imagestyles">
  53855.     <xsl:param name="thisReport" select="1"/>
  53856.     <xsl:param name="firstPass" select="1"/>
  53857.      <xsl:call-template name="getCSSName">
  53858.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53859.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53860.      <xsl:with-param name="firstPass" select="$firstPass"/>
  53861.      </xsl:call-template>{
  53862.   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;
  53863.   <!-- <xsl:if test="offset=0">
  53864. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  53865. </xsl:if>
  53866. <xsl:if test="offset=2">
  53867. left: <xsl:value-of select="hpos div $FRUs"/>in; 
  53868. </xsl:if> -->
  53869.  </xsl:template>
  53870.   <xsl:template match="VFPFRXLayoutObject" mode="shapestyles">
  53871.    <xsl:param name="thisReport" select="1"/>
  53872.    <xsl:param name="firstPass" select="1"/>
  53873.      <xsl:call-template name="getCSSName">
  53874.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53875.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53876.      <xsl:with-param name="firstPass" select="$firstPass"/>
  53877.      </xsl:call-template>{
  53878.        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;
  53879.       }
  53880.       <!--    <xsl:if test="stretch='true'">
  53881. overflow: auto;
  53882.    </xsl:if> -->
  53883.   </xsl:template>
  53884.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesT">
  53885.     <xsl:param name="thisReport" select="1"/>
  53886.    <xsl:param name="firstPass" select="1"/>
  53887.      <xsl:call-template name="getCSSName">
  53888.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53889.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53890.      <xsl:with-param name="itemType" select="'T'"/>
  53891.      <xsl:with-param name="firstPass" select="$firstPass"/>
  53892.      </xsl:call-template>{
  53893.    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;
  53894.       }
  53895.       <!--    <xsl:if test="stretch='true'">
  53896. overflow: auto;
  53897.    </xsl:if> -->
  53898.   </xsl:template>
  53899.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesM">
  53900.     <xsl:param name="thisReport" select="1"/>
  53901.    <xsl:param name="firstPass" select="1"/>
  53902.      <xsl:call-template name="getCSSName">
  53903.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53904.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53905.      <xsl:with-param name="itemType" select="'M'"/>
  53906.      <xsl:with-param name="firstPass" select="$firstPass"/>
  53907.      </xsl:call-template>{
  53908.    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;
  53909.       }
  53910.       <!--    <xsl:if test="stretch='true'">
  53911. overflow: auto;
  53912.    </xsl:if> -->
  53913.   </xsl:template>
  53914.   <xsl:template match="VFPFRXLayoutObject" mode="shapestylesB">
  53915.     <xsl:param name="thisReport" select="1"/>
  53916.    <xsl:param name="firstPass" select="1"/>
  53917.      <xsl:call-template name="getCSSName">
  53918.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53919.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53920.      <xsl:with-param name="itemType" select="'B'"/>
  53921.      <xsl:with-param name="firstPass" select="$firstPass"/>
  53922.      </xsl:call-template>{
  53923.    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;
  53924.       }
  53925.       <!--    <xsl:if test="stretch='true'">
  53926. overflow: auto;
  53927.    </xsl:if> -->
  53928.   </xsl:template>
  53929.   <xsl:template match="VFPFRXLayoutObject" mode="textstyles">
  53930.     <xsl:param name="thisReport" select="1"/>
  53931.     <xsl:param name="firstPass" select="1"/>
  53932.      <xsl:call-template name="getCSSName">
  53933.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53934.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53935.      <xsl:with-param name="firstPass" select="$firstPass"/>
  53936.      </xsl:call-template>{
  53937.   <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>
  53938.       <xsl:when test="mode mod 2 = 1">background-color:transparent;</xsl:when>
  53939.       <xsl:otherwise>background-color: <xsl:call-template name="fillcolor"/>;</xsl:otherwise>
  53940.     </xsl:choose><xsl:choose>
  53941.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1 and $hideScrollbarsForTextAreas=1"> overflow:hidden;margin-top:4px;</xsl:when>
  53942.       <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1"> overflow: auto;margin-top:4px;</xsl:when>
  53943.       <xsl:otherwise>overflow:hidden;</xsl:otherwise>
  53944.     </xsl:choose> position: absolute;
  53945.    }   
  53946.     <!-- tbd, make vertical-align more dynamic -->  
  53947.   </xsl:template>
  53948.   <xsl:template match="VFPFRXLayoutObject" mode="linestyles">
  53949.     <xsl:param name="thisReport" select="1"/>
  53950.    <xsl:param name="firstPass" select="1"/>
  53951.      <xsl:call-template name="getCSSName">
  53952.      <xsl:with-param name="thisReport" select="$thisReport"/>
  53953.      <xsl:with-param name="thisItem" select="frxrecno"/>
  53954.       <xsl:with-param name="firstPass" select="$firstPass"/>
  53955.      </xsl:call-template>{
  53956.    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;
  53957.       <xsl:choose>
  53958.       <xsl:when test="height < width"> width: <xsl:value-of select="width div $FRUs"/>in;
  53959.   height: <xsl:value-of select="floor(height div $FRUsInPixelsat96DPI)"/>px; margin: 0px;</xsl:when>
  53960.       <xsl:otherwise>  height: <xsl:value-of select="height div $FRUs"/>in;
  53961.   width: <xsl:value-of select="floor(width div $FRUsInPixelsat96DPI)"/>px;  </xsl:otherwise>
  53962.     </xsl:choose>
  53963.   </xsl:template>
  53964.   <xsl:template name="pattern">
  53965.     <xsl:choose>
  53966.       <xsl:when test="penpat=0"> none </xsl:when>
  53967.       <xsl:when test="penpat=1"> dotted </xsl:when>
  53968.       <xsl:when test="penpat=2"> dashed </xsl:when>
  53969.       <xsl:otherwise> solid </xsl:otherwise>
  53970.     </xsl:choose>
  53971.   </xsl:template>
  53972.   <xsl:template name="pencolor">#<xsl:call-template name="getHexColorValue">
  53973.       <xsl:with-param name="theNumber" select="penred"/>
  53974.     </xsl:call-template>
  53975.     <xsl:call-template name="getHexColorValue">
  53976.       <xsl:with-param name="theNumber" select="pengreen"/>
  53977.     </xsl:call-template>
  53978.     <xsl:call-template name="getHexColorValue">
  53979.       <xsl:with-param name="theNumber" select="penblue"/>
  53980.     </xsl:call-template>
  53981.   </xsl:template>
  53982.   <xsl:template name="fillcolor">#<xsl:call-template name="getHexColorValue">
  53983.       <xsl:with-param name="theNumber" select="fillred"/>
  53984.       <xsl:with-param name="fill" select="1"/>
  53985.     </xsl:call-template>
  53986.     <xsl:call-template name="getHexColorValue">
  53987.       <xsl:with-param name="theNumber" select="fillgreen"/>
  53988.       <xsl:with-param name="fill" select="1"/>
  53989.     </xsl:call-template>
  53990.     <xsl:call-template name="getHexColorValue">
  53991.       <xsl:with-param name="theNumber" select="fillblue"/>
  53992.       <xsl:with-param name="fill" select="1"/>
  53993.     </xsl:call-template>
  53994.   </xsl:template>
  53995.   <xsl:template name="getFontAttributes">
  53996.     <xsl:param name="theStyles" select="0"/>
  53997.     <xsl:choose>
  53998.       <xsl:when test="fontbold='true'">font-weight: bold;</xsl:when>
  53999.       <xsl:otherwise>font-weight: normal;</xsl:otherwise>
  54000.     </xsl:choose>
  54001.     <xsl:if test="fontstrikethrough='true' or fontunderline='true'">text-decoration: <xsl:if test="fontstrikethrough='true'">line-through </xsl:if>
  54002.       <xsl:if test="fontunderline='true'">underline</xsl:if>;</xsl:if>
  54003.     <xsl:if test="fontitalic='true'">font-style: italic;</xsl:if>
  54004.   </xsl:template>
  54005.   <xsl:template name="getHexColorValue">
  54006.     <xsl:param name="theNumber" select="-1"/>
  54007.     <xsl:param name="fill" select="0"/>
  54008.     <xsl:variable name="useNumber">
  54009.       <xsl:choose>
  54010.         <xsl:when test="$fill=1 and fillpat > 1 and ((fillred+fillblue+fillgreen) < $fillPatternShade)">
  54011.           <xsl:choose>
  54012.             <xsl:when test="($fillPatternOffset + $theNumber) > 254">255</xsl:when>
  54013.             <xsl:otherwise>
  54014.               <xsl:value-of select="$fillPatternOffset + $theNumber"/>
  54015.             </xsl:otherwise>
  54016.           </xsl:choose>
  54017.         </xsl:when>
  54018.         <xsl:otherwise>
  54019.           <xsl:value-of select="$theNumber"/>
  54020.         </xsl:otherwise>
  54021.       </xsl:choose>
  54022.     </xsl:variable>
  54023.     <xsl:choose>
  54024.       <xsl:when test="$useNumber=-1 and $fill=1">FF</xsl:when>
  54025.       <xsl:when test="$useNumber=-1">00</xsl:when>
  54026.       <xsl:otherwise>
  54027.         <xsl:call-template name="getHexForNumber">
  54028.           <xsl:with-param name="theNumber" select="floor($useNumber div 16)"/>
  54029.         </xsl:call-template>
  54030.         <xsl:call-template name="getHexForNumber">
  54031.           <xsl:with-param name="theNumber" select="round($useNumber mod 16)"/>
  54032.         </xsl:call-template>
  54033.       </xsl:otherwise>
  54034.     </xsl:choose>
  54035.   </xsl:template>
  54036.   <xsl:template name="setPrecision">
  54037.     <xsl:param name="theNumber" select="-1"/>
  54038.     <xsl:choose>
  54039.       <xsl:when test="$numberPrecision = -1 or not(contains(string($theNumber),'.'))">
  54040.         <xsl:value-of select="$theNumber"/>
  54041.       </xsl:when>
  54042.       <xsl:when test="$numberPrecision > 0">
  54043.         <!--        <xsl:value-of select="concat(string(floor($theNumber)),'.',substring(substring-after(string($theNumber),'.'),1,$numberPrecision))"/>  -->
  54044.         <xsl:value-of select="format-number($theNumber,concat('##0.',$zeros))"/>
  54045.       </xsl:when>
  54046.       <xsl:when test="$numberPrecision=0">
  54047.         <xsl:value-of select="round($theNumber)"/>
  54048.       </xsl:when>
  54049.       <xsl:otherwise>
  54050.         <!-- shouldn't happen-->
  54051.         <xsl:value-of select="$theNumber"/>
  54052.       </xsl:otherwise>
  54053.     </xsl:choose>
  54054.   </xsl:template>
  54055.   <xsl:template name="getHexForNumber">
  54056.     <xsl:param name="theNumber" select="-1"/>
  54057.     <xsl:choose>
  54058.       <xsl:when test="$theNumber=-1">00</xsl:when>
  54059.       <xsl:when test="$theNumber < 10">
  54060.         <xsl:value-of select="$theNumber"/>
  54061.       </xsl:when>
  54062.       <xsl:when test="$theNumber = 10">A</xsl:when>
  54063.       <xsl:when test="$theNumber = 11">B</xsl:when>
  54064.       <xsl:when test="$theNumber = 12">C</xsl:when>
  54065.       <xsl:when test="$theNumber = 13">D</xsl:when>
  54066.       <xsl:when test="$theNumber = 14">E</xsl:when>
  54067.       <xsl:when test="$theNumber = 15">F</xsl:when>
  54068.     </xsl:choose>
  54069.   </xsl:template>
  54070.   <xsl:template name="getTextAlignment">text-align:<xsl:choose>
  54071.       <xsl:when test="objtype=5"><!-- picture field empty for left (default), @I for centered and @J right -->
  54072.         <xsl:choose>
  54073.           <xsl:when test="string-length(picture) = 0">left;</xsl:when>
  54074.           <xsl:when test="contains(picture,'@J')">right;</xsl:when>
  54075.           <xsl:otherwise>center;</xsl:otherwise>
  54076.         </xsl:choose>
  54077.       </xsl:when>
  54078.       <xsl:otherwise>
  54079.         <xsl:choose>
  54080.           <xsl:when test="offset=0">left;</xsl:when>
  54081.           <xsl:when test="offset=1">right;</xsl:when>
  54082.           <xsl:otherwise>center;</xsl:otherwise>
  54083.         </xsl:choose>
  54084.       </xsl:otherwise>
  54085.     </xsl:choose>
  54086.     <!-- don't include direction at all if you want context -->
  54087.     <xsl:if test="mode < 4">direction:<xsl:choose>
  54088.         <xsl:when test="mode > 1">rtl;</xsl:when>
  54089.         <xsl:otherwise>ltr;</xsl:otherwise>
  54090.       </xsl:choose>
  54091.     </xsl:if>
  54092.   </xsl:template>
  54093.   <xsl:template name="ExternalStyleSheets">
  54094.     <xsl:param name="thisReportNode" select="/Reports/VFP-Report[1]"/>
  54095.     <xsl:param name="thisReportID" select="'this report'"/>
  54096.    <xsl:if test="count($thisReportNode/Run/property[@id='css_sheet']) > 0">
  54097.    <xsl:comment>
  54098.    External stylesheet(s) for <xsl:value-of select="$thisReportID"/>
  54099.    </xsl:comment>
  54100.    <xsl:for-each select="$thisReportNode/Run/property[@id='css_sheet']">
  54101.       <link type="text/css" href="{./text()}" rel="stylesheet"/>
  54102.    </xsl:for-each>
  54103.    </xsl:if>   
  54104.   </xsl:template>
  54105.   <xsl:template name="DocumentStyles">
  54106.   <xsl:comment>Global document styles, if any</xsl:comment>
  54107.     <style type="text/css">
  54108.      <xsl:comment><xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  54109.      <xsl:if test="number($noBody)!=1">html{direction:rtl;} 
  54110.      body{direction:rtl;}</xsl:if>
  54111.      div{direction:rtl;} 
  54112.      span{direction:rtl;}
  54113.      </xsl:if>
  54114.      </xsl:comment>
  54115.     </style>
  54116.   </xsl:template>
  54117.   <xsl:template name="Styles">
  54118.     <xsl:param name="thisReport" select="1"/>
  54119.     <xsl:param name="thisReportID"/>
  54120.     <xsl:comment>
  54121.     Styles for report # <xsl:value-of select="$thisReport"/>  in this run, 
  54122.     <xsl:value-of select="$thisReportID"/>
  54123.     </xsl:comment>
  54124.     <style type="text/css">
  54125.       <xsl:comment>
  54126.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]" mode="linestyles">
  54127.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54128.         </xsl:apply-templates>
  54129.       
  54130.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]">
  54131.         <xsl:variable name="frxrecno" select="frxrecno"/>
  54132.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  54133.               <xsl:apply-templates select="." mode="linestyles">
  54134.               <xsl:with-param name="thisReport" select="$thisReport"/>
  54135.                  <xsl:with-param name="firstPass" select="0"/>
  54136.               </xsl:apply-templates>
  54137.         </xsl:if>
  54138.       </xsl:for-each>
  54139.         
  54140.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestyles">
  54141.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54142.         </xsl:apply-templates>
  54143.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesT">
  54144.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54145.         </xsl:apply-templates>
  54146.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesM">
  54147.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54148.         </xsl:apply-templates>
  54149.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesB">
  54150.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54151.         </xsl:apply-templates>
  54152.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]">
  54153.          <xsl:variable name="frxrecno" select="frxrecno"/>
  54154.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  54155.               <xsl:apply-templates select="." mode="shapestyles">
  54156.                 <xsl:with-param name="thisReport" select="$thisReport"/>
  54157.                 <xsl:with-param name="firstPass" select="0"/>
  54158.               </xsl:apply-templates>
  54159.         </xsl:if>
  54160.       </xsl:for-each>
  54161.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]" mode="textstyles">
  54162.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54163.         </xsl:apply-templates>
  54164.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]">
  54165.         <xsl:variable name="frxrecno" select="frxrecno"/>
  54166.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  54167.               <xsl:apply-templates select="." mode="textstyles">
  54168.               <xsl:with-param name="thisReport" select="$thisReport"/>
  54169.                  <xsl:with-param name="firstPass" select="0"/>
  54170.               </xsl:apply-templates>
  54171.         </xsl:if>
  54172.       </xsl:for-each>
  54173.         
  54174.         <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]" mode="imagestyles">
  54175.           <xsl:with-param name="thisReport" select="$thisReport"/>
  54176.         </xsl:apply-templates>
  54177.       <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]">
  54178.         <xsl:variable name="frxrecno" select="frxrecno"/>
  54179.         <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  54180.               <xsl:apply-templates select="." mode="imagestyles">
  54181.               <xsl:with-param name="thisReport" select="$thisReport"/>
  54182.                  <xsl:with-param name="firstPass" select="0"/>
  54183.               </xsl:apply-templates>
  54184.         </xsl:if>
  54185.       </xsl:for-each>
  54186.       </xsl:comment>
  54187.     </style>
  54188.    <xsl:call-template name="ExternalStyleSheets">
  54189.    <xsl:with-param name="thisReportNode" select="/Reports/VFP-Report[$thisReport]"/> 
  54190.    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54191.    </xsl:call-template>
  54192.   </xsl:template>
  54193.   <xsl:template name="replaceText">
  54194.     <xsl:choose>
  54195.       <xsl:when test="$useTextAreaForStretchingText=1">
  54196.         <xsl:value-of select="."/>
  54197.       </xsl:when>
  54198.       <xsl:otherwise>
  54199.         <xsl:call-template name="replaceWhiteSpace">
  54200.           <xsl:with-param name="string" select="."/>
  54201.         </xsl:call-template>
  54202.       </xsl:otherwise>
  54203.     </xsl:choose>
  54204.   </xsl:template>
  54205.   <xsl:template name="renderPicture">
  54206.   <xsl:param name="thisReportID"/>
  54207.   <xsl:param name="thisID"/>
  54208.     <img>
  54209.       <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>
  54210.       <xsl:variable name="srcImage">
  54211.    <xsl:choose>
  54212.           <xsl:when test="@img and $externalFileLocation">
  54213.             <xsl:value-of select="translate(concat($externalFileLocation,@img),'\','/')"/>
  54214.           </xsl:when>
  54215.           <xsl:when test="@img and not(contains(./@img,':'))">
  54216.                <xsl:value-of select="translate(@img,'\','/')"/>
  54217.           </xsl:when>
  54218.           <xsl:when test="@img">
  54219.             <xsl:value-of select="concat('file://',translate(@img,'\','/'))"/>
  54220.           </xsl:when>
  54221.           <xsl:when test="$copyImageFiles = '1'">
  54222.             <xsl:value-of select="translate(concat($externalFileLocation,key('Layout',concat($thisID, $thisReportID))/unpathedimg),'\','/')"/>
  54223.           </xsl:when>
  54224.           <xsl:when test="string-length(./text()) > 0 and not(contains(./text(),':')) ">
  54225.             <xsl:value-of select="translate(./text(),'\','/')"/>
  54226.           </xsl:when>
  54227.           <xsl:when test="string-length(./text()) > 0">
  54228.             <xsl:value-of select="concat('file://',translate(./text(),'\','/'))"/>
  54229.           </xsl:when>
  54230.           <xsl:otherwise>
  54231.             <xsl:value-of select="concat('file://',translate(key('Layout',concat($thisID, $thisReportID))/pathedimg,'\','/'))"/>
  54232.           </xsl:otherwise>
  54233.         </xsl:choose>
  54234.       </xsl:variable>
  54235.       <xsl:attribute name="src"><xsl:value-of select="$srcImage"/></xsl:attribute>
  54236.       <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 -->
  54237.  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);
  54238.  </xsl:when><xsl:when test="$imgGeneral/general='1'"><!-- scale and retain --><xsl:choose><xsl:when test="@h > @w">
  54239.  width:100%;
  54240.  </xsl:when><xsl:otherwise>
  54241.  height:100%;
  54242.  </xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise><!-- stretch to fill frame -->
  54243.  height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;    
  54244. width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;    
  54245.  </xsl:otherwise></xsl:choose></xsl:attribute>
  54246.     </img>
  54247.   </xsl:template>
  54248.   <xsl:template name="addClassAttribute">
  54249.   <xsl:param name="item" select="."/>
  54250.   <xsl:param name="default" select="''"/>
  54251.   <xsl:attribute name="class"><xsl:choose>
  54252.   <xsl:when test="string-length($item/@CSS) > 0">
  54253.   <xsl:value-of select="$item/@CSS"/>
  54254.   </xsl:when>
  54255.   <xsl:when test="string-length($item/@css) = 0">
  54256.   <xsl:value-of select="$default"/>
  54257.   </xsl:when>
  54258.   <xsl:otherwise>
  54259.   <xsl:value-of select="$item/@css"/>
  54260.   </xsl:otherwise>
  54261.   </xsl:choose></xsl:attribute>
  54262.   </xsl:template>
  54263.   <xsl:template name="addTitleAttribute">
  54264.     <xsl:param name="item" select="."/>
  54265.     <xsl:if test="string-length($item/@title) > 0">
  54266.       <xsl:attribute name="title"><xsl:value-of select="$item/@title"/></xsl:attribute>
  54267.     </xsl:if>
  54268.   </xsl:template>
  54269.   <xsl:template name="addAnchor">
  54270.     <xsl:param name="item" select="."/>
  54271.     <xsl:if test="string-length($item/@anchor) > 0">
  54272.       <a>
  54273.      <xsl:attribute name="{$anchorAttr}"><xsl:value-of select="$item/@anchor"/></xsl:attribute> 
  54274.         <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  54275.       </a>
  54276.     </xsl:if>
  54277.   </xsl:template>
  54278.   <xsl:template name="addStyleAttribute">
  54279.     <xsl:param name="topOffset" select="0"/>
  54280.     <xsl:param name="thisZ" select="1"/>
  54281.     <xsl:param name="thisReportID"/>
  54282.     <xsl:param name="thisID"/>
  54283.     <xsl:param name="styleType" select="'Div'"/>
  54284. <!-- do NOT mess around with the white space in here, even though it 
  54285. looks ugly the way it is!! -->
  54286. <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;
  54287. top:<xsl:choose>
  54288.   <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>
  54289.   <xsl:otherwise><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="(@t +$topOffset) div $printDPI"/></xsl:call-template></xsl:otherwise>
  54290. </xsl:choose>in;<xsl:choose>
  54291.   <xsl:when test="$styleType='VR'">width:0in;</xsl:when>
  54292.   <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>
  54293. <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>
  54294. <xsl:if test="$useDynamicTextAttributes=1 and key('Layout',concat($thisID,$thisReportID))[objtype=5 or objtype=8]">
  54295. <xsl:call-template name="addDynamicTextStyleAttributes"/>
  54296. </xsl:if>
  54297. </xsl:attribute>
  54298.     </xsl:template>
  54299.     <xsl:template name="addDynamicTextStyleAttributes">
  54300.   <!-- dynamic values for font, omit these attributes if they don't appear on each object-->
  54301.   <xsl:if test="@FNAME">
  54302.     font-family:'<xsl:value-of select="@FNAME"/>';font-size:<xsl:value-of select="@FSIZE"/>pt;
  54303.     <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>
  54304.     font-weight:<xsl:choose><xsl:when test="@FSTYLE mod 2 = 1">bold</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  54305.     font-style:<xsl:choose><xsl:when test="(@FSTYLE div 2) mod 2 =1">italic</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  54306.    background-color:<xsl:call-template name="getAlphaColor">
  54307.    <xsl:with-param name="alpha" select="@FA"/>
  54308.    <xsl:with-param name="r" select="@FR"/>
  54309.    <xsl:with-param name="g" select="@FG"/>
  54310.    <xsl:with-param name="b" select="@FB"/>
  54311.    </xsl:call-template>;color:<xsl:call-template name="getAlphaColor"/>;
  54312.     </xsl:if>
  54313.     </xsl:template>
  54314.    <xsl:template name="getAlphaColor">
  54315.    <xsl:param name="alpha" select="@PA"/>
  54316.    <xsl:param name="r" select="@PR"/>
  54317.    <xsl:param name="g" select="@PG"/>
  54318.    <xsl:param name="b" select="@PB"/>
  54319.    <xsl:choose>
  54320.    <xsl:when test="$alpha=0">transparent</xsl:when>
  54321.    <xsl:when test="$alpha=255 or ($r+$g+$b > $fieldAlphaOpacityShade)"><xsl:value-of select="concat('rgb(',$r,',',$g,',',$b,')')"/></xsl:when>
  54322.    <xsl:otherwise><xsl:value-of select="concat('rgb(',$r+$fieldAlphaOpacityOffset,',',$g+$fieldAlphaOpacityOffset,',',$b+$fieldAlphaOpacityOffset,')')"/></xsl:otherwise>
  54323.    </xsl:choose>
  54324.    </xsl:template>
  54325.     <xsl:template name="replaceWhiteSpace">
  54326.     <xsl:param name="string" select="."/>
  54327.     <xsl:choose>
  54328.       <xsl:when test="contains($string,' ')">
  54329.         <xsl:call-template name="replaceWhiteSpace">
  54330.           <xsl:with-param name="string" select="substring-before($string, ' ')"/>
  54331.         </xsl:call-template>
  54332.         <br/>
  54333.         <xsl:call-template name="replaceWhiteSpace">
  54334.           <xsl:with-param name="string" select="substring-after($string, ' ')"/>
  54335.         </xsl:call-template>
  54336.       </xsl:when>
  54337.       <xsl:otherwise>
  54338.         <xsl:value-of select="$string"/>
  54339.       </xsl:otherwise>
  54340.     </xsl:choose>
  54341.   </xsl:template>
  54342.   <xsl:template name="Script">
  54343.     <script language="JavaScript">
  54344.       <xsl:comment>
  54345.      //TBD
  54346.       </xsl:comment>
  54347.     </script>
  54348.   </xsl:template>
  54349.   <xsl:template match="*|@*" mode="debug">
  54350.    <xsl:copy-of select="."/>
  54351.   </xsl:template> 
  54352. </xsl:stylesheet>
  54353. ENDTEXT
  54354. SET TEXTMERGE OFF
  54355. SET TEXTMERGE TO
  54356. RETURN m.lcResult
  54357. *!*    LOCAL m.lcResult
  54358. *!*    SET TEXTMERGE TO MEMVAR m.lcResult NOSHOW
  54359. *!*    SET TEXTMERGE ON 
  54360. *!*    *!* -------------------------------------------------------------------
  54361. *!*    *!* -------------------------------------------------------------------
  54362. *!*    *!* -------------------------------------------------------------------
  54363. *!*    *!* 2011-08-12 - Jacques Parent
  54364. *!*    *!* -------------------------------------------------------------------
  54365. *!*    *!* The following text have been modified to let boxes that print from 
  54366. *!*    *!* header to footer can print correctly.
  54367. *!*    *!* -------------------------------------------------------------------
  54368. *!*    *!* Changes (This is pretty complicated...)
  54369. *!*    *!*     - Classe "getCSSName" have been modified to add an "itemType"
  54370. *!*    *!*          to the class name:  T = TOP; M = Middle; B = Bottom;
  54371. *!*    *!*          Default:  do not add anything.
  54372. *!*    *!*        - New clases "shapestylesT", "shapestylesM" and "shapestylesB"
  54373. *!*    *!*       have been created:
  54374. *!*    *!*         shapestylesT:  Print only top, left and right lines
  54375. *!*    *!*         shapestylesM:  Print left and right lines
  54376. *!*    *!*         shapestylesB:  Print only bottom, left and right lines
  54377. *!*    *!*        - "Render" class have been modified to add a "T", "M" or "B"
  54378. *!*    *!*          to the boxes' class depending of the "@c" variable,
  54379. *!*    *!*       containing the "continuation" information (0 = complete;
  54380. *!*    *!*          (1 = Top; 2 = Middle; 3 = Bottom)
  54381. *!*    *!* -------------------------------------------------------------------
  54382. *!*    *!* I am hoping that this change do not cause problems elseware...  It 
  54383. *!*    *!* is a pain do search in that text when you have never heard of xsl
  54384. *!*    *!* or Microsoft DOM...  but I've managed for this time.  So let's hope! :)
  54385. *!*    *!* -------------------------------------------------------------------
  54386. *!*    *!* -------------------------------------------------------------------
  54387. *!*    *!* -------------------------------------------------------------------
  54388. *!*    TEXT
  54389. *!*    <?xml version="1.0"?>
  54390. *!*    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  54391. *!*      <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"/>
  54392. *!*      <xsl:param name="externalFileLocation"/>
  54393. *!*      <!--select="'./whatever/'" or 'http://something/myimages/' or "'./'" or... -->
  54394. *!*      <xsl:param name="copyImageFiles" select="0"/>
  54395. *!*      <xsl:param name="generalFieldDPI" select="96"/>
  54396. *!*      <xsl:param name="fillPatternShade" select="180*3"/>
  54397. *!*      <xsl:param name="fillPatternOffset" select="128"/>
  54398. *!*      <xsl:param name="numberPrecision" select="5"/>
  54399. *!*      <xsl:param name="fieldAlphaOpacityOffset" select="75"/>
  54400. *!*      <xsl:param name="fieldAlphaOpacityShade" select="180*3"/>
  54401. *!*      <xsl:param name="useTextAreaForStretchingText" select="1"/>
  54402. *!*      <xsl:param name="hideScrollbarsForTextAreas" select="0"/>
  54403. *!*      <xsl:param name="PageTitlePrefix_LOC" select="''"/>
  54404. *!*    <!--    <xsl:param name="unpagedModeIncludesOnePageHeader" select="0"/> -->
  54405. *!*      <xsl:param name="unpagedModeIncludesTitle" select="1"/>
  54406. *!*      <xsl:param name="noBody" select="0"/>
  54407. *!*      <xsl:param name="useDynamicTextAttributes" select="1"/>
  54408. *!*      <xsl:param name="anchorAttrName" select="1"/>   
  54409. *!*      <!-- id is theoretically better if you wanted to write
  54410. *!*       script against this element, or in case name is 
  54411. *!*       deprecated in a future version of the standard, 
  54412. *!*       but a value of 1 forces name to be used instead. 
  54413. *!*       Current-newer browsers will be okay with this, and older 
  54414. *!*       browsers might prefer it. -->
  54415. *!*      <xsl:variable name="FRUs" select="10000"/>
  54416. *!*      <xsl:variable name="printDPI" select="960"/>
  54417. *!*      <xsl:variable name="FRUsInPixelsat96DPI" select="104.167"/>
  54418. *!*      <xsl:variable name="imagePixelRatio" select="$generalFieldDPI div $printDPI"/>
  54419. *!*      <xsl:variable name="zeros" select="substring('0000000000000000000000000',1,$numberPrecision)"/>
  54420. *!*      <xsl:variable name="thisPageHeight">
  54421. *!*        <xsl:value-of select="number(/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@pageheight  div $printDPI)"/>
  54422. *!*      </xsl:variable>
  54423. *!*      <xsl:variable name="lineNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=6]/name"/>
  54424. *!*      <xsl:variable name="labelNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=5]/name"/>
  54425. *!*      <xsl:variable name="fieldNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=8]/name"/>
  54426. *!*      <xsl:variable name="shapeNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=7]/name"/>
  54427. *!*      <xsl:variable name="pictureNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[type=17]/name"/>
  54428. *!*      <xsl:variable name="detailNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=4]/name"/>
  54429. *!*      <xsl:variable name="detailHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=9]/name"/>
  54430. *!*      <xsl:variable name="detailFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=10]/name"/>
  54431. *!*      <xsl:variable name="pageHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=1]/name"/>
  54432. *!*      <xsl:variable name="pageFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=7]/name"/>
  54433. *!*      <xsl:variable name="columnHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=2]/name"/>
  54434. *!*      <xsl:variable name="columnFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=6]/name"/>
  54435. *!*      <xsl:variable name="groupHeaderNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=3]/name"/>
  54436. *!*      <xsl:variable name="groupFooterNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=5]/name"/>
  54437. *!*      <xsl:variable name="titleNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=0]/name"/>
  54438. *!*      <xsl:variable name="summaryNodeName" select="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutNode[code=8]/name"/>
  54439. *!*      <xsl:variable name="anchorAttr">
  54440. *!*      <xsl:choose>
  54441. *!*      <xsl:when test="$anchorAttrName=1">name</xsl:when>
  54442. *!*      <xsl:otherwise>id</xsl:otherwise>
  54443. *!*      </xsl:choose> 
  54444. *!*      </xsl:variable>
  54445. *!*      <xsl:key name="Layout" match="/Reports/VFP-Report/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[platform='WINDOWS']" use="concat(frxrecno,../../@id)"/>
  54446. *!*      <xsl:template match="/">
  54447. *!*          <xsl:choose>
  54448. *!*            <xsl:when test="number($noBody)=1">
  54449. *!*            <div>
  54450. *!*             <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"/>        
  54451. *!*              <xsl:call-template name="renderStyles"/>
  54452. *!*              <xsl:call-template name="body"/>
  54453. *!*             </div>
  54454. *!*            </xsl:when>
  54455. *!*            <xsl:otherwise>
  54456. *!*              <xsl:apply-templates select="/" mode="full"/>
  54457. *!*            </xsl:otherwise>
  54458. *!*          </xsl:choose>
  54459. *!*      </xsl:template>
  54460. *!*      <xsl:template match="/" mode="full">
  54461. *!*        <html>
  54462. *!*           <xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  54463. *!*           <xsl:attribute name="dir">rtl</xsl:attribute>
  54464. *!*           </xsl:if>
  54465. *!*          <head>
  54466. *!*            <meta  http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  54467. *!*    <xsl:comment> 
  54468. *!*    the above repeated-explicit declaration is necessary because 
  54469. *!*    some versions of MSXML xslt processing don't include the 
  54470. *!*    charset as required by the XSLT standard when method="html".  
  54471. *!*    Explicitly including the META creates a doubled meta content-type tag, 
  54472. *!*    but we do need the encoding to be specified properly and the doubled tag is okay. 
  54473. *!*    </xsl:comment>
  54474. *!*            <meta name="description" 
  54475. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='description']/.}"/>
  54476. *!*            <meta name="author" 
  54477. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='author']/.}"/>
  54478. *!*            <meta name="copyright" 
  54479. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='copyright']/.}"/>
  54480. *!*            <meta name="date" 
  54481. *!*    content="{/Reports/VFP-Report[1]/Run/property[@id='date']/.}"/>
  54482. *!*            <xsl:if test="/Reports/VFP-Report/Run/property[@id='keywords']">
  54483. *!*            <meta name="keywords">
  54484. *!*            <xsl:attribute name="content">
  54485. *!*             <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='keywords']">
  54486. *!*             <xsl:value-of select="."/><xsl:if test="not(position()=last())">,</xsl:if>
  54487. *!*            </xsl:for-each>
  54488. *!*            </xsl:attribute>
  54489. *!*            </meta> 
  54490. *!*            </xsl:if>
  54491. *!*            <xsl:if test="/Reports/VFP-Report/Run/property[@id='http-equiv']">
  54492. *!*                <xsl:for-each select="/Reports/VFP-Report/Run/property[@id='http-equiv']//meta">
  54493. *!*              <xsl:variable name="thisMeta" select="concat(ancestor-or-self::*[@id='http-equiv']/@id ,'.',@name)"/>
  54494. *!*              <!-- the extra Run nodes being looked up are potentially evaluated, not original values of the property, 
  54495. *!*              so we can account for expressions -->
  54496. *!*              <meta  http-equiv="{@name}" content="{/Reports/VFP-Report/Run/property[@id=$thisMeta]}"/>
  54497. *!*              </xsl:for-each>
  54498. *!*            </xsl:if>
  54499. *!*            <title>
  54500. *!*              <xsl:choose>
  54501. *!*              <xsl:when test="/Reports/VFP-Report[1]/Run/property[@id='title']">
  54502. *!*                <xsl:value-of select="/Reports/VFP-Report[1]/Run/property[@id='title']/."/>
  54503. *!*              </xsl:when>
  54504. *!*              <xsl:otherwise>
  54505. *!*                <!-- default/VFP 9.0 RTM handling -->
  54506. *!*                 <xsl:value-of select="$PageTitlePrefix_LOC"/>
  54507. *!*                 <xsl:if test="string-length(/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name) = 0">
  54508. *!*                   <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/@id"/>
  54509. *!*                 </xsl:if>
  54510. *!*                 <xsl:value-of select="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXPrintJob/@name"/>
  54511. *!*              </xsl:otherwise>
  54512. *!*              </xsl:choose>
  54513. *!*            </title>
  54514. *!*            <xsl:call-template name="renderStyles"/>
  54515. *!*          </head>
  54516. *!*          <body>
  54517. *!*            <xsl:call-template name="body"/>
  54518. *!*          </body>
  54519. *!*        </html>
  54520. *!*      </xsl:template>
  54521. *!*      <xsl:template name="renderStyles">
  54522. *!*         <xsl:call-template name="DocumentStyles"/>
  54523. *!*        <xsl:for-each select="/Reports/VFP-Report">
  54524. *!*          <xsl:call-template name="Styles">
  54525. *!*            <xsl:with-param name="thisReport" select="position()"/>
  54526. *!*            <xsl:with-param name="thisReportID" select="./VFP-RDL/@id"/>
  54527. *!*          </xsl:call-template>
  54528. *!*          <!--        <xsl:call-template name="Script"/> avoid security problems: no script, not even a lone comment indicating TBD -->
  54529. *!*        </xsl:for-each>
  54530. *!*      </xsl:template>
  54531. *!*      <xsl:template name="body">
  54532. *!*        <xsl:for-each select="/Reports/VFP-Report">
  54533. *!*          <xsl:variable name="thisReport" select="position()"/>
  54534. *!*          <xsl:variable name="thisReportID" select="./VFP-RDL/@id"/>
  54535. *!*          <xsl:variable name="thisReportRangeFrom" select="number(./VFP-RDL/VFPDataSet/VFPFRXCommand/@RANGEFROM)"/>
  54536. *!*          <xsl:variable name="separateTitlePage" select="./Data/*[name()=$titleNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='0' and pagebreak='true']"/>
  54537. *!*          <xsl:variable name="separateSummaryPage" select="./Data/*[name()=$summaryNodeName] and ./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandtype='8' and pagebreak='true' and ejectbefor='false']"/>
  54538. *!*          <xsl:variable name="reportPages" select="count(./Data/*[(name()=$pageHeaderNodeName) or (name()=$titleNodeName and $separateTitlePage=true()) or  (name()=$summaryNodeName and $separateSummaryPage=true())])"/>
  54539. *!*          <div>
  54540. *!*            <xsl:if test="number($noBody)=1">
  54541. *!*              <xsl:attribute name="style">
  54542. *!*                   position=relative;height=<xsl:value-of select="$reportPages * $thisPageHeight"/>in;
  54543. *!*                   </xsl:attribute>
  54544. *!*            </xsl:if>
  54545. *!*            <xsl:choose>
  54546. *!*              <xsl:when test="./Data/*[name() = $pageHeaderNodeName]">
  54547. *!*                <xsl:if test="$separateTitlePage">
  54548. *!*                  <xsl:apply-templates select="./Data/*[name()=$titleNodeName]" mode="titlesummarypage">
  54549. *!*                    <xsl:with-param name="thisReport" select="$thisReport"/>
  54550. *!*                    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54551. *!*                  </xsl:apply-templates>
  54552. *!*                </xsl:if>
  54553. *!*                <xsl:apply-templates select="./Data/*[name()=$pageHeaderNodeName]" mode="page">
  54554. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  54555. *!*                  <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54556. *!*                  <xsl:with-param name="thisReportRangeFrom" select="$thisReportRangeFrom"/>
  54557. *!*                </xsl:apply-templates>
  54558. *!*                <xsl:if test="$separateSummaryPage">
  54559. *!*                  <xsl:apply-templates select="./Data/*[name()=$summaryNodeName]" mode="titlesummarypage">
  54560. *!*                    <xsl:with-param name="thisReport" select="$thisReport"/>
  54561. *!*                    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54562. *!*                  </xsl:apply-templates>
  54563. *!*                </xsl:if>
  54564. *!*              </xsl:when>
  54565. *!*              <xsl:otherwise>
  54566. *!*                <!-- unpaginated-->
  54567. *!*                <xsl:variable name="thisPageHeaderHeight" select="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header'][1]/height  div $FRUs"/>
  54568. *!*                <xsl:variable name="thisReportPageHeight" select="number($thisPageHeight - ( $thisPageHeaderHeight +  (/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Footer'][1]/height div $FRUs)) )"/>
  54569. *!*                <xsl:if test="./Data/Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  54570. *!*                  <!-- show the contents of the first page header -->
  54571. *!*                  <xsl:apply-templates mode="formattingBand" select="./Data/Pages/*[@idref = /Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/frxrecno][1]">
  54572. *!*                    <xsl:with-param name="thisReport" select="$thisReport"/>
  54573. *!*                    <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54574. *!*                    <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  54575. *!*                    <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  54576. *!*                  </xsl:apply-templates>
  54577. *!*                </xsl:if>
  54578. *!*                
  54579. *!*                <!-- the @id criteria below leaves out the Pages and Columns collections, if any -->
  54580. *!*                <!-- 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 -->
  54581. *!*                <xsl:apply-templates select="./Data/*[@idref and ($unpagedModeIncludesTitle=1 or not(name() = $titleNodeName))]" mode="unpagedBand">
  54582. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  54583. *!*                  <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54584. *!*                  <xsl:with-param name="thisPageHeight" select="$thisPageHeight"/>
  54585. *!*                  <xsl:with-param name="thisReportPageHeight" select="$thisReportPageHeight"/>
  54586. *!*                  <xsl:with-param name="thisPageHeaderHeight" select="$thisPageHeaderHeight"/>
  54587. *!*                </xsl:apply-templates>
  54588. *!*              </xsl:otherwise>
  54589. *!*            </xsl:choose>
  54590. *!*          </div>
  54591. *!*        </xsl:for-each>
  54592. *!*      </xsl:template>
  54593. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="titlesummarypage">
  54594. *!*        <xsl:param name="thisReport" select="1"/>
  54595. *!*        <xsl:param name="thisReportID"/>
  54596. *!*        <xsl:param name="thisReportRangeFrom" select="1"/>
  54597. *!*        <xsl:variable name="thisBand" select="@id"/>
  54598. *!*        <div>
  54599. *!*          <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * (number( ./@idref) -$thisReportRangeFrom)"/>in; position:absolute; </xsl:attribute>
  54600. *!*          <xsl:apply-templates select="." mode="band">
  54601. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  54602. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54603. *!*          </xsl:apply-templates>
  54604. *!*          <xsl:if test="/Reports/VFP-Report[$thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[frxrecno=$thisBand and ejectafter='true']">
  54605. *!*            <!-- page footer for this summary page -->
  54606. *!*            <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$pageFooterNodeName][position()=last()]" mode="band">
  54607. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  54608. *!*              <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54609. *!*            </xsl:apply-templates>
  54610. *!*          </xsl:if>
  54611. *!*        </div>
  54612. *!*      </xsl:template>
  54613. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="page">
  54614. *!*        <xsl:param name="thisReport" select="1"/>
  54615. *!*        <xsl:param name="thisReportID"/>
  54616. *!*        <xsl:param name="thisReportRangeFrom" select="1"/>
  54617. *!*        <xsl:variable name="thisPage" select="@id"/>
  54618. *!*        <div>
  54619. *!*          <xsl:attribute name="style"> width:100%;top:<xsl:value-of select="$thisPageHeight * ($thisPage -$thisReportRangeFrom)"/>in;position:absolute; </xsl:attribute>
  54620. *!*          <xsl:apply-templates select="." mode="band">
  54621. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  54622. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54623. *!*          </xsl:apply-templates>
  54624. *!*          <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']">
  54625. *!*            <xsl:apply-templates select="/Reports/VFP-Report[$thisReport]/Data/*[name()=$titleNodeName]" mode="band">
  54626. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  54627. *!*              <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54628. *!*            </xsl:apply-templates>
  54629. *!*          </xsl:if>
  54630. *!*          <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">
  54631. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  54632. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54633. *!*          </xsl:apply-templates>
  54634. *!*        </div>
  54635. *!*      </xsl:template>
  54636. *!*      <xsl:template match="/Reports/VFP-Report/Data/Pages/*" mode="formattingBand">
  54637. *!*        <xsl:param name="thisReport" select="1"/>
  54638. *!*        <xsl:param name="thisReportID"/>
  54639. *!*        <xsl:param name="thisPageHeight"/>
  54640. *!*        <xsl:param name="thisReportPageHeight"/>
  54641. *!*        <xsl:variable name="thisPage" select="@id"/>
  54642. *!*        <xsl:variable name="thisPageRenderOffset" select="(($thisPage - 1) * $thisReportPageHeight)  + sum((/Reports/VFP-Report[position() < $thisReport]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[bandlabel='Page Header']/height) ) "/>
  54643. *!*        <xsl:for-each select="./*">
  54644. *!*          <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  54645. *!*          <xsl:call-template name="Render">
  54646. *!*            <xsl:with-param name="thisID" select="$thisID"/>
  54647. *!*            <xsl:with-param name="thisZ" select="position()"/>
  54648. *!*            <xsl:with-param name="thisPage" select="../@idref"/>
  54649. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  54650. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54651. *!*            <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  54652. *!*          </xsl:call-template>
  54653. *!*        </xsl:for-each>
  54654. *!*      </xsl:template>
  54655. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="unpagedBand">
  54656. *!*          <xsl:param name="thisReport" select="1"/>
  54657. *!*        <xsl:param name="thisReportID"/>
  54658. *!*        <xsl:param name="thisPageHeight"/>
  54659. *!*        <xsl:param name="thisReportPageHeight"/>
  54660. *!*        <xsl:param name="thisPageHeaderHeight"/>
  54661. *!*        <xsl:variable name="thisPage" select="@idref"/>
  54662. *!*        <xsl:variable name="thisPageRenderOffset">
  54663. *!*          <xsl:choose>
  54664. *!*            <xsl:when test="../Pages/*[name() = $pageHeaderNodeName]"> <!-- $unpagedModeIncludesOnePageHeader=1" -->
  54665. *!*              <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 "/>
  54666. *!*            </xsl:when>
  54667. *!*            <xsl:otherwise>
  54668. *!*              <xsl:value-of select="(($thisPage - 1) * $thisReportPageHeight) -($thisPageHeaderHeight*$thisPage)  "/>
  54669. *!*            </xsl:otherwise>
  54670. *!*          </xsl:choose>
  54671. *!*        </xsl:variable>
  54672. *!*        <xsl:call-template name="addAnchor"/>
  54673. *!*        <xsl:for-each select="./*">
  54674. *!*          <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  54675. *!*          <xsl:call-template name="Render">
  54676. *!*            <xsl:with-param name="thisID" select="$thisID"/>
  54677. *!*            <xsl:with-param name="thisZ" select="position()"/>
  54678. *!*            <xsl:with-param name="thisPage" select="../@idref"/>
  54679. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  54680. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54681. *!*            <xsl:with-param name="topOffset" select="number($thisPageRenderOffset) * $printDPI"/>
  54682. *!*          </xsl:call-template>
  54683. *!*        </xsl:for-each>
  54684. *!*      </xsl:template>
  54685. *!*      <xsl:template match="/Reports/VFP-Report/Data/*" mode="band">
  54686. *!*        <xsl:param name="thisReport" select="1"/>
  54687. *!*        <xsl:param name="thisReportID"/>
  54688. *!*        <xsl:call-template name="addAnchor"/>
  54689. *!*        <xsl:for-each select="./*">
  54690. *!*          <xsl:variable name="thisID" select="translate(@id,'+','')"/>
  54691. *!*          <!--        <xsl:if test="key('Layout',concat($thisID, $thisReportID))/vpos > key('Layout',preceding-sibling::*/concat(@id,$thisReportID))/vpos"><div style="position=absolute;"/></xsl:if>  -->
  54692. *!*          <xsl:call-template name="Render">
  54693. *!*            <xsl:with-param name="thisID" select="$thisID"/>
  54694. *!*            <xsl:with-param name="thisZ" select="position()"/>
  54695. *!*            <xsl:with-param name="thisPage" select="../@idref"/>
  54696. *!*            <xsl:with-param name="thisReport" select="$thisReport"/>
  54697. *!*            <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54698. *!*          </xsl:call-template>
  54699. *!*        </xsl:for-each>
  54700. *!*      </xsl:template>
  54701. *!*      <xsl:template name="Render">
  54702. *!*        <xsl:param name="thisID"/>
  54703. *!*        <xsl:param name="thisZ"/>
  54704. *!*        <xsl:param name="thisPage"/>
  54705. *!*        <xsl:param name="thisReport" select="1"/>
  54706. *!*        <xsl:param name="thisReportID" select="1"/>
  54707. *!*        <xsl:param name="topOffset" select="0"/>
  54708. *!*        <xsl:call-template name="addAnchor"/>
  54709. *!*        <xsl:choose>
  54710. *!*          <xsl:when test="name()=$lineNodeName and key('Layout',concat($thisID, $thisReportID))/height <  key('Layout',concat($thisID, $thisReportID))/width">
  54711. *!*            <hr>
  54712. *!*              <xsl:call-template name="addClassAttribute">
  54713. *!*            <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  54714. *!*            </xsl:call-template>
  54715. *!*            <xsl:call-template name="addTitleAttribute"/>
  54716. *!*              <xsl:call-template name="addStyleAttribute">
  54717. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  54718. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  54719. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54720. *!*               <xsl:with-param name="thisID" select="$thisID"/>
  54721. *!*               <xsl:with-param name="styleType" select="'HR'"/>
  54722. *!*              </xsl:call-template>
  54723. *!*            </hr>
  54724. *!*          </xsl:when>
  54725. *!*          <xsl:when test="name()=$lineNodeName">
  54726. *!*            <!-- vertical line -->
  54727. *!*            <span>
  54728. *!*              <xsl:call-template name="addClassAttribute">
  54729. *!*                <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  54730. *!*            </xsl:call-template>
  54731. *!*              <xsl:call-template name="addTitleAttribute"/>
  54732. *!*              <xsl:call-template name="addStyleAttribute">
  54733. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  54734. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  54735. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54736. *!*               <xsl:with-param name="thisID" select="$thisID"/>
  54737. *!*                  <xsl:with-param name="styleType" select="'VR'"/>
  54738. *!*              </xsl:call-template>
  54739. *!*            </span>
  54740. *!*          </xsl:when>
  54741. *!*          <xsl:when test="$useTextAreaForStretchingText=1 and string-length(@hlink) = 0  and name()=$fieldNodeName and key('Layout',concat($thisID, $thisReportID))[stretch='true']">
  54742. *!*            <textarea readonly="readonly" rows="0" cols="0">
  54743. *!*              <xsl:call-template name="addClassAttribute">
  54744. *!*                 <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  54745. *!*            </xsl:call-template>
  54746. *!*              <xsl:call-template name="addTitleAttribute"/>
  54747. *!*              <xsl:call-template name="addStyleAttribute">
  54748. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  54749. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  54750. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54751. *!*              <xsl:with-param name="thisID" select="$thisID"/>
  54752. *!*              <xsl:with-param name="styleType" select="'TextArea'"/>
  54753. *!*              </xsl:call-template>
  54754. *!*              <xsl:value-of select="."/>
  54755. *!*            </textarea>
  54756. *!*          </xsl:when>
  54757. *!*          <xsl:otherwise>
  54758. *!*            <div>
  54759. *!*               <xsl:choose>
  54760. *!*                 <xsl:when test="@c=1">
  54761. *!*                    <xsl:call-template name="addClassAttribute">
  54762. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'T')"/> 
  54763. *!*                    </xsl:call-template>
  54764. *!*                 </xsl:when>
  54765. *!*                 <xsl:when test="@c=2">
  54766. *!*                    <xsl:call-template name="addClassAttribute">
  54767. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'M')"/> 
  54768. *!*                    </xsl:call-template>
  54769. *!*                 </xsl:when>
  54770. *!*                 <xsl:when test="@c=3">
  54771. *!*                    <xsl:call-template name="addClassAttribute">
  54772. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID,'B')"/> 
  54773. *!*                    </xsl:call-template>
  54774. *!*                 </xsl:when>
  54775. *!*                 <xsl:otherwise>
  54776. *!*                    <xsl:call-template name="addClassAttribute">
  54777. *!*                       <xsl:with-param name="default" select="concat('FRX',$thisReport,'_',$thisID)"/> 
  54778. *!*                    </xsl:call-template>
  54779. *!*                 </xsl:otherwise>
  54780. *!*               </xsl:choose>
  54781. *!*              <xsl:call-template name="addTitleAttribute"/>
  54782. *!*              <xsl:call-template name="addStyleAttribute">
  54783. *!*                <xsl:with-param name="topOffset" select="$topOffset"/>
  54784. *!*                <xsl:with-param name="thisZ" select="$thisZ"/>
  54785. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54786. *!*              <xsl:with-param name="thisID" select="$thisID"/>
  54787. *!*              <xsl:with-param name="styleType" select="'Div'"/>
  54788. *!*              </xsl:call-template>
  54789. *!*              <xsl:choose>
  54790. *!*                <xsl:when test="name()=$shapeNodeName or name()=$lineNodeName">
  54791. *!*                  <!-- nothing -->
  54792. *!*                </xsl:when>
  54793. *!*                <xsl:when test="name()=$pictureNodeName and string-length(@hlink) > 0">
  54794. *!*                  <a href="{@hlink}">
  54795. *!*                    <xsl:call-template name="renderPicture">
  54796. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54797. *!*                <xsl:with-param name="thisID" select="$thisID"/>
  54798. *!*                    </xsl:call-template>
  54799. *!*                  </a>
  54800. *!*                </xsl:when>
  54801. *!*                <xsl:when test="name()=$pictureNodeName and string-length(@PLINK) > 0">
  54802. *!*                  <a href="{translate(@PLINK,'\','/')}"  target="blank">
  54803. *!*                    <xsl:call-template name="renderPicture">
  54804. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54805. *!*                <xsl:with-param name="thisID" select="$thisID"/>
  54806. *!*                    </xsl:call-template>
  54807. *!*                  </a>
  54808. *!*                </xsl:when>
  54809. *!*                <xsl:when test="name()=$pictureNodeName">
  54810. *!*                  <xsl:call-template name="renderPicture">
  54811. *!*                <xsl:with-param name="thisReportID" select="$thisReportID"/>
  54812. *!*                <xsl:with-param name="thisID" select="$thisID"/>
  54813. *!*                  </xsl:call-template>
  54814. *!*                </xsl:when>
  54815. *!*                <xsl:when test="string-length(@hlink) > 0">
  54816. *!*                  <a href="{@hlink}">
  54817. *!*                    <xsl:call-template name="replaceText"/>
  54818. *!*                  </a>
  54819. *!*                </xsl:when>
  54820. *!*                <xsl:when test="string-length(@PLINK) > 0">
  54821. *!*                  <a href="{translate(@PLINK,'\','/')}" target="blank">
  54822. *!*                    <xsl:call-template name="replaceText"/>
  54823. *!*                  </a>
  54824. *!*                </xsl:when>
  54825. *!*                <xsl:otherwise>
  54826. *!*                  <xsl:call-template name="replaceText"/>
  54827. *!*                </xsl:otherwise>
  54828. *!*              </xsl:choose>
  54829. *!*            </div>
  54830. *!*          </xsl:otherwise>
  54831. *!*        </xsl:choose>
  54832. *!*        <!-- /xsl:if -->
  54833. *!*      </xsl:template>
  54834. *!*      <xsl:template name="getCSSName">
  54835. *!*      <xsl:param name="thisReport" select="1"/>
  54836. *!*      <xsl:param name="thisItem" select="0"/>
  54837. *!*      <xsl:param name="itemType" select="''"/>
  54838. *!*      <xsl:param name="firstPass" select="1"/>
  54839. *!*      <xsl:variable name="subst" select="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$thisItem]/@css"/>
  54840. *!*        <xsl:choose>
  54841. *!*         <xsl:when test="number($firstPass)=1 or string-length($subst) = 0"><xsl:value-of select="concat('.FRX',$thisReport,'_',$thisItem,$itemType)"/></xsl:when>
  54842. *!*         <xsl:otherwise>.<xsl:value-of select="$subst"/></xsl:otherwise>
  54843. *!*         </xsl:choose>
  54844. *!*      </xsl:template>
  54845. *!*      <xsl:template match="VFPFRXLayoutObject" mode="imagestyles">
  54846. *!*        <xsl:param name="thisReport" select="1"/>
  54847. *!*        <xsl:param name="firstPass" select="1"/>
  54848. *!*         <xsl:call-template name="getCSSName">
  54849. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54850. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54851. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  54852. *!*         </xsl:call-template>{
  54853. *!*      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;
  54854. *!*      }
  54855. *!*      <!-- <xsl:if test="offset=0">
  54856. *!*    left: <xsl:value-of select="hpos div $FRUs"/>in; 
  54857. *!*    </xsl:if>
  54858. *!*    <xsl:if test="offset=2">
  54859. *!*    left: <xsl:value-of select="hpos div $FRUs"/>in; 
  54860. *!*    </xsl:if> -->
  54861. *!*     </xsl:template>
  54862. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestyles">
  54863. *!*        <xsl:param name="thisReport" select="1"/>
  54864. *!*       <xsl:param name="firstPass" select="1"/>
  54865. *!*         <xsl:call-template name="getCSSName">
  54866. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54867. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54868. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  54869. *!*         </xsl:call-template>{
  54870. *!*       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;
  54871. *!*          }
  54872. *!*          <!--    <xsl:if test="stretch='true'">
  54873. *!*    overflow: auto;
  54874. *!*       </xsl:if> -->
  54875. *!*      </xsl:template>
  54876. *!*      </xsl:template>
  54877. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestylesT">
  54878. *!*        <xsl:param name="thisReport" select="1"/>
  54879. *!*       <xsl:param name="firstPass" select="1"/>
  54880. *!*         <xsl:call-template name="getCSSName">
  54881. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54882. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54883. *!*         <xsl:with-param name="itemType" select="'T'"/>
  54884. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  54885. *!*         </xsl:call-template>{
  54886. *!*       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;
  54887. *!*          }
  54888. *!*          <!--    <xsl:if test="stretch='true'">
  54889. *!*    overflow: auto;
  54890. *!*       </xsl:if> -->
  54891. *!*      </xsl:template>
  54892. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestylesM">
  54893. *!*        <xsl:param name="thisReport" select="1"/>
  54894. *!*       <xsl:param name="firstPass" select="1"/>
  54895. *!*         <xsl:call-template name="getCSSName">
  54896. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54897. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54898. *!*         <xsl:with-param name="itemType" select="'M'"/>
  54899. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  54900. *!*         </xsl:call-template>{
  54901. *!*       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;
  54902. *!*          }
  54903. *!*          <!--    <xsl:if test="stretch='true'">
  54904. *!*    overflow: auto;
  54905. *!*       </xsl:if> -->
  54906. *!*      </xsl:template>
  54907. *!*      <xsl:template match="VFPFRXLayoutObject" mode="shapestylesB">
  54908. *!*        <xsl:param name="thisReport" select="1"/>
  54909. *!*       <xsl:param name="firstPass" select="1"/>
  54910. *!*         <xsl:call-template name="getCSSName">
  54911. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54912. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54913. *!*         <xsl:with-param name="itemType" select="'B'"/>
  54914. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  54915. *!*         </xsl:call-template>{
  54916. *!*       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;
  54917. *!*          }
  54918. *!*          <!--    <xsl:if test="stretch='true'">
  54919. *!*    overflow: auto;
  54920. *!*       </xsl:if> -->
  54921. *!*      </xsl:template>
  54922. *!*      <xsl:template match="VFPFRXLayoutObject" mode="textstyles">
  54923. *!*        <xsl:param name="thisReport" select="1"/>
  54924. *!*        <xsl:param name="firstPass" select="1"/>
  54925. *!*         <xsl:call-template name="getCSSName">
  54926. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54927. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54928. *!*         <xsl:with-param name="firstPass" select="$firstPass"/>
  54929. *!*         </xsl:call-template>{
  54930. *!*      <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>
  54931. *!*          <xsl:when test="mode mod 2 = 1">background-color:transparent;</xsl:when>
  54932. *!*          <xsl:otherwise>background-color: <xsl:call-template name="fillcolor"/>;</xsl:otherwise>
  54933. *!*        </xsl:choose><xsl:choose>
  54934. *!*          <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1 and $hideScrollbarsForTextAreas=1"> overflow:hidden;margin-top:4px;</xsl:when>
  54935. *!*          <xsl:when test="stretch='true' and objtype=8 and $useTextAreaForStretchingText=1"> overflow: auto;margin-top:4px;</xsl:when>
  54936. *!*          <xsl:otherwise>overflow:hidden;</xsl:otherwise>
  54937. *!*        </xsl:choose> position: absolute;
  54938. *!*       }   
  54939. *!*        <!-- tbd, make vertical-align more dynamic -->  
  54940. *!*      </xsl:template>
  54941. *!*      <xsl:template match="VFPFRXLayoutObject" mode="linestyles">
  54942. *!*        <xsl:param name="thisReport" select="1"/>
  54943. *!*       <xsl:param name="firstPass" select="1"/>
  54944. *!*         <xsl:call-template name="getCSSName">
  54945. *!*         <xsl:with-param name="thisReport" select="$thisReport"/>
  54946. *!*         <xsl:with-param name="thisItem" select="frxrecno"/>
  54947. *!*          <xsl:with-param name="firstPass" select="$firstPass"/>
  54948. *!*         </xsl:call-template>{
  54949. *!*       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;
  54950. *!*          <xsl:choose>
  54951. *!*          <xsl:when test="height < width"> width: <xsl:value-of select="width div $FRUs"/>in;
  54952. *!*      height: <xsl:value-of select="floor(height div $FRUsInPixelsat96DPI)"/>px; margin: 0px;</xsl:when>
  54953. *!*          <xsl:otherwise>  height: <xsl:value-of select="height div $FRUs"/>in;
  54954. *!*      width: <xsl:value-of select="floor(width div $FRUsInPixelsat96DPI)"/>px;  </xsl:otherwise>
  54955. *!*        </xsl:choose>
  54956. *!*       }
  54957. *!*      </xsl:template>
  54958. *!*      <xsl:template name="pattern">
  54959. *!*        <xsl:choose>
  54960. *!*          <xsl:when test="penpat=0"> none </xsl:when>
  54961. *!*          <xsl:when test="penpat=1"> dotted </xsl:when>
  54962. *!*          <xsl:when test="penpat=2"> dashed </xsl:when>
  54963. *!*          <xsl:otherwise> solid </xsl:otherwise>
  54964. *!*        </xsl:choose>
  54965. *!*      </xsl:template>
  54966. *!*      <xsl:template name="pencolor">#<xsl:call-template name="getHexColorValue">
  54967. *!*          <xsl:with-param name="theNumber" select="penred"/>
  54968. *!*        </xsl:call-template>
  54969. *!*        <xsl:call-template name="getHexColorValue">
  54970. *!*          <xsl:with-param name="theNumber" select="pengreen"/>
  54971. *!*        </xsl:call-template>
  54972. *!*        <xsl:call-template name="getHexColorValue">
  54973. *!*          <xsl:with-param name="theNumber" select="penblue"/>
  54974. *!*        </xsl:call-template>
  54975. *!*      </xsl:template>
  54976. *!*      <xsl:template name="fillcolor">#<xsl:call-template name="getHexColorValue">
  54977. *!*          <xsl:with-param name="theNumber" select="fillred"/>
  54978. *!*          <xsl:with-param name="fill" select="1"/>
  54979. *!*        </xsl:call-template>
  54980. *!*        <xsl:call-template name="getHexColorValue">
  54981. *!*          <xsl:with-param name="theNumber" select="fillgreen"/>
  54982. *!*          <xsl:with-param name="fill" select="1"/>
  54983. *!*        </xsl:call-template>
  54984. *!*        <xsl:call-template name="getHexColorValue">
  54985. *!*          <xsl:with-param name="theNumber" select="fillblue"/>
  54986. *!*          <xsl:with-param name="fill" select="1"/>
  54987. *!*        </xsl:call-template>
  54988. *!*      </xsl:template>
  54989. *!*      <xsl:template name="getFontAttributes">
  54990. *!*        <xsl:param name="theStyles" select="0"/>
  54991. *!*        <xsl:choose>
  54992. *!*          <xsl:when test="fontbold='true'">font-weight: bold;</xsl:when>
  54993. *!*          <xsl:otherwise>font-weight: normal;</xsl:otherwise>
  54994. *!*        </xsl:choose>
  54995. *!*        <xsl:if test="fontstrikethrough='true' or fontunderline='true'">text-decoration: <xsl:if test="fontstrikethrough='true'">line-through </xsl:if>
  54996. *!*          <xsl:if test="fontunderline='true'">underline</xsl:if>;</xsl:if>
  54997. *!*        <xsl:if test="fontitalic='true'">font-style: italic;</xsl:if>
  54998. *!*      </xsl:template>
  54999. *!*      <xsl:template name="getHexColorValue">
  55000. *!*        <xsl:param name="theNumber" select="-1"/>
  55001. *!*        <xsl:param name="fill" select="0"/>
  55002. *!*        <xsl:variable name="useNumber">
  55003. *!*          <xsl:choose>
  55004. *!*            <xsl:when test="$fill=1 and fillpat > 1 and ((fillred+fillblue+fillgreen) < $fillPatternShade)">
  55005. *!*              <xsl:choose>
  55006. *!*                <xsl:when test="($fillPatternOffset + $theNumber) > 254">255</xsl:when>
  55007. *!*                <xsl:otherwise>
  55008. *!*                  <xsl:value-of select="$fillPatternOffset + $theNumber"/>
  55009. *!*                </xsl:otherwise>
  55010. *!*              </xsl:choose>
  55011. *!*            </xsl:when>
  55012. *!*            <xsl:otherwise>
  55013. *!*              <xsl:value-of select="$theNumber"/>
  55014. *!*            </xsl:otherwise>
  55015. *!*          </xsl:choose>
  55016. *!*        </xsl:variable>
  55017. *!*        <xsl:choose>
  55018. *!*          <xsl:when test="$useNumber=-1 and $fill=1">FF</xsl:when>
  55019. *!*          <xsl:when test="$useNumber=-1">00</xsl:when>
  55020. *!*          <xsl:otherwise>
  55021. *!*            <xsl:call-template name="getHexForNumber">
  55022. *!*              <xsl:with-param name="theNumber" select="floor($useNumber div 16)"/>
  55023. *!*            </xsl:call-template>
  55024. *!*            <xsl:call-template name="getHexForNumber">
  55025. *!*              <xsl:with-param name="theNumber" select="round($useNumber mod 16)"/>
  55026. *!*            </xsl:call-template>
  55027. *!*          </xsl:otherwise>
  55028. *!*        </xsl:choose>
  55029. *!*      </xsl:template>
  55030. *!*      <xsl:template name="setPrecision">
  55031. *!*        <xsl:param name="theNumber" select="-1"/>
  55032. *!*        <xsl:choose>
  55033. *!*          <xsl:when test="$numberPrecision = -1 or not(contains(string($theNumber),'.'))">
  55034. *!*            <xsl:value-of select="$theNumber"/>
  55035. *!*          </xsl:when>
  55036. *!*          <xsl:when test="$numberPrecision > 0">
  55037. *!*            <!--        <xsl:value-of select="concat(string(floor($theNumber)),'.',substring(substring-after(string($theNumber),'.'),1,$numberPrecision))"/>  -->
  55038. *!*            <xsl:value-of select="format-number($theNumber,concat('##0.',$zeros))"/>
  55039. *!*          </xsl:when>
  55040. *!*          <xsl:when test="$numberPrecision=0">
  55041. *!*            <xsl:value-of select="round($theNumber)"/>
  55042. *!*          </xsl:when>
  55043. *!*          <xsl:otherwise>
  55044. *!*            <!-- shouldn't happen-->
  55045. *!*            <xsl:value-of select="$theNumber"/>
  55046. *!*          </xsl:otherwise>
  55047. *!*        </xsl:choose>
  55048. *!*      </xsl:template>
  55049. *!*      <xsl:template name="getHexForNumber">
  55050. *!*        <xsl:param name="theNumber" select="-1"/>
  55051. *!*        <xsl:choose>
  55052. *!*          <xsl:when test="$theNumber=-1">00</xsl:when>
  55053. *!*          <xsl:when test="$theNumber < 10">
  55054. *!*            <xsl:value-of select="$theNumber"/>
  55055. *!*          </xsl:when>
  55056. *!*          <xsl:when test="$theNumber = 10">A</xsl:when>
  55057. *!*          <xsl:when test="$theNumber = 11">B</xsl:when>
  55058. *!*          <xsl:when test="$theNumber = 12">C</xsl:when>
  55059. *!*          <xsl:when test="$theNumber = 13">D</xsl:when>
  55060. *!*          <xsl:when test="$theNumber = 14">E</xsl:when>
  55061. *!*          <xsl:when test="$theNumber = 15">F</xsl:when>
  55062. *!*        </xsl:choose>
  55063. *!*      </xsl:template>
  55064. *!*      <xsl:template name="getTextAlignment">text-align:<xsl:choose>
  55065. *!*          <xsl:when test="objtype=5"><!-- picture field empty for left (default), @I for centered and @J right -->
  55066. *!*            <xsl:choose>
  55067. *!*              <xsl:when test="string-length(picture) = 0">left;</xsl:when>
  55068. *!*              <xsl:when test="contains(picture,'@J')">right;</xsl:when>
  55069. *!*              <xsl:otherwise>center;</xsl:otherwise>
  55070. *!*            </xsl:choose>
  55071. *!*          </xsl:when>
  55072. *!*          <xsl:otherwise>
  55073. *!*            <xsl:choose>
  55074. *!*              <xsl:when test="offset=0">left;</xsl:when>
  55075. *!*              <xsl:when test="offset=1">right;</xsl:when>
  55076. *!*              <xsl:otherwise>center;</xsl:otherwise>
  55077. *!*            </xsl:choose>
  55078. *!*          </xsl:otherwise>
  55079. *!*        </xsl:choose>
  55080. *!*        <!-- don't include direction at all if you want context -->
  55081. *!*        <xsl:if test="mode < 4">direction:<xsl:choose>
  55082. *!*            <xsl:when test="mode > 1">rtl;</xsl:when>
  55083. *!*            <xsl:otherwise>ltr;</xsl:otherwise>
  55084. *!*          </xsl:choose>
  55085. *!*        </xsl:if>
  55086. *!*      </xsl:template>
  55087. *!*      <xsl:template name="ExternalStyleSheets">
  55088. *!*        <xsl:param name="thisReportNode" select="/Reports/VFP-Report[1]"/>
  55089. *!*        <xsl:param name="thisReportID" select="'this report'"/>
  55090. *!*       <xsl:if test="count($thisReportNode/Run/property[@id='css_sheet']) > 0">
  55091. *!*       <xsl:comment>
  55092. *!*       External stylesheet(s) for <xsl:value-of select="$thisReportID"/>
  55093. *!*       </xsl:comment>
  55094. *!*       <xsl:for-each select="$thisReportNode/Run/property[@id='css_sheet']">
  55095. *!*          <link type="text/css" href="{./text()}" rel="stylesheet"/>
  55096. *!*       </xsl:for-each>
  55097. *!*       </xsl:if>   
  55098. *!*      </xsl:template>
  55099. *!*      <xsl:template name="DocumentStyles">
  55100. *!*      <xsl:comment>Global document styles, if any</xsl:comment>
  55101. *!*        <style type="text/css">
  55102. *!*         <xsl:comment><xsl:if test="/Reports/VFP-Report[1]/VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=1 and (fontcharset=177 or fontcharset=178)]">
  55103. *!*         <xsl:if test="number($noBody)!=1">html{direction:rtl;} 
  55104. *!*         body{direction:rtl;}</xsl:if>
  55105. *!*         div{direction:rtl;} 
  55106. *!*         span{direction:rtl;}
  55107. *!*         </xsl:if>
  55108. *!*         </xsl:comment>
  55109. *!*        </style>
  55110. *!*      
  55111. *!*      </xsl:template>
  55112. *!*      <xsl:template name="Styles">
  55113. *!*        <xsl:param name="thisReport" select="1"/>
  55114. *!*        <xsl:param name="thisReportID"/>
  55115. *!*        <xsl:comment>
  55116. *!*        Styles for report # <xsl:value-of select="$thisReport"/>  in this run, 
  55117. *!*        <xsl:value-of select="$thisReportID"/>
  55118. *!*        </xsl:comment>
  55119. *!*        
  55120. *!*        <style type="text/css">
  55121. *!*        
  55122. *!*          <xsl:comment>
  55123. *!*        
  55124. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]" mode="linestyles">
  55125. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55126. *!*            </xsl:apply-templates>
  55127. *!*          
  55128. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=6]">
  55129. *!*            <xsl:variable name="frxrecno" select="frxrecno"/>
  55130. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  55131. *!*                  <xsl:apply-templates select="." mode="linestyles">
  55132. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  55133. *!*                     <xsl:with-param name="firstPass" select="0"/>
  55134. *!*                  </xsl:apply-templates>
  55135. *!*            </xsl:if>
  55136. *!*          </xsl:for-each>
  55137. *!*            
  55138. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestyles">
  55139. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55140. *!*            </xsl:apply-templates>
  55141. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesT">
  55142. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55143. *!*            </xsl:apply-templates>
  55144. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesM">
  55145. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55146. *!*            </xsl:apply-templates>
  55147. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]" mode="shapestylesB">
  55148. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55149. *!*            </xsl:apply-templates>
  55150. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=7]">
  55151. *!*             <xsl:variable name="frxrecno" select="frxrecno"/>
  55152. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  55153. *!*                  <xsl:apply-templates select="." mode="shapestyles">
  55154. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  55155. *!*                     <xsl:with-param name="firstPass" select="0"/>
  55156. *!*                  </xsl:apply-templates>
  55157. *!*            </xsl:if>
  55158. *!*          </xsl:for-each>
  55159. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]" mode="textstyles">
  55160. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55161. *!*            </xsl:apply-templates>
  55162. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[contains('|5|8|',concat('|',./objtype,'|'))]">
  55163. *!*            <xsl:variable name="frxrecno" select="frxrecno"/>
  55164. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  55165. *!*                  <xsl:apply-templates select="." mode="textstyles">
  55166. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  55167. *!*                     <xsl:with-param name="firstPass" select="0"/>
  55168. *!*                  </xsl:apply-templates>
  55169. *!*            </xsl:if>
  55170. *!*          </xsl:for-each>
  55171. *!*            
  55172. *!*            <xsl:apply-templates select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]" mode="imagestyles">
  55173. *!*              <xsl:with-param name="thisReport" select="$thisReport"/>
  55174. *!*            </xsl:apply-templates>
  55175. *!*          <xsl:for-each select="./VFP-RDL/VFPDataSet/VFPFRXLayoutObject[objtype=17]">
  55176. *!*            <xsl:variable name="frxrecno" select="frxrecno"/>
  55177. *!*            <xsl:if test="/Reports/VFP-Report[$thisReport]/Data/*/*[@id=$frxrecno]/@css">
  55178. *!*                  <xsl:apply-templates select="." mode="imagestyles">
  55179. *!*                  <xsl:with-param name="thisReport" select="$thisReport"/>
  55180. *!*                     <xsl:with-param name="firstPass" select="0"/>
  55181. *!*                  </xsl:apply-templates>
  55182. *!*            </xsl:if>
  55183. *!*          </xsl:for-each>
  55184. *!*        
  55185. *!*          </xsl:comment>
  55186. *!*        
  55187. *!*        </style>
  55188. *!*       <xsl:call-template name="ExternalStyleSheets">
  55189. *!*       <xsl:with-param name="thisReportNode" select="/Reports/VFP-Report[$thisReport]"/> 
  55190. *!*       <xsl:with-param name="thisReportID" select="$thisReportID"/>
  55191. *!*       </xsl:call-template>
  55192. *!*      </xsl:template>
  55193. *!*      <xsl:template name="replaceText">
  55194. *!*        <xsl:choose>
  55195. *!*          <xsl:when test="$useTextAreaForStretchingText=1">
  55196. *!*            <xsl:value-of select="."/>
  55197. *!*          </xsl:when>
  55198. *!*          <xsl:otherwise>
  55199. *!*            <xsl:call-template name="replaceWhiteSpace">
  55200. *!*              <xsl:with-param name="string" select="."/>
  55201. *!*            </xsl:call-template>
  55202. *!*          </xsl:otherwise>
  55203. *!*        </xsl:choose>
  55204. *!*      </xsl:template>
  55205. *!*      <xsl:template name="renderPicture">
  55206. *!*      <xsl:param name="thisReportID"/>
  55207. *!*      <xsl:param name="thisID"/>
  55208. *!*        <img>
  55209. *!*          <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>
  55210. *!*          <xsl:variable name="srcImage">
  55211. *!*       <xsl:choose>
  55212. *!*              <xsl:when test="@img and $externalFileLocation">
  55213. *!*                <xsl:value-of select="translate(concat($externalFileLocation,@img),'\','/')"/>
  55214. *!*              </xsl:when>
  55215. *!*              <xsl:when test="@img and not(contains(./@img,':'))">
  55216. *!*                   <xsl:value-of select="translate(@img,'\','/')"/>
  55217. *!*              </xsl:when>
  55218. *!*              <xsl:when test="@img">
  55219. *!*                <xsl:value-of select="concat('file://',translate(@img,'\','/'))"/>
  55220. *!*              </xsl:when>
  55221. *!*              <xsl:when test="$copyImageFiles = '1'">
  55222. *!*                <xsl:value-of select="translate(concat($externalFileLocation,key('Layout',concat($thisID, $thisReportID))/unpathedimg),'\','/')"/>
  55223. *!*              </xsl:when>
  55224. *!*              <xsl:when test="string-length(./text()) > 0 and not(contains(./text(),':')) ">
  55225. *!*                <xsl:value-of select="translate(./text(),'\','/')"/>
  55226. *!*              </xsl:when>
  55227. *!*              <xsl:when test="string-length(./text()) > 0">
  55228. *!*                <xsl:value-of select="concat('file://',translate(./text(),'\','/'))"/>
  55229. *!*              </xsl:when>
  55230. *!*              <xsl:otherwise>
  55231. *!*                <xsl:value-of select="concat('file://',translate(key('Layout',concat($thisID, $thisReportID))/pathedimg,'\','/'))"/>
  55232. *!*              </xsl:otherwise>
  55233. *!*            </xsl:choose>
  55234. *!*          </xsl:variable>
  55235. *!*          <xsl:attribute name="src"><xsl:value-of select="$srcImage"/></xsl:attribute>
  55236. *!*          <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 -->
  55237. *!*     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);
  55238. *!*     </xsl:when><xsl:when test="$imgGeneral/general='1'"><!-- scale and retain --><xsl:choose><xsl:when test="@h > @w">
  55239. *!*     width:100%;
  55240. *!*     </xsl:when><xsl:otherwise>
  55241. *!*     height:100%;
  55242. *!*     </xsl:otherwise></xsl:choose></xsl:when><xsl:otherwise><!-- stretch to fill frame -->
  55243. *!*     height: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@h div $printDPI"/></xsl:call-template>in;    
  55244. *!*    width: <xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="@w div $printDPI"/></xsl:call-template>in;    
  55245. *!*     </xsl:otherwise></xsl:choose></xsl:attribute>
  55246. *!*        </img>
  55247. *!*      </xsl:template>
  55248. *!*      <xsl:template name="addClassAttribute">
  55249. *!*      <xsl:param name="item" select="."/>
  55250. *!*      <xsl:param name="default" select="''"/>
  55251. *!*      <xsl:attribute name="class"><xsl:choose>
  55252. *!*      <xsl:when test="string-length($item/@CSS) > 0">
  55253. *!*      <xsl:value-of select="$item/@CSS"/>
  55254. *!*      </xsl:when>
  55255. *!*      <xsl:when test="string-length($item/@css) = 0">
  55256. *!*      <xsl:value-of select="$default"/>
  55257. *!*      </xsl:when>
  55258. *!*      <xsl:otherwise>
  55259. *!*      <xsl:value-of select="$item/@css"/>
  55260. *!*      </xsl:otherwise>
  55261. *!*      </xsl:choose></xsl:attribute>
  55262. *!*      </xsl:template>
  55263. *!*      <xsl:template name="addTitleAttribute">
  55264. *!*        <xsl:param name="item" select="."/>
  55265. *!*        <xsl:if test="string-length($item/@title) > 0">
  55266. *!*          <xsl:attribute name="title"><xsl:value-of select="$item/@title"/></xsl:attribute>
  55267. *!*        </xsl:if>
  55268. *!*      </xsl:template>
  55269. *!*      <xsl:template name="addAnchor">
  55270. *!*        <xsl:param name="item" select="."/>
  55271. *!*        <xsl:if test="string-length($item/@anchor) > 0">
  55272. *!*          <a>
  55273. *!*         <xsl:attribute name="{$anchorAttr}"><xsl:value-of select="$item/@anchor"/></xsl:attribute> 
  55274. *!*            <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
  55275. *!*          </a>
  55276. *!*        </xsl:if>
  55277. *!*      </xsl:template>
  55278. *!*      <xsl:template name="addStyleAttribute">
  55279. *!*        <xsl:param name="topOffset" select="0"/>
  55280. *!*        <xsl:param name="thisZ" select="1"/>
  55281. *!*        <xsl:param name="thisReportID"/>
  55282. *!*        <xsl:param name="thisID"/>
  55283. *!*        <xsl:param name="styleType" select="'Div'"/>
  55284. *!*    <!-- do NOT mess around with the white space in here, even though it 
  55285. *!*    looks ugly the way it is!! -->
  55286. *!*    <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;
  55287. *!*    top:<xsl:choose>
  55288. *!*      <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>
  55289. *!*      <xsl:otherwise><xsl:call-template name="setPrecision"><xsl:with-param name="theNumber" select="(@t +$topOffset) div $printDPI"/></xsl:call-template></xsl:otherwise>
  55290. *!*    </xsl:choose>in;<xsl:choose>
  55291. *!*      <xsl:when test="$styleType='VR'">width:0in;</xsl:when>
  55292. *!*      <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>
  55293. *!*    <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>
  55294. *!*    <xsl:if test="$useDynamicTextAttributes=1 and key('Layout',concat($thisID,$thisReportID))[objtype=5 or objtype=8]">
  55295. *!*    <xsl:call-template name="addDynamicTextStyleAttributes"/>
  55296. *!*    </xsl:if>
  55297. *!*    </xsl:attribute>
  55298. *!*        </xsl:template>
  55299. *!*        <xsl:template name="addDynamicTextStyleAttributes">
  55300. *!*      <!-- dynamic values for font, omit these attributes if they don't appear on each object-->
  55301. *!*      <xsl:if test="@FNAME">
  55302. *!*        font-family:'<xsl:value-of select="@FNAME"/>';font-size:<xsl:value-of select="@FSIZE"/>pt;
  55303. *!*        <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>
  55304. *!*        font-weight:<xsl:choose><xsl:when test="@FSTYLE mod 2 = 1">bold</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  55305. *!*        font-style:<xsl:choose><xsl:when test="(@FSTYLE div 2) mod 2 =1">italic</xsl:when><xsl:otherwise>normal</xsl:otherwise></xsl:choose>;
  55306. *!*       background-color:<xsl:call-template name="getAlphaColor">
  55307. *!*       <xsl:with-param name="alpha" select="@FA"/>
  55308. *!*       <xsl:with-param name="r" select="@FR"/>
  55309. *!*       <xsl:with-param name="g" select="@FG"/>
  55310. *!*       <xsl:with-param name="b" select="@FB"/>
  55311. *!*       </xsl:call-template>;color:<xsl:call-template name="getAlphaColor"/>;
  55312. *!*        </xsl:if>
  55313. *!*        </xsl:template>
  55314. *!*       <xsl:template name="getAlphaColor">
  55315. *!*       <xsl:param name="alpha" select="@PA"/>
  55316. *!*       <xsl:param name="r" select="@PR"/>
  55317. *!*       <xsl:param name="g" select="@PG"/>
  55318. *!*       <xsl:param name="b" select="@PB"/>
  55319. *!*       <xsl:choose>
  55320. *!*       <xsl:when test="$alpha=0">transparent</xsl:when>
  55321. *!*       <xsl:when test="$alpha=255 or ($r+$g+$b > $fieldAlphaOpacityShade)"><xsl:value-of select="concat('rgb(',$r,',',$g,',',$b,')')"/></xsl:when>
  55322. *!*       <xsl:otherwise><xsl:value-of select="concat('rgb(',$r+$fieldAlphaOpacityOffset,',',$g+$fieldAlphaOpacityOffset,',',$b+$fieldAlphaOpacityOffset,')')"/></xsl:otherwise>
  55323. *!*       </xsl:choose>
  55324. *!*       </xsl:template>
  55325. *!*      
  55326. *!*        <xsl:template name="replaceWhiteSpace">
  55327. *!*        <xsl:param name="string" select="."/>
  55328. *!*        <xsl:choose>
  55329. *!*          <xsl:when test="contains($string,' ')">
  55330. *!*            <xsl:call-template name="replaceWhiteSpace">
  55331. *!*              <xsl:with-param name="string" select="substring-before($string, ' ')"/>
  55332. *!*            </xsl:call-template>
  55333. *!*            <br/>
  55334. *!*            <xsl:call-template name="replaceWhiteSpace">
  55335. *!*              <xsl:with-param name="string" select="substring-after($string, ' ')"/>
  55336. *!*            </xsl:call-template>
  55337. *!*          </xsl:when>
  55338. *!*          <xsl:otherwise>
  55339. *!*            <xsl:value-of select="$string"/>
  55340. *!*          </xsl:otherwise>
  55341. *!*        </xsl:choose>
  55342. *!*      </xsl:template>
  55343. *!*      <xsl:template name="Script">
  55344. *!*        <script language="JavaScript">
  55345. *!*          <xsl:comment>
  55346. *!*         //TBD
  55347. *!*          </xsl:comment>
  55348. *!*        </script>
  55349. *!*      </xsl:template>
  55350. *!*      <xsl:template match="*|@*" mode="debug">
  55351. *!*       <xsl:copy-of select="."/>
  55352. *!*      </xsl:template> 
  55353. *!*    </xsl:stylesheet>
  55354. *!*    ENDTEXT
  55355. *!*    SET TEXTMERGE OFF
  55356. *!*    SET TEXTMERGE TO
  55357. *!*    RETURN m.lcResult
  55358. ENDPROC
  55359. PROCEDURE cssclassattr_assign
  55360. LPARAMETERS m.vNewVal
  55361. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  55362.    AND NOT (m.vNewVal == THIS.cssClassAttr)
  55363.    THIS.cssClassAttr = m.vNewVal
  55364.    THIS.SynchXSLTProcessorUser()
  55365. ENDIF   
  55366. ENDPROC
  55367. PROCEDURE anchorattr_assign
  55368. LPARAMETERS m.vNewVal
  55369. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  55370.    AND NOT (m.vNewVal == THIS.anchorAttr)
  55371.    THIS.anchorAttr = m.vNewVal
  55372.    THIS.SynchXSLTProcessorUser()
  55373. ENDIF   
  55374. ENDPROC
  55375. PROCEDURE titleattr_assign
  55376. LPARAMETERS m.vNewVal
  55377. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  55378.    AND NOT (m.vNewVal == THIS.titleAttr )
  55379.    THIS.titleAttr  = m.vNewVal
  55380.    THIS.SynchXSLTProcessorUser()
  55381. ENDIF   
  55382. ENDPROC
  55383. PROCEDURE linkattr_assign
  55384. LPARAMETERS m.vNewVal
  55385. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  55386.    AND NOT (m.vNewVal == THIS.linkAttr)
  55387.    THIS.linkAttr = m.vNewVal
  55388.    THIS.SynchXSLTProcessorUser()
  55389. ENDIF   
  55390. ENDPROC
  55391. PROCEDURE cssclassoverrideattr_assign
  55392. LPARAMETERS m.vNewVal
  55393. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal) ;
  55394.    AND NOT (m.vNewVal == THIS.cssClassOverrideAttr)
  55395.    THIS.cssClassOverrideAttr = m.vNewVal
  55396.    THIS.SynchXSLTProcessorUser()
  55397. ENDIF   
  55398. ENDPROC
  55399. PROCEDURE urlstringencode
  55400. LPARAMETER m.tcValue, m.tlEncodeURLControlChars, m.tlEncodeSpace
  55401. * Thanks to Rick Strahl and West Wind for help and advice!
  55402. IF VARTYPE(m.tcValue) # "C" 
  55403.    RETURN ""
  55404. ENDIF   
  55405. LOCAL m.lcResult, m.lcChar, m.ii, m.lcOKChars
  55406. m.lcResult=""
  55407. m.lcOKChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  55408. IF NOT m.tlEncodeURLControlChars
  55409.    * by default, we also exempt chars that might
  55410.    * indicate an anchor or a query string element
  55411.    m.lcOKChars = m.lcOKChars + ".?=&#"
  55412. ENDIF
  55413. FOR m.ii=1 TO LEN(m.tcValue)
  55414.    m.lcChar = SUBSTR(m.tcValue,m.ii,1)
  55415.    IF ATC(m.lcChar,m.lcOKChars) > 0
  55416.       m.lcResult=m.lcResult + m.lcChar
  55417.       LOOP
  55418.    ENDIF
  55419.    IF m.lcChar=" " AND NOT m.tlEncodeSpace
  55420.       m.lcResult = m.lcResult + "+"
  55421.       LOOP
  55422.    ENDIF
  55423.    m.lcResult = m.lcResult + "%" + RIGHT(TRANSFORM(ASC(m.lcChar),"@0"),2)
  55424. ENDFOR 
  55425. RETURN m.lcResult
  55426. ENDPROC
  55427. PROCEDURE pathencode
  55428. LPARAMETERS m.tcVal, m.tlXMLEncode
  55429. LOCAL m.lcVal, m.lcTempVal, m.laVals[1], m.liIndex, m.liSeparators
  55430. m.lcVal = ALLTRIM(CHRTRAN(m.tcVal,"\","/"))
  55431. * default XSLT would take care of the above anyway, but 
  55432. * no harm in doing it here
  55433. DO CASE
  55434. CASE LEN(m.lcVal) = 0
  55435.    * nothing
  55436. CASE AT("/",m.lcVal) > 0
  55437.    m.lcTempVal = ""
  55438.    m.liSeparators = ALINES(m.laVals,m.lcVal,0,"/")
  55439.    FOR m.liIndex = 1 TO m.liSeparators
  55440.       IF ":" $ m.laVals[m.liIndex]
  55441.          m.lcTempVal = m.lcTempVal + m.laVals[m.liIndex]
  55442.       ELSE   
  55443.          m.lcTempVal = m.lcTempVal + ;
  55444.                        THIS.urlStringEncode(m.laVals[m.liIndex])
  55445.       ENDIF                 
  55446.       IF m.liIndex < m.liSeparators
  55447.          m.lcTempVal = m.lcTempVal + "/"  
  55448.       ENDIF
  55449.    ENDFOR
  55450.    IF RIGHT(m.lcVal,1) = "/"
  55451.       m.lcTempVal = m.lcTempVal + "/"  
  55452.    ENDIF
  55453.    m.lcVal = m.lcTempVal
  55454. OTHERWISE
  55455.    m.lcVal = THIS.urlStringEncode(m.lcVal)
  55456. ENDCASE
  55457. #IF OUTPUTXML = OUTPUTXML_RAW
  55458.    IF m.tlXMLEncode
  55459.       * the result is going to an XML document
  55460.       m.lcVal = THIS.xmlRawConv(m.lcVal) 
  55461.    ENDIF   
  55462. #ENDIF   
  55463. RETURN m.lcVal
  55464. ENDPROC
  55465. PROCEDURE updateproperties
  55466. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  55467.     RETURN
  55468. ENDIF 
  55469. LOCAL loFP
  55470. loFP = _Screen.oFoxyPreviewer
  55471. IF VARTYPE(This.CommandClauses) = "O"
  55472.     *!*    IF This.CommandClauses.Preview
  55473.     *!*        This.lOpenViewer = .T.
  55474.     *!*    ELSE 
  55475.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  55476.     *!*    ENDIF
  55477.     This.lOpenViewer = This.CommandClauses.Preview
  55478.     IF NOT EMPTY(This.CommandClauses.ToFile)
  55479.         This.TargetFileName = This.CommandClauses.ToFile
  55480.     ELSE 
  55481.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  55482.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  55483.                 EMPTY(This.TargetFileName)
  55484.             LOCAL lcDestFile
  55485.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  55486.             IF NOT "\" $ lcDestFile
  55487.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  55488.             ENDIF
  55489.             This.TargetFileName = lcDestFile
  55490.         ELSE
  55491.             LOCAL lcFile
  55492.             lcFile = This.TargetFileName
  55493.             IF EMPTY(lcFile)
  55494.                 lcFile = PUTFILE("","","htm")
  55495.             ENDIF
  55496.             IF EMPTY(lcFile)
  55497.                 _ReportListener::CancelReport()
  55498.                 * This.CancelReport()
  55499.                 RETURN .F.
  55500.             ENDIF
  55501.             This.TargetFileName = lcFile
  55502.         ENDIF
  55503.     ENDIF 
  55504. ENDIF
  55505. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  55506. IF VARTYPE(This.CommandClauses) = "O"
  55507.     IF This.CommandClauses.Preview
  55508.         This.lOpenViewer = .T.
  55509.     ENDIF 
  55510.     IF NOT EMPTY(This.CommandClauses.ToFile)
  55511.         This.TargetFileName = This.CommandClauses.ToFile
  55512.     ENDIF 
  55513. ENDIF
  55514. ENDPROC
  55515. PROCEDURE fillruncollector
  55516. DODEFAULT()
  55517. IF NOT ISNULL(THIS.runCollector)
  55518.    * should have been taken care of by superclass
  55519.    THIS.setFRXDataSession()
  55520.    IF USED(THIS.memberDataAlias) 
  55521.       LOCAL m.lvValue, m.lcExpr, m.liSelect, m.loXML, m.loXMLTemp, m.loNode
  55522.       IF USED("FRX") 
  55523.          GO (THIS.frxHeaderRecno) IN FRX
  55524.          #IF OUTPUTXML = OUTPUTXML_DOM
  55525.             m.loXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  55526.             m.loXMLTemp = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  55527.          #ELSE
  55528.             m.loXML = CREATEOBJECT("Microsoft.XMLDOM")
  55529.             m.loXMLTemp = CREATEOBJECT("Microsoft.XMLDOM")
  55530.          #ENDIF      
  55531.          IF NOT m.loXML.LoadXML(FRX.Style)
  55532.             m.loXML = NULL
  55533.          ENDIF
  55534.       ENDIF      
  55535.       IF NOT ISNULL(m.loXML)
  55536.          m.liSelect = SELECT(0)
  55537.          SELECT (THIS.memberDataAlias)
  55538.          LOCATE FOR FRXRecno = THIS.frxHeaderRecno AND ;
  55539.                  Type = FRX_BLDR_MEMBERDATATYPE  ;
  55540.                  AND Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS ;
  55541.                  AND ExecWhen == FRX_BLDR_ADVPROP_HTML_HTTPEQUIV ;
  55542.                  AND VAL(DeClass) = ADVPROP_EDITMODE_TEXT ;
  55543.                  AND NOT EMPTY(Execute)
  55544.          IF FOUND()                 
  55545.             m.lvValue = ;
  55546.                       m.loXML.SelectSingleNode("/VFPData/reportdata" + ;
  55547.                       "[@name='" + Name + "' and @execwhen='" + ;
  55548.                       FRX_BLDR_ADVPROP_HTML_HTTPEQUIV + "']/@execute")
  55549.             IF (NOT ISNULL(m.lvValue)) AND ;
  55550.                  m.loXMLTemp.LoadXML(m.lvValue.Text)
  55551.                  m.loXML = m.loXMLTemp.SelectNodes("//meta")
  55552.                  FOR EACH m.loNode IN m.loXML
  55553.                     m.lcExpr = m.loNode.getAttribute("name")
  55554.                     m.lvValue = m.loNode.getAttribute("content")
  55555.                     IF NOT (ISNULL(m.lcExpr) OR ISNULL(m.lvValue) OR ;
  55556.                            EMPTY(m.lcExpr) OR EMPTY(m.lvValue))
  55557.                        IF VAL(m.loNode.getAttribute("type")) = ADVPROP_EDITMODE_GETEXPR
  55558.                           m.lvValue = THIS.evaluateUserExpression(m.lvValue)
  55559.                        ENDIF
  55560.                       IF THIS.runCollector.getKey(FRX_BLDR_ADVPROP_HTML_HTTPEQUIV+"." + m.lcExpr) = 0
  55561.                          THIS.runCollector.add(m.lvValue,FRX_BLDR_ADVPROP_HTML_HTTPEQUIV+"." + m.lcExpr)
  55562.                       ENDIF   
  55563.                    ENDIF  
  55564.                 NEXT
  55565.             ENDIF                      
  55566.          ENDIF
  55567.          STORE NULL  TO m.loXML, m.loXMLTemp, m.loNode
  55568.          SELECT (liSelect)         
  55569.       ENDIF        
  55570.    ENDIF      
  55571. ENDIF
  55572. ENDPROC
  55573. PROCEDURE getrawformattinginfo
  55574. LPARAMETERS m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  55575. LOCAL m.lcInfo, m.lcVal, m.liRecno
  55576. m.lcInfo = DODEFAULT(m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType)
  55577. THIS.setFRXDataSession()
  55578. m.liRecno = RECNO("FRX")
  55579. IF USED(THIS.MemberDataAlias) AND ;
  55580.    SEEK(m.liRecno,THIS.MemberDataAlias,"FRXRecno")          
  55581.    SELECT (THIS.MemberDataAlias)
  55582.    m.lcVal = ""
  55583.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55584.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55585.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55586.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSOVERRIDE
  55587.    IF FOUND()
  55588.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55589.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55590.       ELSE
  55591.          m.lcVal = Execute
  55592.       ENDIF         
  55593.    ENDIF      
  55594.    SELECT (THIS.MemberDataAlias)         
  55595.    IF NOT EMPTY(m.lcVal)
  55596.       m.lcInfo = m.lcInfo + " "+THIS.cssClassOverrideAttr+"='"+m.lcVal+"'"      
  55597.    ELSE
  55598.       * try again with other css class attribute
  55599.       LOCATE FOR FRXRecno = m.liRecno AND ;
  55600.              Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55601.              Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55602.              ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSEXTEND
  55603.       IF FOUND()
  55604.          IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55605.             m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55606.          ELSE
  55607.             m.lcVal = Execute
  55608.          ENDIF         
  55609.       ENDIF
  55610.       IF NOT EMPTY(m.lcVal)
  55611.          m.lcInfo = m.lcInfo + " "+THIS.cssClassAttr+"='"+m.lcVal+"'"            
  55612.       ENDIF   
  55613.    ENDIF
  55614.    SELECT (THIS.MemberDataAlias)         
  55615.    m.lcVal = ""
  55616.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55617.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55618.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55619.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMHREF
  55620.    IF FOUND()
  55621.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55622.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55623.       ELSE
  55624.          m.lcVal = Execute
  55625.       ENDIF         
  55626.    ENDIF      
  55627.    IF NOT EMPTY(m.lcVal)
  55628.       m.lcInfo = m.lcInfo + " "+ ;
  55629.         THIS.linkAttr +"='"+ ;
  55630.         THIS.pathEncode(m.lcVal, .T.)+"'"      
  55631.    ENDIF
  55632.    SELECT (THIS.MemberDataAlias)         
  55633.    m.lcVal = ""
  55634.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55635.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55636.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55637.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMTITLE
  55638.    IF FOUND()
  55639.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55640.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55641.       ELSE
  55642.          m.lcVal = Execute
  55643.       ENDIF         
  55644.    ENDIF      
  55645.    IF NOT EMPTY(m.lcVal)
  55646.       m.lcInfo = m.lcInfo + " "+THIS.titleAttr +"='"+m.lcVal+"'"      
  55647.    ENDIF
  55648.    SELECT (THIS.MemberDataAlias)         
  55649.    m.lcVal = ""
  55650.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55651.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55652.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55653.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMANCHOR       
  55654.    IF FOUND()
  55655.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55656.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55657.       ELSE
  55658.          m.lcVal = Execute
  55659.       ENDIF         
  55660.    ENDIF      
  55661.    IF NOT EMPTY(m.lcVal)
  55662.       m.lcInfo = m.lcInfo + " "+ ;
  55663.                  THIS.anchorAttr +"='"+ ;
  55664.                  THIS.pathEncode(m.lcVal, .T.)+"'"
  55665.    ENDIF
  55666.    SELECT FRX
  55667. ENDIF
  55668. RETURN m.lcInfo
  55669. ENDPROC
  55670. PROCEDURE getdefaultuserxslt
  55671. LOCAL m.lcResult
  55672. m.lcResult = THIS.getDefaultUserXSLTAsString()
  55673. * document properties, general
  55674. m.lcResult = STRTRAN(m.lcResult,"@id='description'","@id='"+FRX_BLDR_ADVPROP_DESCRIPTION+"'")
  55675. m.lcResult = STRTRAN(m.lcResult,"@id='author'","@id='"+FRX_BLDR_ADVPROP_AUTHOR+"'")
  55676. m.lcResult = STRTRAN(m.lcResult,"@id='keywords'","@id='"+FRX_BLDR_ADVPROP_KEYWORDS+"'")
  55677. m.lcResult = STRTRAN(m.lcResult,"@id='title'","@id='"+FRX_BLDR_ADVPROP_TITLE+"'")
  55678. m.lcResult = STRTRAN(m.lcResult,"@id='copyright'","@id='"+FRX_BLDR_ADVPROP_COPYRIGHT+"'")
  55679. m.lcResult = STRTRAN(m.lcResult,"@id='date'","@id='"+FRX_BLDR_ADVPROP_DATE+"'")
  55680. * document properties, HTML-specific
  55681. m.lcResult = STRTRAN(m.lcResult,"@id='css_sheet'","@id='"+FRX_BLDR_ADVPROP_HTML_CSS_FILE +"'")
  55682. m.lcResult = STRTRAN(m.lcResult,"@id='http-equiv'","@id='"+FRX_BLDR_ADVPROP_HTML_HTTPEQUIV  +"'")
  55683. * base VFP-RDL XML characteristics set
  55684. m.lcResult = STRTRAN(m.lcResult,"@h","@"+ THIS.HeightAttr)
  55685. m.lcResult = STRTRAN(m.lcResult,"@w","@"+ THIS.WidthAttr)
  55686. m.lcResult = STRTRAN(m.lcResult,"@l","@"+ THIS.LeftAttr)
  55687. m.lcResult = STRTRAN(m.lcResult,"@t","@"+ THIS.TopAttr)
  55688. m.lcResult = STRTRAN(m.lcResult,"@c","@"+ THIS.ContAttr)
  55689. m.lcResult = STRTRAN(m.lcResult,"@idref","@"+ THIS.IdRefAttribute)
  55690. m.lcResult = STRTRAN(m.lcResult,"@id","@"+THIS.IdAttribute)
  55691. m.lcResult = STRTRAN(m.lcResult,"@img","@"+THIS.imageSrcAttr )
  55692. * dynamic data and page-image extension set implemented in XMLListener
  55693. m.lcResult = STRTRAN(m.lcResult,"@DTEXT","@"+THIS.dataTextAttr  )
  55694. m.lcResult = STRTRAN(m.lcResult,"@DTYPE","@"+THIS.dataTypeAttr  )
  55695. m.lcResult = STRTRAN(m.lcResult,"@PLINK","@"+THIS.pageImageAttr  )
  55696. * dynamic formatting extension set implemented in XMLDisplayListener
  55697. m.lcResult = STRTRAN(m.lcResult,"@PA","@"+THIS.penAlphaAttr  )
  55698. m.lcResult = STRTRAN(m.lcResult,"@PR","@"+THIS.penRedAttr  )
  55699. m.lcResult = STRTRAN(m.lcResult,"@PG","@"+THIS.penGreenAttr  )
  55700. m.lcResult = STRTRAN(m.lcResult,"@PB","@"+THIS.penBlueAttr  )
  55701. m.lcResult = STRTRAN(m.lcResult,"@FA","@"+THIS.fillAlphaAttr  )
  55702. m.lcResult = STRTRAN(m.lcResult,"@FR","@"+THIS.fillRedAttr  )
  55703. m.lcResult = STRTRAN(m.lcResult,"@FG","@"+THIS.fillGreenAttr  )
  55704. m.lcResult = STRTRAN(m.lcResult,"@FB","@"+THIS.fillBlueAttr  )
  55705. m.lcResult = STRTRAN(m.lcResult,"@FNAME","@"+THIS.fontNameAttr  )
  55706. m.lcResult = STRTRAN(m.lcResult,"@FSIZE","@"+THIS.fontSizeAttr  )
  55707. m.lcResult = STRTRAN(m.lcResult,"@FSTYLE","@"+THIS.fontStyleAttr  )
  55708. * dynamic HTML extension set implemented in this class
  55709. m.lcResult = STRTRAN(m.lcResult,"@title","@"+THIS.titleAttr )
  55710. m.lcResult = STRTRAN(m.lcResult,"@alt","@"+THIS.titleAttr )
  55711. m.lcResult = STRTRAN(m.lcResult,"@css","@"+THIS.cssClassAttr )
  55712. m.lcResult = STRTRAN(m.lcResult,"@CSS","@"+THIS.cssClassOverrideAttr )
  55713. m.lcResult = STRTRAN(m.lcResult,"@anchor","@"+THIS.anchorAttr )
  55714. m.lcResult = STRTRAN(m.lcResult,"@hlink","@"+THIS.linkAttr )
  55715. THIS.XSLTProcessorUser = m.lcResult
  55716. ENDPROC
  55717. PROCEDURE Init
  55718. IF DODEFAULT()
  55719.    THIS.AppName = OUTPUTHTML_APPNAME_LOC
  55720.    RETURN .F.   
  55721. ENDIF
  55722. RETURN NOT THIS.HadError
  55723. ENDPROC
  55724. PROCEDURE setdomformattinginfo
  55725. LPARAMETERS m.toNode, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  55726. LOCAL  m.lcVal, m.liRecno
  55727. DODEFAULT( m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType)
  55728. THIS.setFRXDataSession()
  55729. m.liRecno = RECNO("FRX")
  55730. IF USED(THIS.MemberDataAlias) AND ;
  55731.    SEEK(m.liRecno,THIS.MemberDataAlias,"FRXRecno")          
  55732.    SELECT (THIS.MemberDataAlias)
  55733.    m.lcVal = ""
  55734.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55735.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55736.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55737.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSOVERRIDE
  55738.    IF FOUND()
  55739.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55740.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55741.       ELSE
  55742.          m.lcVal = Execute
  55743.       ENDIF         
  55744.    ENDIF      
  55745.    SELECT (THIS.MemberDataAlias)         
  55746.    IF NOT EMPTY(m.lcVal)
  55747.       m.toNode.SetAttribute(THIS.cssClassOverrideAttr,m.lcVal )                  
  55748.    ELSE
  55749.       * try again with other css class attribute
  55750.       LOCATE FOR FRXRecno = m.liRecno AND ;
  55751.              Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55752.              Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55753.              ExecWhen =  FRX_BLDR_ADVPROP_HTML_CSS_CLASSEXTEND
  55754.       IF FOUND()
  55755.          IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55756.             m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55757.          ELSE
  55758.             m.lcVal = Execute
  55759.          ENDIF         
  55760.       ENDIF
  55761.       IF NOT EMPTY(m.lcVal)
  55762.          m.toNode.SetAttribute(THIS.cssClassAttr,m.lcVal )                  
  55763.       ENDIF   
  55764.    ENDIF
  55765.    SELECT (THIS.MemberDataAlias)         
  55766.    m.lcVal = ""
  55767.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55768.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55769.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55770.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMHREF
  55771.    IF FOUND()
  55772.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55773.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55774.       ELSE
  55775.          m.lcVal = Execute
  55776.       ENDIF         
  55777.    ENDIF      
  55778.    IF NOT EMPTY(m.lcVal)
  55779.       m.toNode.SetAttribute(THIS.linkAttr,THIS.pathEncode(m.lcVal))
  55780.    ENDIF
  55781.    SELECT (THIS.MemberDataAlias)         
  55782.    m.lcVal = ""
  55783.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55784.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55785.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55786.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMTITLE
  55787.    IF FOUND()
  55788.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55789.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55790.       ELSE
  55791.          m.lcVal = Execute
  55792.       ENDIF         
  55793.    ENDIF      
  55794.    IF NOT EMPTY(m.lcVal)
  55795.       m.toNode.SetAttribute(THIS.titleAttr,m.lcVal )                  
  55796.    ENDIF
  55797.    SELECT (THIS.MemberDataAlias)         
  55798.    m.lcVal = ""
  55799.    LOCATE FOR FRXRecno = m.liRecno AND ;
  55800.           Type = FRX_BLDR_MEMBERDATATYPE  AND  ;
  55801.           Name = FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55802.           ExecWhen =  FRX_BLDR_ADVPROP_HTML_ITEMANCHOR       
  55803.    IF FOUND()
  55804.       IF VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  55805.          m.lcVal = TRANSFORM(THIS.evaluateUserExpression(Execute))
  55806.       ELSE
  55807.          m.lcVal = Execute
  55808.       ENDIF         
  55809.    ENDIF      
  55810.    IF NOT EMPTY(m.lcVal)
  55811.       m.toNode.SetAttribute(THIS.anchorAttr,THIS.pathEncode(m.lcVal) )                  
  55812.    ENDIF
  55813.    SELECT FRX
  55814. ENDIF
  55815. ENDPROC
  55816. PROCEDURE BeforeReport
  55817. DODEFAULT()
  55818. THIS.oldPageImageType = -1
  55819. IF THIS.XMLMode # OUTPUTXML_RDL_ONLY
  55820.    LOCAL llSetting, liSelect
  55821.    THIS.setFRXDataSession()
  55822.    IF USED(THIS.memberDataAlias)
  55823.       m.liSelect = SELECT(0)
  55824.       SELECT (THIS.memberDataAlias)
  55825.       LOCATE FOR Type == FRX_BLDR_MEMBERDATATYPE AND ;
  55826.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55827.                  ExecWhen == FRX_BLDR_ADVPROP_HTML_PAGEIMAGEHREF AND ;
  55828.                  THIS.evaluateStringToBoolean(Execute)         
  55829.       IF FOUND() AND THIS.pageImageType = 0
  55830.          THIS.oldPageImageType = 0
  55831.          THIS.pageImageType =  OUTPUTHTML_DEFAULT_PAGEIMAGE_TYPE
  55832.          IF THIS.ListenerType = LISTENER_TYPE_DEF
  55833.             THIS.ListenerType = LISTENER_TYPE_PAGED
  55834.          ENDIF
  55835.          IF THIS.supportsPageImages()  
  55836.             THIS.makeExternalFileLocationReachable() 
  55837.          ELSE
  55838.             IF NOT THIS.IsSuccessor
  55839.                THIS.pageImageType =  0      
  55840.             ENDIF
  55841.          ENDIF   
  55842.       ENDIF
  55843.       IF NOT THIS.CommandClauses.NoPageEject
  55844.          * we can only make this adjustment once per chain, 
  55845.          * since it can only be applied once per chain.
  55846.          * Last one wins.
  55847.          LOCATE FOR Type == FRX_BLDR_MEMBERDATATYPE AND ;
  55848.                     Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  55849.                     ExecWhen == FRX_BLDR_ADVPROP_HTML_TEXTAREAS_OFF 
  55850.          IF FOUND()
  55851.             llSetting = THIS.evaluateStringToBoolean(Execute)         
  55852.             IF VARTYPE(THIS.xsltParameters) = "O" AND ;
  55853.                THIS.xsltParameters.GetKey("useTextAreaForStretchingText") > 0
  55854.                THIS.oldTextAreaSetting = THIS.xsltParameters["useTextAreaForStretchingText"]
  55855.             ELSE
  55856.                THIS.oldTextAreaSetting = 1               
  55857.             ENDIF   
  55858.             THIS.adjustXSLTParameter( ;
  55859.                  IIF(llSetting,0,1),"useTextAreaForStretchingText")                     
  55860.          ENDIF                    
  55861.       ENDIF         
  55862.    ENDIF
  55863. ENDIF   
  55864. THIS.resetDataSession()
  55865. ENDPROC
  55866. PROCEDURE AfterReport
  55867. LPARAMETERS tlCalledEarly
  55868. DODEFAULT(tlCalledEarly)
  55869. IF THIS.oldPageImageType <> -1
  55870.    THIS.pageImageType = THIS.oldPageImageType 
  55871. ENDIF
  55872. THIS.resetDataSession()
  55873. * by CChalom
  55874. IF This.lObjTypeMode
  55875.     LOCAL llSaved
  55876.     llSaved = FILE(This.targetFileName)
  55877.     IF llSaved
  55878.         _Screen.oFoxyPreviewer.lSaved = llSaved
  55879.         IF This.lOpenViewer 
  55880.             This.ShellExec(This.TargetFileName)
  55881.         ENDIF 
  55882.     ENDIF 
  55883. ENDIF
  55884. ENDPROC
  55885. PROCEDURE applyusertransformtooutput
  55886. DODEFAULT()
  55887. IF THIS.oldTextAreaSetting <> -1
  55888.    THIS.adjustXSLTParameter( THIS.oldTextAreaSetting,"useTextAreaForStretchingText")                     
  55889.    THIS.oldTextAreaSetting = -1
  55890. ENDIF
  55891. ENDPROC
  55892. PROCEDURE LoadReport
  55893. This.UpdateProperties()
  55894. DODEFAULT()
  55895. ENDPROC
  55896. VNEWVAL
  55897. THIS    
  55898. ISRUNNING
  55899. READCONFIGURATION2
  55900. OutputConfig
  55901. OutputConfig
  55902. OutputConfig
  55903. ObjCode
  55904. OutputConfig
  55905. PROPERTY
  55906. THIS.
  55907. |METHOD|
  55908. |EVENT|
  55909. THIS.
  55910. TLCALLEDFROMINIT
  55911. THIS    
  55912. ISRUNNING
  55913. LISELECT
  55914. LCPEM
  55915. LLOPENED
  55916. LCORDER
  55917. LITYPE
  55918. LLQUIET    
  55919. QUIETMODE
  55920. GETCONFIGTABLE
  55921. CONFIGURATIONTABLE
  55922. OBJCODE
  55923. HADERROR
  55924. VERIFYCONFIGTABLE
  55925. OUTPUTCONFIG
  55926. CONFIGURATIONOBJTYPE
  55927. OBJTYPE
  55928. OBJNAME
  55929. OBJVALUE
  55930. FoxyOutputConfig
  55931. FoxyOutputConfig
  55932. _ReportOutputConfig
  55933. FoxyOutputConfig
  55934. Configuration table 
  55935.  was created.
  55936. TLFORCEEXTERNAL
  55937. LCDBF
  55938. LCPATH
  55939. LLISDBF
  55940. THIS    
  55941. ISRUNNING
  55942. GETPATHFOREXTERNALS
  55943. CREATECONFIGTABLE    
  55944. DOMESSAGE
  55945. CONFIGURATIONTABLEP
  55946. DoMessage
  55947. "Welcome to the demo run!",64
  55948. Sample initialization/config method call
  55949. TargetFileName
  55950. "xxx"
  55951. Sample initialization/config property
  55952. TCDBF
  55953. TLOVERWRITE
  55954. LISELECT
  55955. LCFILE
  55956. OBJTYPE
  55957. OBJCODE
  55958. OBJNAME
  55959. OBJVALUE
  55960. OBJINFO    
  55961. ONDELETED
  55962. File 
  55963.  cannot be created.
  55964. File 
  55965.  cannot be created.
  55966. VERIFYTARGETFILE
  55967. TARGETHANDLE
  55968. TARGETFILENAME
  55969. HADERROR    
  55970. DOMESSAGE
  55971. LASTERRORMESSAGEA
  55972. ?*"<>|
  55973. ?*"<>|
  55974. LCFILE
  55975. TARGETFILENAME
  55976. TARGETFILEEXTD
  55977. VNEWVAL
  55978. THIS    
  55979. ISRUNNING
  55980. TARGETFILEEXTD
  55981. VNEWVAL
  55982. THIS    
  55983. ISRUNNING
  55984. TARGETFILENAMED
  55985. VNEWVAL
  55986. THIS    
  55987. ISRUNNING
  55988. TARGETHANDLE
  55989.  created your report as
  55990. However, an error occurred during processing.
  55991. Report execution was cancelled.
  55992. Your results are not complete.
  55993.  created your report as
  55994. However, an error occurred during processing.
  55995. Report execution was cancelled.
  55996. Your results are not complete.
  55997.  was not able to create your report.
  55998.  was not able to create your report.
  55999. LADUMMY
  56000. TARGETHANDLE
  56001. TARGETFILENAME
  56002. HADERROR    
  56003. DOMESSAGE
  56004. APPNAME
  56005. LASTERRORMESSAGEB
  56006. .OBJTYPE
  56007. .OBJCODE
  56008. .OBJNAME
  56009. .OBJVALUE
  56010. .OBJINFO
  56011. Configuration table is not in correct format.
  56012. EXACTv
  56013. OBJTYPE
  56014. OBJCODE
  56015. OBJNAME
  56016. OBJVALUE
  56017. DELETED()
  56018. SAFETYv
  56019. Configuration table is missing C
  56020. one or more required indexes.
  56021. TCALIAS
  56022. TCFAILUREMSGTABLE
  56023. TCFAILUREMSGINDEXES
  56024. LCTABLE    
  56025. LCMESSAGE
  56026. LCALIAS
  56027. LISELECT
  56028. LLRETURN
  56029. LITAGCOUNT
  56030. LAREQUIRED
  56031. LAKEYS
  56032. LIFOUND
  56033. LLEXACTOFF
  56034. LLSAFETYON
  56035. OBJTYPE
  56036. OBJCODE
  56037. OBJNAME
  56038. OBJVALUE    
  56039. ONDELETED
  56040. THIS    
  56041. DOMESSAGE
  56042. LASTERRORMESSAGE
  56043. VNEWVAL
  56044. THIS    
  56045. ISRUNNING
  56046. EXTERNALFILELOCATION{
  56047. VNEWVAL
  56048. PAGEIMAGETYPE
  56049. PAGEIMAGEEXTENSION
  56050. GETPAGEIMAGEEXTENSION
  56051. LCEXT
  56052. PAGEIMAGETYPE
  56053. TIPAGE
  56054. TLFULLPATH
  56055. LCFILENAME
  56056. TARGETFILENAME
  56057. PAGEIMAGEEXTENSION
  56058. EXTERNALFILELOCATION
  56059. OUTPUTPAGE
  56060. AFTERREPORT
  56061. UNLOADREPORT
  56062. TCMETHODTOKEN
  56063. ISSUCCESSOR
  56064. PAGEIMAGETYPE
  56065. LISTENERTYPEd
  56066. TIPAGE
  56067. LCFILE
  56068. LLERROR
  56069. PAGEIMAGETYPE
  56070. GENERATEPAGEIMAGEFILENAME
  56071. OUTPUTPAGEQ
  56072. TVNEWVAL
  56073. CURRENTPAGEIMAGEFILENAME
  56074. EXTERNALFILELOCATION
  56075. TARGETFILENAME    
  56076. LLRUNNING    
  56077. ISRUNNING
  56078. You have asked for page image files to be generated, C
  56079. but this report run is not in a mode that currently supports 
  56080. this feature.
  56081. Your main output file will be generated without them.
  56082. NBANDOBJCODE    
  56083. NFRXRECNO
  56084. SUPPORTSPAGEIMAGES
  56085. LCFILE
  56086. LIPAGENO
  56087. PAGEIMAGETYPE
  56088. COMMANDCLAUSES    
  56089. RANGEFROM
  56090. ISSUCCESSOR
  56091. SHAREDPAGENO
  56092. PAGENO
  56093. GENERATEPAGEIMAGEFILENAME
  56094. CURRENTPAGEIMAGEFILENAME    
  56095. SUCCESSOR
  56096. TWOPASSPROCESS
  56097. CURRENTPASS    
  56098. DOMESSAGE
  56099. currentPageImageFilename
  56100. CURRENTPAGEIMAGEFILENAME
  56101. PAGEIMAGETYPE
  56102. SUPPORTSPAGEIMAGES
  56103. ISSUCCESSOR
  56104. LISTENERTYPE!
  56105. MAKEEXTERNALFILELOCATIONREACHABLE    
  56106. SUCCESSOR
  56107. ADDPROPERTY
  56108. READCONFIGURATION
  56109. SETCONFIGURATION
  56110. RESETDATASESSION
  56111. CLOSETARGETFILE}
  56112. FileOutput Listener
  56113. APPNAME
  56114. READCONFIGURATION
  56115. SETCONFIGURATION
  56116. HADERROR
  56117. AFTERREPORT
  56118. COMMANDCLAUSES
  56119. NOPAGEEJECT
  56120. SUPPORTSPAGEIMAGES
  56121. LCFILELOCATION
  56122. LIPAGE
  56123. LCFILE
  56124. EXTERNALFILELOCATION!
  56125. MAKEEXTERNALFILELOCATIONREACHABLE
  56126. OUTPUTPAGECOUNT
  56127. OUTPUTPAGEIMAGE
  56128. OUTPUTPAGE
  56129. NPAGENO
  56130. EDEVICE
  56131. NDEVICETYPE
  56132. NLEFT
  56133. NWIDTH
  56134. NHEIGHT    
  56135. NCLIPLEFT
  56136. NCLIPTOP
  56137. NCLIPWIDTH
  56138. NCLIPHEIGHT
  56139. SUPPORTSPAGEIMAGES
  56140. OUTPUTPAGEIMAGE
  56141. readconfiguration_assign,
  56142. setconfiguration
  56143. getconfigtable
  56144. createconfigtable 
  56145. opentargetfile
  56146. verifytargetfile
  56147. targetfileext_assignx
  56148. targetfilename_assign
  56149. targethandle_assign[
  56150. closetargetfile
  56151. verifyconfigtable
  56152. configurationobjtype_access
  56153. externalfilelocation_assign%
  56154. pageimagetype_assign
  56155. getpageimageextension
  56156. generatepageimagefilename
  56157. supportspageimages
  56158. outputpageimage
  56159. currentpageimagefilename_assign
  56160. makeexternalfilelocationreachable
  56161. BeforeBand*!
  56162. BeforeReport'%
  56163. setfrxdatasessionenvironment
  56164. Destroy!'
  56165. InitU'
  56166. AfterReport
  56167. OutputPage
  56168. DOSTATUS
  56169. UPDATESTATUS
  56170. CLEARSTATUS
  56171. AFTERBAND
  56172. AFTERREPORT
  56173. m.toListener.CommandClauses.RecordTotalb
  56174. BEFOREBAND
  56175. DATASESSIONv
  56176. BEFOREREPORT
  56177. CANCELREPORT
  56178. DATASESSIONv
  56179. LOADREPORT
  56180. reportStartRunDatetime
  56181. m.toListener.CommandClauses.NoDialogb
  56182. UNLOADREPORT
  56183. reportStopRunDatetime
  56184. TOLISTENER
  56185. TCMETHODTOKEN
  56186. TP12    
  56187. LISESSION
  56188. DOSTATUS
  56189. UPDATESTATUS
  56190. CLEARSTATUS
  56191. SYNCHSTATUS    
  56192. ISRUNNING
  56193. CURRENTRECORD
  56194. COMMANDCLAUSES
  56195. RECORDTOTAL
  56196. DESIGNATEDDRIVER
  56197. DRIVINGALIAS
  56198. SUCCESSORSYS2024
  56199. VISIBLE
  56200. REPORTSTOPRUNDATETIME
  56201. POPUSERFEEDBACKGLOBALSETS
  56202. CURRENTPASS
  56203. CURRENTDATASESSION
  56204. SETUPREPORT    
  56205. QUIETMODE    
  56206. PAGELIMIT
  56207. PAGENO
  56208. ALLOWMODALMESSAGES    
  56209. DOMESSAGE
  56210. CANCELQUERYTEXT
  56211. ATTENTIONTEXT
  56212. CANCELREQUESTED
  56213. ISSUCCESSOR
  56214. REPORTINCOMPLETETEXT
  56215. RESETUSERFEEDBACK
  56216. ADDPROPERTY
  56217. REPORTSTARTRUNDATETIME
  56218. NODIALOG
  56219. INITSTATUSTEXT
  56220. PUSHUSERFEEDBACKGLOBALSETS
  56221. PERSISTBETWEENRUNS
  56222. LISTENERDATASESSION
  56223. RELEASE9
  56224. VNEWVAL
  56225. INCLUDESECONDS9
  56226. VNEWVAL
  56227. INITSTATUSTEXT9
  56228. VNEWVAL
  56229. PREPASSSTATUSTEXT
  56230. VNEWVAL
  56231. RUNSTATUSTEXT
  56232. VNEWVAL
  56233. SECONDSTEXT
  56234. VNEWVAL
  56235. LCTYPE
  56236. CMESSAGE
  56237. THERMCAPTIONF
  56238. VNEWVAL
  56239. THERMFORMCAPTION
  56240. SETTHERMFORMCAPTION
  56241. VNEWVAL
  56242. THERMFORMHEIGHT
  56243. THERMMARGIN
  56244. SYNCHUSERINTERFACE
  56245. VNEWVAL
  56246. THERMFORMWIDTH
  56247. THERMMARGIN
  56248. SYNCHUSERINTERFACE~
  56249. VNEWVAL
  56250. THERMFORMHEIGHT
  56251. THERMFORMWIDTH
  56252. THERMMARGIN
  56253. SYNCHUSERINTERFACE
  56254. _SCREEN.ActiveFormb
  56255. THIS.CommandClauses.InWindowb
  56256. THIS.CommandClauses.Windowb
  56257. _SCREEN.ActiveFormb
  56258. _SCREEN.ActiveFormb
  56259. LOFORM    
  56260. LOTOPFORM
  56261. LCINWINDOW
  56262. ACTIVEFORM
  56263. SHOWWINDOW
  56264. COMMANDCLAUSES
  56265. INWINDOW
  56266. WINDOW
  56267. FORMS
  56268. NAME    
  56269. FORMCOUNT6
  56270. WINDOWS
  56271. SKIPv
  56272. TOLISTENER
  56273. LISELECT
  56274. LCALIAS
  56275. LISKIPS
  56276. LASKIPS
  56277. FRXDATASESSION
  56278. DESIGNATEDDRIVER
  56279. DRIVINGALIAS
  56280. OBJTYPE
  56281. OBJCODE
  56282. CURRENTDATASESSION
  56283. PLATFORM
  56284. TLRESETTIMES
  56285. CURRENTRECORD
  56286. PERCENTDONE
  56287. REPORTSTARTRUNDATETIME
  56288. REPORTSTOPRUNDATETIME
  56289. THERMFORMCAPTION
  56290. SYNCHUSERINTERFACE
  56291. TCCOMMANDCLAUSESFILE
  56292. TCPRINTJOBNAME
  56293. THERMFORMCAPTION
  56294. CNAME
  56295. CANCELINSTRTEXT
  56296. CAPTION@
  56297. TOLISTENER
  56298. NBANDOBJCODE    
  56299. NFRXRECNO
  56300. THIS    
  56301. ISRUNNING
  56302. FRXBANDRECNO
  56303. CURRENTDATASESSION
  56304. DRIVINGALIASCURRENTRECNO
  56305. DRIVINGALIAS
  56306. CURRENTRECORD
  56307. COMMANDCLAUSES
  56308. RECORDTOTAL
  56309. CURRENTPASS
  56310. TWOPASSPROCESS
  56311. RESETUSERFEEDBACK
  56312. UPDATESTATUS
  56313. LISTENERDATASESSION
  56314. MACDESKTOP
  56315. SCREEN
  56316. MACDESKTOP
  56317. SCREEN
  56318. TOLISTENER
  56319. CMESSAGE
  56320. LOPARENTFORM    
  56321. LCCAPTION
  56322. LCPARENTFORMNAME    
  56323. QUIETMODE
  56324. THIS    
  56325. ISRUNNING
  56326. COMMANDCLAUSES
  56327. NODIALOG
  56328. THERMCAPTION
  56329. CLOSABLE
  56330. MOVABLE
  56331. THERMSHAPE
  56332. WIDTH
  56333. PERCENTDONE    
  56334. THERMBACK
  56335. VISIBLE
  56336. GETPARENTWINDOWREF
  56337. DESKTOP
  56338. MACDESKTOP
  56339. SHOWWINDOW
  56340. ALWAYSONTOP
  56341. AUTOCENTER
  56342. THERMLABEL
  56343. CAPTION
  56344. LEFT.
  56345. TOLISTENER
  56346. VISIBLE>
  56347. TOLISTENER
  56348. THIS    
  56349. ISRUNNING
  56350. LIRECTOTAL
  56351. LNNEWPERCENT
  56352. LLSHOW
  56353. COMMANDCLAUSES
  56354. RECORDTOTAL
  56355. CURRENTRECORD
  56356. THERMPRECISION
  56357. PERCENTDONE
  56358. DOSTATUS
  56359. CURRENTPASS
  56360. TWOPASSPROCESS
  56361. PREPASSSTATUSTEXT
  56362. RUNSTATUSTEXTM
  56363. Notify
  56364. ESCAPE
  56365. PUBLIC &lcRef.   
  56366. ON ESCAPE &lcRef..CancelReport()      
  56367. ESCAPEv
  56368. TOLISTENER    
  56369. STARTMODE
  56370. LCREF
  56371. SETNOTIFYCURSOR
  56372. ONESCAPECOMMAND
  56373. ESCAPEREFERENCE    
  56374. SETESCAPE
  56375. RELEASE &lcRef.
  56376. ON ESCAPE &lcRef
  56377. STARTMODE
  56378. LCREF
  56379. ESCAPEREFERENCE
  56380. ONESCAPECOMMAND
  56381. SETNOTIFYCURSOR    
  56382. SETESCAPE
  56383. GetSysColor
  56384. Win32API
  56385. GETSYSCOLOR
  56386. WIN32API
  56387. LITHERMTOP
  56388. LITHERMLEFT
  56389. LITHERMWIDTH
  56390. LITHERMHEIGHT
  56391. HEIGHT
  56392. THERMFORMHEIGHT
  56393. WIDTH
  56394. THERMFORMWIDTH
  56395. CONTROLBOX
  56396. CLOSABLE
  56397. MOVABLE
  56398. THERMMARGIN
  56399. SETTHERMFORMCAPTION    
  56400. THERMBACK
  56401. THERMLABEL
  56402. PARENT    
  56403. FORECOLOR
  56404. THERMSHAPE    
  56405. BACKCOLOR    
  56406. FILLCOLOR
  56407. m.toListener.CommandClauses.Summaryb
  56408. Summary-
  56409. m.toListener.CommandClauses.RecordTotalb
  56410. RecordTotal
  56411. m.toListener.CommandClauses.NoDialogb
  56412. NoDialog-
  56413. WINDOWS
  56414. WINDOWS
  56415. WINDOWS
  56416. WINDOWS
  56417. WINDOWS
  56418. TOLISTENER
  56419. LLFRXAVAILABLE
  56420. LCALIAS
  56421. THIS    
  56422. ISRUNNING
  56423. CURRENTDATASESSION
  56424. DRIVINGALIAS
  56425. FRXDATASESSION
  56426. GETREPORTSCOPEDRIVER
  56427. SETTHERMFORMCAPTION
  56428. COMMANDCLAUSES
  56429. PRINTJOBNAME
  56430. FRXBANDRECNO
  56431. SUMMARY
  56432. OBJTYPE
  56433. OBJCODE
  56434. PLATFORM
  56435. DRIVINGALIASCURRENTRECNO
  56436. LISTENERDATASESSION=
  56437. VNEWVAL
  56438. THERMPRECISION7
  56439. VNEWVAL
  56440. PERSISTBETWEENRUNS
  56441. CancelInstrText
  56442. CancelQueryText
  56443. ReportIncompleteText
  56444. AttentionText
  56445. INITSTATUS
  56446. PREPSTATUS
  56447. RUNSTATUS
  56448. SECONDS
  56449. CANCELINST
  56450. CANCELQUER
  56451. REPINCOMPL
  56452. ATTENTION
  56453. Initializing... 
  56454. Running calculation prepass... 
  56455. Creating output... 
  56456. sec(s)
  56457. Press Esc to cancel... 
  56458. Stop report execution?C
  56459. (If you press 'No', report execution will continue.)
  56460. Report execution was cancelled.C
  56461. Your results are not complete.
  56462. Attention
  56463. m.cMessage+ " "+ 
  56464. TRANSFORM(THIS.PercentDone,"999"+ 
  56465. IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" 
  56466. + IIF(NOT THIS.IncludeSeconds, "" , "   "+
  56467. TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-
  56468. THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)
  56469. ADDPROPERTY
  56470. NAME    
  56471. _GOHELPER
  56472. INITSTATUSTEXT
  56473. GETLOC
  56474. PREPASSSTATUSTEXT
  56475. RUNSTATUSTEXT
  56476. SECONDSTEXT
  56477. CANCELINSTRTEXT
  56478. CANCELQUERYTEXT
  56479. REPORTINCOMPLETETEXT
  56480. ATTENTIONTEXT
  56481. THERMCAPTION
  56482. RESETUSERFEEDBACK
  56483. applyfx,
  56484. includeseconds_assign
  56485. initstatustext_assign
  56486. prepassstatustext_assignd
  56487. runstatustext_assign
  56488. secondstext_assign
  56489. thermcaption_assign=
  56490. thermformcaption_assign    
  56491. thermformheight_assign
  56492. thermformwidth_assignv
  56493. thermmargin_assignb
  56494. getparentwindowref5
  56495. getreportscopedriver
  56496. resetuserfeedbackw
  56497. setthermformcaption
  56498. synchstatus
  56499. dostatus
  56500. clearstatusE
  56501. updatestatus
  56502. pushuserfeedbackglobalsets
  56503. popuserfeedbackglobalsetsX#
  56504. synchuserinterface
  56505. setupreport
  56506. thermprecision_assign
  56507. persistbetweenruns_assign
  56508. Initd.
  56509. PROCEDURE xmlrawtag
  56510. LPARAMETERS m.tcNode, m.tlOpen, m.tcID, m.tcIDRef, m.tvFormatting
  56511. LOCAL m.lcNode
  56512. IF ISNULL(m.tlOpen) OR m.tlOpen
  56513.    m.lcNode = "<" + m.tcNode 
  56514.    IF NOT EMPTY(m.tcID)
  56515.       m.lcNode = m.lcNode + " "+THIS.idAttribute+"='"+m.tcID+"'"
  56516.    ENDIF
  56517.    IF NOT EMPTY(m.tcIDRef)
  56518.       m.lcNode = m.lcNode + " "+THIS.idRefAttribute+"='"+m.tcIDRef+"'"
  56519.    ENDIF
  56520.    IF NOT EMPTY(m.tvFormatting)
  56521.       m.lcNode = m.lcNode + " " + m.tvFormatting
  56522.    ENDIF
  56523.    IF ISNULL(m.tlOpen)
  56524.       m.lcNode = m.lcNode +  "/"
  56525.    ENDIF
  56526.    m.lcNode = m.lcNode + ">"
  56527.    m.lcNode = "</"+ m.tcNode + ">"   
  56528. ENDIF
  56529. RETURN m.lcNode
  56530. ENDPROC
  56531. PROCEDURE xmlrawnode
  56532. LPARAMETERS m.tcNode,m.tcValue, m.tvID, m.tvIDRef, m.tvFormatting
  56533. LOCAL m.lcValue, m.lcNode
  56534. IF PARAMETERS() < 2
  56535.    m.lcValue = ""
  56536.    m.lcValue = THIS.XMLRawConv(m.tcValue)
  56537. ENDIF
  56538. IF EMPTY(m.lcValue) 
  56539.   m.lcNode = THIS.XMLRawTag(m.tcNode,NULL, m.tvID, m.tvIDRef, m.tvFormatting)
  56540.   m.lcNode = THIS.XMLRawTag(m.tcNode, .T., m.tvID, m.tvIDRef, m.tvFormatting)+m.lcValue+THIS.XMLRawTag(m.tcNode)
  56541. ENDIF
  56542. RETURN m.lcNode
  56543. ENDPROC
  56544. PROCEDURE xmlrawconv
  56545. LPARAMETERS m.tcValue
  56546. LOCAL m.lcValue, m.liChar
  56547. * must have ampersand as the first STRTRAN()      
  56548. m.lcValue = STRTRAN(m.tcValue, '&', '&' )      
  56549. m.lcValue = STRTRAN(m.lcValue, '<', '<' )
  56550. m.lcValue = STRTRAN(m.lcValue, '>', '>' )
  56551. m.lcValue = STRTRAN(m.lcValue, '"', '"' )
  56552. m.lcValue = STRTRAN(m.lcValue, ['], ''' )
  56553. m.lcValue = CHRTRAN(m.lcValue, CHR(0)+CHR(4), "  ")
  56554. RETURN m.lcValue
  56555. * TBD: make any adjustments 
  56556. * and, if needed, for different element types if needed
  56557. ENDPROC
  56558. PROCEDURE writeraw
  56559. LPARAMETERS m.tcContents
  56560.  FWRITE(THIS.TargetHandle, m.tcContents) 
  56561. ENDPROC
  56562. PROCEDURE includebreaksindata_assign
  56563. LPARAMETERS m.vNewVal
  56564. * Readonly during report run
  56565. IF VARTYPE(m.vNewVal) = "N" AND ;
  56566.    INLIST(m.vNewVal, ;
  56567.           OUTPUTXML_BREAKS_INDATA,;
  56568.           OUTPUTXML_BREAKS_NONE, ;
  56569.           OUTPUTXML_BREAKS_COLLECTION) AND ;
  56570.    NOT THIS.IsRunning 
  56571.    THIS.IncludeBreaksInData = m.vNewVal
  56572. ENDIF   
  56573. ENDPROC
  56574. PROCEDURE xmlmode_assign
  56575. LPARAMETERS m.vNewVal
  56576. * Readonly during report run
  56577. IF NOT THIS.IsRunning
  56578.    IF VARTYPE(m.vNewVal) = "N" AND ;
  56579.       INLIST(m.vNewVal,;
  56580.              OUTPUTXML_DATA_ONLY,;
  56581.              OUTPUTXML_RDL_ONLY, ;
  56582.              OUTPUTXML_DATA_RDL)
  56583.       THIS.xmlmode = m.vNewVal
  56584.    ENDIF
  56585. ENDIF   
  56586. ENDPROC
  56587. PROCEDURE resetreport
  56588. THIS.IncludePage = .T.
  56589. THIS.IsRunning = .F.
  56590. THIS.DataNodes = NULL
  56591. THIS.PageNodes = NULL
  56592. THIS.ColumnNodes = NULL
  56593. THIS.CurrentBand = NULL
  56594. THIS.CurrentPage = NULL
  56595. THIS.CurrentColumn = NULL
  56596. THIS.evaluateContentsValues = NULL 
  56597. THIS.successorGFXNoRender = NULL
  56598. THIS.ClearStatus()   
  56599. ENDPROC
  56600. PROCEDURE applyxslt
  56601. LPARAMETERS m.tvSource, m.tvProcessor, m.tvParamCollection, m.tvFRXAlias
  56602. LOCAL m.loSource, m.loProcessor, m.lcReturn, m.llSuccess, m.liParam, m.liSession, m.llCharsetsInUse
  56603. m.lcReturn = ""
  56604. STORE NULL TO m.loSource, m.loProcessor
  56605. IF VARTYPE(m.tvSource) = "C" 
  56606.    * first param can be filename, string, or object
  56607.    * if filename or string, test existance
  56608.    * and try to load as a dom object
  56609. *   m.liSession = SET("DATASESSION")
  56610. *   THIS.resetDataSession()
  56611.    m.llCharsetsInUse = THIS.frxCharsetsInUse(m.tvFRXAlias)
  56612.    m.loSource = CREATEOBJECT(OUTPUTXML_DOMDOCUMENTOBJECT)
  56613.    THIS.fixMSXMLObjectForDTDs(m.loSource)
  56614.    DO CASE
  56615.    CASE FILE(m.tvSource) AND NOT m.llCharsetsInUse
  56616.       m.loSource.Load(m.tvSource)
  56617.    CASE FILE(m.tvSource) 
  56618.       *&* m.loSource.Load(m.tvSource) 
  56619.       *&* would introduce problems with the (multi) charset-handling
  56620.       *&* in FRX by engine
  56621.       *&* see notes below
  56622.       m.loSource.LoadXML(FILETOSTR(m.tvSource))
  56623.    OTHERWISE
  56624.       m.loSource.LoadXML(m.tvSource)
  56625.    ENDCASE
  56626. *   SET DATASESSION TO (m.liSession)
  56627.    IF NOT ISNULL(m.loSource) AND ;
  56628.       LEN(m.loSource.XML) > 0 AND ;
  56629.       EMPTY(m.loSource.parseError.reason)
  56630.       m.llSuccess = .T.
  56631.    ELSE
  56632.       m.loSource = NULL
  56633. *      IF NOT ISNULL(m.loSource)
  56634. *         THIS.LastErrorMessage = loSource.parseError.reason
  56635. *      ENDIF   
  56636.    ENDIF
  56637.    * if object, test nodetypestring availability
  56638.    * and then for document/tree shape.
  56639.    IF VARTYPE(m.tvSource) = "O"
  56640.       TRY 
  56641.          IF INLIST("|"+UPPER(m.tvSource.nodeTypeString)+"|", ;
  56642.                        "|DOCUMENT|","|ELEMENT|") && quick and dirty test for tree shape
  56643.             m.loSource = m.tvSource           
  56644.             m.llSuccess = .T.
  56645.          ENDIF
  56646.       ENDTRY
  56647.    ENDIF   
  56648. ENDIF
  56649. IF m.llSuccess 
  56650.    * for failed transformations, return source XML
  56651.    m.lcReturn = m.loSource.XML
  56652.    * as above
  56653.    * second param can be filename or object
  56654.    * if filename, as above
  56655.    *  if object, test for appropriate interface
  56656.    * figure out if it's a processor factory
  56657.    * or an instance (either dom or stylesheet)
  56658.    *  and error out if we can't figure it out
  56659.    m.llSuccess = .F.
  56660.    IF VARTYPE(m.tvProcessor) = "C"    
  56661.       m.loProcessor = THIS.LoadProcessorObject(m.tvProcessor)
  56662.       IF NOT ISNULL(m.loProcessor)
  56663.          m.loProcessor = m.loProcessor.createProcessor()      
  56664.       ENDIF
  56665.    ELSE
  56666.       IF VARTYPE(m.tvProcessor) = "O" 
  56667.          TRY
  56668.             IF VARTYPE(m.tvProcessor.styleSheet) = "O"
  56669.                m.loProcessor = m.tvProcessor
  56670.                * if the object was a processor object
  56671.                * get a stylesheet instance
  56672.                m.loProcessor = m.loProcessor.createProcessor()
  56673.             ENDIF   
  56674.          CATCH
  56675.             * just want to swallow the errors here because
  56676.             * of the primitive tests being used
  56677.          ENDTRY
  56678.       ENDIF
  56679.    ENDIF
  56680.    IF NOT ISNULL(m.loProcessor) 
  56681.       m.llSuccess = .T.
  56682.    ENDIF
  56683. ENDIF
  56684. IF m.llSuccess
  56685.             
  56686.    WITH m.loProcessor
  56687.       IF VARTYPE(m.tvParamCollection) = "O" AND ;
  56688.          UPPER(m.tvParamCollection.BaseClass) == "COLLECTION" AND ;
  56689.          m.tvParamCollection.Count > 0
  56690.          FOR m.liParam = 1 TO m.tvParamCollection.Count
  56691.             .AddParameter(m.tvParamCollection.GetKey(m.liParam), ;
  56692.                          m.tvParamCollection.Item(m.liParam))
  56693.          ENDFOR
  56694.       ENDIF   
  56695.       * always override for current external file location info, if we have one:
  56696.        IF NOT EMPTY(THIS.externalFileLocation)
  56697.           .AddParameter("externalFileLocation", THIS.externalFileLocation)
  56698.        ENDIF          
  56699.       .input = m.loSource
  56700.       .transform()
  56701.       m.lcReturn = .output
  56702.    ENDWITH
  56703. ENDIF
  56704. STORE NULL TO m.loSource, m.loProcessor
  56705. *&* Sedna change to 
  56706. *&* ensure UTF-8 File contents per documented
  56707. *&* behavior of this class.  xsl:output encoding is ignored
  56708. *&* by the msxml processor transform anyway when outputting
  56709. *&* to a string (see http://msdn2.microsoft.com/en-us/library/ms753765.aspx) 
  56710. *&* and as a result we are outputting a file with no encoding
  56711. *&* specified after the transform.  So we should ensure that it
  56712. *&* is in the default XML encoding when none is specified,
  56713. *&* which is UTF-8. But Fox has changed the UTF-16 return value 
  56714. *&* from the MSXML processor objects to DBCS.  We need to fix 
  56715. *&* that at the time we send to disk for other applications to 
  56716. *&* read, can't do it before this point.  We can't do it
  56717. *&* in cases where the user has marked explicit fontcharsets in
  56718. *&* the FRX, since this information is passed along in VFP-RDL XML
  56719. *&* and could be treated differently by different output mechanisms/XSLT.
  56720. *&* We will preserve original behavior in that case.
  56721. IF m.llCharsetsInUse
  56722.    RETURN m.lcReturn
  56723.    RETURN (STRCONV(m.lcReturn,STRCONV_DBCS_UTF8))
  56724. ENDIF   
  56725. ENDPROC
  56726. PROCEDURE currentdocument_assign
  56727. LPARAMETERS m.vNewVal
  56728. * TBD: evaluate for readonly status during the life of the report run
  56729. THIS.currentdocument = m.vNewVal
  56730. ENDPROC
  56731. PROCEDURE idattribute_assign
  56732. LPARAMETERS m.vNewVal
  56733. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56734.    THIS.idattribute = m.vNewVal
  56735. ENDIF   
  56736. ENDPROC
  56737. PROCEDURE idrefattribute_assign
  56738. LPARAMETERS m.vNewVal
  56739. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56740.    THIS.idrefattribute = m.vNewVal
  56741. ENDIF   
  56742. ENDPROC
  56743. PROCEDURE xsltprocessorrdl_assign
  56744. LPARAMETERS m.vNewVal
  56745. DO CASE
  56746. CASE VARTYPE(m.vNewVal) = "X"
  56747.    THIS.XSLTProcessorRDL = NULL
  56748. CASE VARTYPE(m.vNewVal) = "O" 
  56749.    TRY
  56750.      IF VARTYPE(m.vNewVal.stylesheet) = "O"
  56751.        THIS.XSLTProcessorRDL = m.vNewVal
  56752.      ENDIF
  56753.    CATCH 
  56754.    ENDTRY
  56755. CASE VARTYPE(m.vNewVal) = "C" 
  56756.    LOCAL m.loProcessor
  56757.    m.loProcessor = THIS.LoadProcessorObject(m.vNewVal)
  56758.    IF NOT ISNULL(m.loProcessor)
  56759.       THIS.XSLTProcessorRDL = m.loProcessor
  56760.    ENDIF
  56761. ENDCASE
  56762. ENDPROC
  56763. PROCEDURE xsltprocessoruser_assign
  56764. LPARAMETERS m.vNewVal
  56765. DO CASE
  56766. CASE VARTYPE(m.vNewVal) = "X"
  56767.    THIS.XSLTProcessorUser = NULL
  56768. CASE VARTYPE(m.vNewVal) = "O" 
  56769.    TRY
  56770.      IF VARTYPE(m.vNewVal.stylesheet) = "O"
  56771.        THIS.XSLTProcessorUser = m.vNewVal
  56772.      ENDIF
  56773.    CATCH 
  56774.    ENDTRY
  56775. CASE VARTYPE(m.vNewVal) = "C" 
  56776.    LOCAL m.loProcessor
  56777.    m.loProcessor = THIS.LoadProcessorObject(m.vNewVal)
  56778.    IF NOT ISNULL(m.loProcessor)
  56779.       THIS.XSLTProcessorUser = m.loProcessor
  56780.    ENDIF
  56781. ENDCASE
  56782. ENDPROC
  56783. PROCEDURE resetdocument
  56784. * Do *not* reset 
  56785. * page number/total
  56786. THIS.ResetReport()   
  56787. THIS.CloseTargetFile()
  56788. THIS.NoPageEject = .F.
  56789. IF THIS.HadError
  56790.    THIS.ResetToDefault("QuietMode")
  56791. ENDIF   
  56792. THIS.CurrentDocument = NULL
  56793. ENDPROC
  56794. PROCEDURE verifyncname
  56795. LPARAMETERS m.tcName
  56796. LOCAL m.llValid, m.liChar, m.lcChar
  56797. DO CASE 
  56798. CASE VARTYPE(m.tcName) # "C" OR EMPTY(m.tcName)
  56799.   * invalid
  56800. CASE LEFT(m.tcName,1) # "_" AND NOT ISALPHA(LEFT(m.tcName,1))
  56801.   * invalid
  56802. CASE LEFT(UPPER(m.tcName),3) = "XML"
  56803.   * invalid
  56804. OTHERWISE
  56805.   m.llValid = .T.  
  56806.   FOR m.liChar = 2 TO LEN(tcName)
  56807.      m.lcChar = SUBSTR(m.tcName,m.liChar,1)
  56808.      IF NOT (ISALPHA(m.lcChar) OR ;
  56809.              ISDIGIT(m.lcChar) OR ;
  56810.              INLIST(m.lcChar,".","-","_"))
  56811.         m.llValid = .F.
  56812.         EXIT
  56813.      ENDIF
  56814.   ENDFOR
  56815. ENDCASE
  56816. RETURN m.llValid 
  56817. ENDPROC
  56818. PROCEDURE includeformattinginlayoutobjects_assign
  56819. LPARAMETERS m.vNewVal
  56820. *TBD: evaluate whether
  56821. * it's okay to do this during a run?
  56822. IF VARTYPE(m.vNewVal) = "L"
  56823.    THIS.IncludeFormattingInLayoutObjects = m.vNewVal
  56824. ENDIF   
  56825. ENDPROC
  56826. PROCEDURE includebandswithnoobjects_assign
  56827. LPARAMETERS m.vNewVal
  56828. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning 
  56829.    THIS.IncludeBandsWithNoObjects = m.vNewVal
  56830. ENDIF   
  56831. ENDPROC
  56832. PROCEDURE verifynodenames
  56833. IF NOT USED("Nodes")
  56834.    RETURN .F.
  56835. ENDIF
  56836. IF ISREADONLY("Nodes")
  56837.    RETURN .T.
  56838. ENDIF   
  56839. LOCAL m.liSelect, m.llSuccess
  56840. m.liSelect = SELECT(0)
  56841. m.llSuccess = .T.
  56842. SELECT Nodes
  56843. SCAN FOR BETWEEN(ObjType,OUTPUTXML_OBJTYPE_NODES,OUTPUTXML_OBJTYPE_NODES+99) ;
  56844.      AND NOT DELETED()
  56845.    IF NOT THIS.VerifyNCName(ObjValue)
  56846.       DELETE
  56847.       m.llSuccess = .F.
  56848.    ENDIF
  56849. ENDSCAN
  56850.                     
  56851. SELECT (m.liSelect)
  56852. RETURN m.llSuccess                    
  56853. ENDPROC
  56854. PROCEDURE verifyattributenames
  56855. * abstract
  56856. ENDPROC
  56857. PROCEDURE nopageeject_assign
  56858. LPARAMETERS m.vNewVal
  56859. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning
  56860.    THIS.NoPageEject = m.vNewVal
  56861. ENDIF   
  56862. ENDPROC
  56863. PROCEDURE loadprocessorobject
  56864. LPARAMETERS m.tcVal
  56865. LOCAL m.loReturn
  56866. m.loReturn = NULL
  56867. IF VARTYPE(m.tcVal) = "C" AND NOT EMPTY(m.tcVal)
  56868.   LOCAL m.loProcessor, m.loStylesheet, m.liSession
  56869.   m.liSession = SET("DATASESSION")
  56870.   THIS.resetDataSession()
  56871.   m.loProcessor  = CREATEOBJECT(OUTPUTXML_XSLT_PROCESSOROBJECT)
  56872.   m.loStyleSheet = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  56873.   THIS.fixMSXMLObjectForDTDs(m.loStyleSheet)
  56874.   SET DATASESSION TO (m.liSession)
  56875.   IF FILE(m.tcVal)
  56876.     m.loStyleSheet.Load(m.tcVal)
  56877.   ELSE
  56878.     * try to load it as a string
  56879.     m.loStyleSheet.LoadXML(m.tcVal)
  56880.   ENDIF
  56881.   IF LEN(m.loStyleSheet.XML) > 0 AND ;
  56882.      EMPTY(m.loStyleSheet.parseError.reason)
  56883.      m.loProcessor.styleSheet = loStyleSheet
  56884.      m.loReturn = m.loProcessor
  56885. *  ELSE     
  56886. *     THIS.LastErrorMessage = loSStyleSheet.parseError.reason
  56887.   ENDIF   
  56888. ENDIF
  56889. RETURN loReturn
  56890. ENDPROC
  56891. PROCEDURE getrawformattinginfo
  56892. LPARAMETERS m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType
  56893. LOCAL m.lcInfo
  56894. m.lcInfo = ""
  56895. m.lcInfo = m.lcInfo + " "+THIS.contAttr+"='"+TRANSFORM(m.tnObjectContinuationType)+"'"
  56896. IF THIS.IncludeFormattingInLayoutObjects
  56897.    m.lcInfo = m.lcInfo + " "+THIS.leftAttr+"='"+ TRANSFORM(m.tnLeft)+"'"
  56898.    m.lcInfo = m.lcInfo + " "+THIS.topAttr+"='"+TRANSFORM(m.tnTop)+"'"
  56899.    m.lcInfo = m.lcInfo + " "+THIS.widthAttr+"='"+TRANSFORM(m.tnWidth)+"'"      
  56900.    m.lcInfo = m.lcInfo + " "+THIS.heightAttr+"='"+TRANSFORM(m.tnHeight)+"'"     
  56901. ENDIF
  56902. THIS.setFRXDataSession()
  56903. m.llPageImages = (NOT EMPTY(THIS.currentPageImageFilename)) ;
  56904.                   AND USED(THIS.memberDataAlias)
  56905. IF THIS.includeDataTypeAttributes  OR m.llPageImages
  56906.    IF USED(THIS.FormattingChanges) AND ;
  56907.       SEEK(RECNO("FRX"),THIS.FormattingChanges,"FRXRecno") 
  56908.       SELECT (THIS.FormattingChanges)                  
  56909.       IF THIS.includeDataTypeAttributes
  56910.          IF EMPTY(DText)
  56911.             m.lcInfo = m.lcInfo + " "+THIS.dataTypeAttr+"='"+DType+"'"            
  56912.          ELSE
  56913.             m.lcInfo = m.lcInfo + " "+THIS.dataTypeAttr+"='"+DType+"'"      
  56914.             m.lcInfo = m.lcInfo + " "+THIS.dataTextAttr+"='"+THIS.xmlRawConv(DText)+"'"     
  56915.          ENDIF      
  56916.       ENDIF
  56917.    ENDIF      
  56918.    IF m.llPageImages AND SEEK(RECNO("FRX"),THIS.memberDataAlias,"FRXRecno")
  56919.       SELECT (THIS.memberDataAlias)
  56920.       LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  56921.                  Type == FRX_BLDR_MEMBERDATATYPE AND ;
  56922.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  56923.                  ExecWhen == FRX_BLDR_ADVPROP_HTML_PAGEIMAGEHREF AND ;
  56924.                  THIS.evaluateStringToBoolean(Execute) 
  56925.       IF FOUND()
  56926.          m.lcInfo = m.lcInfo + " " + THIS.pageImageAttr+"='"+ ;
  56927.                     THIS.currentPageImageFilename +"'"
  56928.       ENDIF
  56929.    ENDIF   
  56930.    SELECT FRX            
  56931. ENDIF   
  56932. RETURN m.lcInfo
  56933. ENDPROC
  56934. PROCEDURE topattr_assign
  56935. LPARAMETERS m.vNewVal
  56936. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56937.    THIS.topAttr = m.vNewVal
  56938. ENDIF   
  56939. ENDPROC
  56940. PROCEDURE leftattr_assign
  56941. LPARAMETERS m.vNewVal
  56942. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56943.    THIS.leftAttr = m.vNewVal
  56944. ENDIF   
  56945. ENDPROC
  56946. PROCEDURE heightattr_assign
  56947. LPARAMETERS m.vNewVal
  56948. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56949.    THIS.heightAttr = m.vNewVal
  56950. ENDIF   
  56951. ENDPROC
  56952. PROCEDURE widthattr_assign
  56953. LPARAMETERS m.vNewVal
  56954. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56955.    THIS.widthAttr = m.vNewVal
  56956. ENDIF   
  56957. ENDPROC
  56958. PROCEDURE contattr_assign
  56959. LPARAMETERS m.vNewVal
  56960. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  56961.    THIS.contAttr = m.vNewVal
  56962. ENDIF   
  56963. ENDPROC
  56964. PROCEDURE getvfprdlcontents
  56965. LPARAMETERS m.tcNodeName, m.tlAsString
  56966. * NB: no push/pop session here, don't bother
  56967. * because we're switching back and forth
  56968. * rapidly and not changing anything important
  56969. LOCAL m.liSelectCurrent, m.liSelectFRX, m.liSession, ;
  56970.       m.liFlds, m.liDBFS, m.liIndex1, m.liIndex2, laFlds[1], ;
  56971.       laDBFS[1], laRels[1], m.lcAlias, m.lcKey, m.llDesc, ;
  56972.       m.lcFilter, m.lcRel, m.liRels, m.lcSkip, m.lcResult, m.llWholePage
  56973. LOCAL m.oXA, m.oXT1, m.oXT2, m.oXT3, m.oXT4, m.oXT5,m.oXT6, ;
  56974.       m.oXML, m.oNode, m.oCommand
  56975. m.liSession = SET("DATASESSION")
  56976. THIS.setFRXDataSession()
  56977. m.liSelectFRX = SELECT(0)
  56978. IF THIS.IncludeDataSourcesInVFPRDL
  56979.    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 )
  56980.    CREATE CURSOR flds (the_alias c(200), the_field m, the_type c(1))
  56981.    CREATE CURSOR rels (the_parent c(200), the_target c(200), the_expr m)
  56982.    SELECT flds
  56983.    INDEX ON the_alias TAG the_alias
  56984.    SELECT rels
  56985.    INDEX ON the_parent TAG the_alias
  56986.    SELECT VFPDataSource
  56987.    SET RELATION TO the_alias INTO flds, the_alias INTO rels
  56988.    THIS.setCurrentDataSession() 
  56989.    m.liSelectCurrent = SELECT(0)
  56990.    m.liDBFS = AUSED(laDBFS) 
  56991.    FOR m.liIndex = 1 TO m.liDBFS
  56992.       THIS.setCurrentDataSession()
  56993.       m.lcAlias = laDBFs[m.liIndex,1]
  56994.       SELECT (m.lcAlias)
  56995.       m.lcDBF = DBF()
  56996.       m.liFlds = AFIELDS(laFlds)
  56997.       m.lcKey = SET("ORDER")
  56998.       m.llDesc =  (" DESC" $ UPPER(m.lcKey))   
  56999.       m.lcFilter = SET("FILTER")
  57000.       m.lcSkip = SET("SKIP")
  57001.       IF NOT EMPTY(m.lcKey)
  57002.          m.lcKey = STRTRAN(UPPER(m.lcKey),"TAG","")
  57003.          m.liIndex2 = ATC(" OF",m.lcKey)
  57004.          IF m.liIndex2 > 0
  57005.             m.lcKey = LEFT(m.lcKey,m.liIndex2)
  57006.          ENDIF
  57007.          m.lcKey = ALLTR(m.lcKey)
  57008.          m.liTag = TAGNO(m.lcKey)
  57009.          IF m.liTag > 0
  57010.             m.lcKey = KEY(m.liTag)
  57011.          ELSE
  57012.             m.lcKey = ""
  57013.          ENDIF
  57014.       ENDIF    
  57015.       m.liRels = 0
  57016.       STORE "" TO laRels
  57017.       DO WHILE .T.
  57018.          m.lcRel = RELATION(m.liRels + 1)
  57019.          IF EMPTY(m.lcRel)
  57020.             EXIT
  57021.          ELSE
  57022.             m.liRels = m.liRels + 1
  57023.             DIME laRels[m.liRels,3]
  57024.             laRels[m.liRels,1] = TARGET(m.liRels)
  57025.             laRels[m.liRels,2] = m.lcRel
  57026.          ENDIF
  57027.       ENDDO
  57028.       THIS.setFRXDataSession()
  57029.       INSERT INTO VFPDataSource VALUES (m.lcAlias, (UPPER(m.lcAlias)==UPPER(THIS.Drivingalias)), m.lcDBF, m.lcKey, m.llDesc, m.lcFilter, m.lcSkip)
  57030.       FOR m.liIndex2 = 1 TO m.liFlds
  57031.          INSERT INTO flds VALUES (m.lcAlias, laFlds[m.liIndex2,1], laFlds[m.liIndex2,2])
  57032.       ENDFOR
  57033.       FOR m.liIndex2 = 1 TO m.liRels
  57034.          INSERT INTO rels VALUES (m.lcAlias, laRels[m.liIndex2,1], laRels[m.liIndex2,2])   
  57035.       ENDFOR
  57036.    ENDFOR
  57037.    THIS.setCurrentDataSession()
  57038.    SELECT (m.liSelectCurrent)
  57039. ENDIF
  57040. THIS.setFRXDataSession()
  57041. m.lcAlias = THIS.prepareFrxCopy()
  57042. m.lcResult = THIS.getFRXLayoutObjectFieldList(m.lcAlias)
  57043. SELECT &lcResult ;
  57044.    FROM (m.lcAlias) ;
  57045.    LEFT JOIN Bands ON &lcAlias..UniqueID = Bands.UniqueID ;
  57046.    LEFT JOIN Objects ON &lcAlias..UniqueID = Objects.UniqueID ;
  57047.    WHERE Platform = FRX_PLATFORM_WINDOWS AND NOT DELETED() ;
  57048.    INTO CURSOR VFPFRXLayoutObject READWRITE
  57049. THIS.removeFRXCopy(m.lcAlias)   
  57050. SELECT VFPFRXLayoutObject
  57051. * get rid of compiled data:
  57052. IF TYPE("VFPFRXLayoutObject.Tag") # "U"
  57053.    REPLACE Tag WITH "" ALL FOR NOT INLIST(ObjType,FRX_OBJTYP_VARIABLE,FRX_OBJTYP_BAND,FRX_OBJTYP_DATAENV ,FRX_OBJTYP_DATAOBJ)
  57054. ENDIF
  57055. IF TYPE("VFPFRXLayoutObject.Tag2") # "U"
  57056.    REPLACE Tag2 WITH "" ALL FOR INLIST(ObjType,FRX_OBJTYP_REPORTHEADER,FRX_OBJTYP_DATAENV,FRX_OBJTYP_DATAOBJ)
  57057. ENDIF
  57058. IF TYPE("VFPFRXLayoutObject.Fontface") # "U"
  57059.    REPLACE Fontface WITH ""  ALL FOR INLIST(ObjType,FRX_OBJTYP_DATAENV,FRX_OBJTYP_DATAOBJ)
  57060. ENDIF   
  57061. GO TOP IN VFPFRXLayoutObject
  57062. m.llWholePage = VFPFRXLayoutObject.Top 
  57063. SELECT Nodes.ObjValue AS Name, ;
  57064.        Nodes.ObjType-OUTPUTXML_OBJTYPE_NODES AS Type, ;
  57065.        Nodes.ObjCode AS Code, ;
  57066.        Nodes.ObjInfo AS Info ;
  57067.     FROM Nodes ;   
  57068.     WHERE BETWEEN(ObjType,OUTPUTXML_OBJTYPE_NODES, OUTPUTXML_OBJTYPE_NODES+100) ;
  57069.     AND NOT DELETED() ;
  57070.     INTO CURSOR VFPFRXLayoutNode READWRITE
  57071. m.liFlds = AMEMBERS(laFlds, THIS,0)
  57072. FOR m.liIndex1 = 1 TO m.liFlds
  57073.    IF ATC("attr",laFlds[m.liIndex1]) > 1
  57074.       INSERT INTO VFPFRXLayoutNode VALUES ;
  57075.         (TRANSFORM(EVALUATE("THIS."+laFlds[m.liIndex1])),;
  57076.          0, ;
  57077.          OUTPUTXML_OBJCODE_ATTRIBMEMBER,;
  57078.          laFlds[m.liIndex1]+ " attribute nodename")
  57079.    ENDIF
  57080. ENDFOR   
  57081. m.oXA=CREATEOBJECT("XMLAdapter")
  57082. m.oXA.RespectCursorCP = .T.
  57083. m.oXT4 = m.oXA.AddTableSchema("VFPFRXLayoutObject")
  57084. m.oXT5 = m.oXA.AddTableSchema("VFPFRXLayoutNode")
  57085. IF USED(THIS.memberDataAlias) AND ;
  57086.    RECCOUNT(THIS.memberDataAlias) > 0
  57087.    m.oXT6 = m.oXA.AddTableSchema(THIS.memberDataAlias,.F.,;
  57088.                                  STRCONV("VFPFRXMemberData",STRCONV_DBCS_UNICODE))
  57089. ENDIF
  57090. m.oXA.RespectNesting=.T.
  57091. IF THIS.IncludeDataSourcesInVFPRDL
  57092.    m.oXT1=oXA.AddTableSchema("VFPDataSource")
  57093.    m.oXT2=oXA.AddTableSchema("flds")
  57094.    m.oXT3=oXA.AddTableSchema("rels")
  57095.    m.oXT1.Nest(m.oXT2)
  57096.    m.oXT1.Nest(m.oXT3)
  57097. ENDIF
  57098. m.oXA.XMLSchemaLocation = ""
  57099. m.oXA.ToXML("lcResult")
  57100. THIS.resetDataSession()
  57101. #IF OUTPUTXML = OUTPUTXML_DOM
  57102.    m.oXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  57103. #ELSE
  57104.    m.oXML = CREATEOBJECT("Microsoft.XMLDOM")
  57105. #ENDIF      
  57106. THIS.setFRXDataSession()
  57107. m.oXML.LoadXML(m.lcResult)
  57108. m.oNode = m.oXML.SelectSingleNode("/./*")
  57109. IF NOT ISNULL(THIS.CommandClauses)
  57110.    m.oCommand = m.oXML.createElement("VFPFRXCommand")
  57111.    m.liFlds = AMEMBERS(laFlds, THIS.CommandClauses)   
  57112.    FOR m.liIndex1 = 1 TO m.liFlds
  57113.        m.lcKey = EVAL("THIS.CommandClauses."+laFlds[m.liIndex1]) 
  57114.        IF VARTYPE(m.lcKey) = "L"
  57115.           IF m.lcKey
  57116.              m.lcKey = "true"
  57117.           ELSE
  57118.              m.lcKey = "false"
  57119.           ENDIF
  57120.        ENDIF
  57121.        m.oCommand.SetAttribute(laFlds[m.liIndex1], TRANSFORM(m.lcKey))
  57122.    ENDFOR
  57123.    m.oCommand.SetAttribute("OutputType",TRANSFORM(THIS.OutputType))
  57124.    m.oCommand.SetAttribute("appName",THIS.appName)
  57125.    m.oCommand.SetAttribute("targetFileName",THIS.targetFileName)
  57126.    m.oNode.appendChild(m.oCommand)
  57127. ENDIF   
  57128. m.oCommand =  oXML.createElement("VFPFRXPrintJob")
  57129. m.oCommand.SetAttribute("pagewidth", THIS.SharedPageWidth)
  57130. m.oCommand.SetAttribute("pageheight", THIS.SharedPageHeight)
  57131. m.oCommand.SetAttribute("name",THIS.PrintJobName)
  57132. m.oCommand.SetAttribute("pagedesign",IIF(llWholePage,"whole","printable"))
  57133.    * if PROMPT was used this will probably work
  57134.    m.oCommand.SetAttribute("printresolution",TRANSFORM(PRTINFO(PRT_YRESOLUTION ,SET("PRINTER",3))))
  57135.    #IF .F. 
  57136.       * OUTPUTXML_RESOLUTIONFIX
  57137.       * try to reset based on current printer FRX information
  57138.       GO (THIS.frxHeaderRecno) IN FRX
  57139.       SELECT FRX
  57140.       m.liIndex = IIF(ALINES(laFlds,Picture,.T.) > 0, ASCAN(laFlds,"YRESOLUTION"),0) 
  57141.       IF m.liIndex = 0
  57142.          m.liIndex = IIF(ALINES(laFlds,Expr,.T.) > 0, ASCAN(laFlds,"YRESOLUTION"),0) 
  57143.       ENDIF
  57144.       IF m.liIndex > 0
  57145.          m.liIndex = VAL(ALLTRIM(SUBSTR(laFlds[liIndex],AT("=",laFlds[m.liIndex])+1)))
  57146.          IF m.liIndex > 0
  57147.             m.oCommand.SetAttribute("printresolution",TRANSFORM(m.liIndex))         
  57148.          ELSE
  57149.             m.oCommand.SetAttribute("printresolution","-1")                  
  57150.          ENDIF
  57151.       ENDIF
  57152.       IF USED("SetPrinter")
  57153.          USE IN SetPrinter
  57154.       ENDIF
  57155.    #ENDIF    
  57156. CATCH WHEN .T.
  57157.    * this can happen when there is no printer
  57158.    m.oCommand.SetAttribute("printresolution","-1") 
  57159. ENDTRY   
  57160. m.oNode.appendChild(m.oCommand)
  57161. IF THIS.IncludeDataSourcesInVFPRDL
  57162.    USE IN VFPDataSource
  57163.    USE IN flds
  57164.    USE IN rels
  57165. ENDIF   
  57166. USE IN VFPFRXLayoutObject
  57167. USE IN VFPFRXLayoutNode
  57168. STORE NULL TO ;
  57169.    m.oXA, m.oXT1, m.oXT2, m.oXT3, m.oXT4, m.oXT5, m.oXT6, m.oXML, m.oCommand
  57170. SELECT (m.liSelectFRX)
  57171. SET DATASESSION TO (m.liSession)
  57172. IF tlAsString
  57173.    RETURN m.oNode.XML
  57174.    RETURN m.oNode
  57175. ENDIF
  57176. ENDPROC
  57177. PROCEDURE includedatasourcesinvfprdl_assign
  57178. LPARAMETERS m.vNewVal
  57179. IF VARTYPE(m.vNewVal) = "L" 
  57180.    THIS.IncludeDataSourcesinVFPRDL = m.vNewVal
  57181. ENDIF   
  57182. ENDPROC
  57183. PROCEDURE getpathedimageinfo
  57184. LPARAMETERS m.tObjType, m.tName, m.tPicture, m.tOffset, m.tPathed
  57185. LOCAL m.lcReturn, m.lcFile
  57186. m.lcReturn = ""
  57187. IF m.tObjType =  FRX_OBJTYP_PICTURE  
  57188.    DO CASE
  57189.    CASE m.tOffset = 0 && literal filename
  57190.       m.lcReturn = STRTRAN(m.tPicture,["],[])
  57191.       IF m.tPathed
  57192.          m.lcReturn = FULLPATH(m.tPicture,THIS.CommandClauses.File)      
  57193.       ELSE
  57194.          m.lcReturn = JUSTFNAME(m.tPicture)
  57195.       ENDIF
  57196.    CASE m.tOffset = 1 && general field
  57197.       m.lcReturn = "["+m.tName+"]"
  57198.    CASE m.tOffset = 2 AND TYPE(m.tName)= "O" && imagecontrol
  57199.       m.lcReturn = "["+m.tName+"]"   
  57200.    CASE m.tOffset = 2 AND TYPE(m.tName) = "C" && expression
  57201.       m.lcFile = EVALUATE(m.tName)
  57202.       IF NOT FILE(m.lcFile)
  57203.          m.lcFile = EVALUATE(STRTRAN(m.tName,"()","")) && indirect
  57204.       ENDIF
  57205.       IF FILE(m.lcFile)
  57206.          IF m.tPathed
  57207.             m.lcReturn = FULLPATH(EVALUATE(m.tName))
  57208.          ELSE
  57209.             m.lcReturn = JUSTFNAME(EVALUATE(m.tName))
  57210.          ENDIF
  57211.       ELSE
  57212.          m.lcReturn =  "["+m.tName+"]" 
  57213.       ENDIF
  57214.    OTHERWISE
  57215.       m.lcReturn = "["+m.tName+"]"
  57216.    ENDCASE
  57217. ENDIF
  57218. m.lcReturn = PADR(CHRTRAN(m.lcReturn,"\","/"), OUTPUTXML_CHARFIELD_LIMIT)
  57219. RETURN m.lcReturn
  57220. ENDPROC
  57221. PROCEDURE applyusertransformtooutput
  57222. DO CASE
  57223. CASE (THIS.applyUserTransform AND NOT ;
  57224.    (ISNULL(THIS.XSLTProcessorUser))) OR ;
  57225.    THIS.applyRDLTransform 
  57226.    LOCAL m.lvProcessor
  57227.    * THIS.SaveTargetFileName is real
  57228.    * THIS.TargetFileName is TMP
  57229.    IF THIS.xmlMode = OUTPUTXML_RDL_ONLY
  57230.       m.lvProcessor = THIS.XSLTProcessorRDL
  57231.    ELSE
  57232.       m.lvProcessor = THIS.XSLTProcessorUser
  57233.    ENDIF   
  57234.    IF NOT EMPTY(SYS(2000,THIS.SaveTargetFileName))
  57235.       ERASE (THIS.SaveTargetFileName) NORECYCLE
  57236.    ENDIF
  57237.    *&* Sedna change to ensure better encoding behavior
  57238.    *&* See notes in .ApplyXSLT method
  57239.    STRTOFILE(THIS.ApplyXSLT(THIS.TargetFileName,m.lvProcessor, THIS.XSLTParameters), ;
  57240.              THIS.SaveTargetFileName)
  57241.    ERASE (THIS.TargetFileName) NORECYCLE
  57242.    THIS.TargetFileName = THIS.SaveTargetFileName
  57243.    RETURN .T.
  57244. CASE THIS.applyUserTransform && no processor but public property is still set
  57245.    IF NOT EMPTY(SYS(2000,THIS.SaveTargetFileName))
  57246.       ERASE (THIS.SaveTargetFileName) NORECYCLE
  57247.    ENDIF
  57248.    COPY FILE (THIS.TargetFileName) TO (THIS.SaveTargetFileName)
  57249.    ERASE (THIS.TargetFileName) NORECYCLE
  57250.    THIS.TargetFileName = THIS.SaveTargetFileName
  57251.    RETURN .F.  
  57252. OTHERWISE
  57253.    RETURN .F. 
  57254. ENDCASE
  57255. ENDPROC
  57256. PROCEDURE applyusertransform_assign
  57257. LPARAMETERS m.vNewVal
  57258. IF VARTYPE(m.vNewVal) = "L" AND NOT THIS.IsRunning
  57259.    THIS.applyUserTransform = m.vNewVal
  57260.    IF THIS.applyUserTransform AND ;
  57261.       (ISNULL(THIS.XSLTProcessorUser))
  57262.       THIS.GetDefaultUserXSLT()
  57263.    ENDIF   
  57264. ENDIF   
  57265. ENDPROC
  57266. PROCEDURE getdefaultuserxslt
  57267. ** this is an abstract method for use by subclasses
  57268. ENDPROC
  57269. PROCEDURE setdomformattinginfo
  57270. LPARAMETERS m.toNode, m.tnLeft, m.tnTop, m.tnWidth,m.tnHeight, m.tnObjectContinuationType
  57271. m.toNode.SetAttribute(THIS.ContAttr,TRANSFORM(m.tnObjectContinuationType))                  
  57272. IF THIS.IncludeFormattingInLayoutObjects
  57273.    m.toNode.SetAttribute(THIS.LeftAttr,TRANSFORM(m.tnLeft))
  57274.    m.toNode.SetAttribute(THIS.TopAttr,TRANSFORM(m.tnTop))
  57275.    m.toNode.SetAttribute(THIS.WidthAttr,TRANSFORM(m.tnWidth))             
  57276.    m.toNode.SetAttribute(THIS.HeightAttr,TRANSFORM(m.tnHeight))
  57277. ENDIF
  57278. LOCAL  m.llPageImages
  57279. THIS.setFRXDataSession()
  57280. m.llPageImages = (NOT EMPTY(THIS.currentPageImageFilename)) ;
  57281.                   AND USED(THIS.memberDataAlias)
  57282. IF THIS.includeDataTypeAttributes OR m.llPageImages
  57283.    IF USED(THIS.FormattingChanges) AND ;
  57284.       SEEK(RECNO("FRX"),THIS.FormattingChanges,"FRXRecno") 
  57285.       SELECT (THIS.FormattingChanges)    
  57286.       IF THIS.includeDataTypeAttributes                  
  57287.          IF EMPTY(DText)
  57288.             m.toNode.SetAttribute(THIS.dataTypeAttr,DType)
  57289.          ELSE
  57290.             m.toNode.SetAttribute(THIS.dataTypeAttr,DType)
  57291.             m.toNode.SetAttribute(THIS.dataTextAttr,DText)
  57292.          ENDIF      
  57293.       ENDIF
  57294.    ENDIF    
  57295.    IF m.llPageImages AND SEEK(RECNO("FRX"),THIS.memberDataAlias,"FRXRecno")
  57296.       SELECT (THIS.memberDataAlias)
  57297.       LOCATE FOR FRXRecno = RECNO("FRX") AND ;
  57298.                  Type == FRX_BLDR_MEMBERDATATYPE AND ;
  57299.                  Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS AND ;
  57300.                  ExecWhen == FRX_BLDR_ADVPROP_HTML_PAGEIMAGEHREF AND ;
  57301.                  INLIST(UPPER(Execute),"YES",".T.","TRUE","1") 
  57302.       IF FOUND()
  57303.          m.toNode.SetAttribute(THIS.pageImageAttr,;
  57304.                                THIS.currentPageImageFileName)
  57305.       ENDIF      
  57306.    ENDIF
  57307.    SELECT FRX              
  57308. ENDIF   
  57309. ENDPROC
  57310. PROCEDURE synchxsltprocessoruser
  57311. IF THIS.applyUserTransform AND NOT ISNULL(THIS.XSLTProcessorUser)
  57312.    THIS.XSLTProcessorUser = NULL
  57313.    THIS.applyUserTransform = .T. && kickstart
  57314. ENDIF 
  57315. ENDPROC
  57316. PROCEDURE insertxmlconfigrecords
  57317. * protected,
  57318. * assumes it is being called with config
  57319. * table already SELECTed.
  57320.    DELETE FOR ;
  57321.       BETWEEN(OBJTYPE,OUTPUTXML_OBJTYPE_NODES, OUTPUTXML_OBJTYPE_NODES + 100)
  57322.    INSERT INTO (ALIAS()) VALUES ;
  57323.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57324.       FRX_OBJCOD_TITLE,'','Title','Title Band nodename')
  57325.    INSERT INTO (ALIAS()) VALUES ;
  57326.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND,;
  57327.       FRX_OBJCOD_PAGEHEADER,'','PH','Page Header Band nodename')
  57328.    INSERT INTO (ALIAS()) VALUES ;
  57329.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND,;
  57330.       FRX_OBJCOD_COLHEADER,'','CH','Column Header Band nodename')
  57331.    INSERT INTO (ALIAS()) VALUES ;
  57332.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND,;
  57333.       FRX_OBJCOD_GROUPHEADER,'','GH','Group Header Band nodename')
  57334.    INSERT INTO (ALIAS()) VALUES ;
  57335.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57336.       FRX_OBJCOD_DETAIL,'','D','Detail Band nodename')
  57337.    INSERT INTO (ALIAS()) VALUES ;
  57338.     (OUTPUTXML_OBJTYPE_NODES+FRX_OBJTYP_BAND, ;
  57339.       FRX_OBJCOD_GROUPFOOTER,'','GF','Group Footer Band nodename')
  57340.    INSERT INTO (ALIAS()) VALUES ;
  57341.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57342.       FRX_OBJCOD_COLFOOTER,'','CF','Column Footer Band nodename')
  57343.    INSERT INTO (ALIAS()) VALUES ;
  57344.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57345.       FRX_OBJCOD_PAGEFOOTER,'','PF','Page Footer Band nodename')
  57346.    INSERT INTO (ALIAS()) VALUES ;
  57347.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57348.       FRX_OBJCOD_SUMMARY,'','Summary','Summary Band nodename')
  57349.    INSERT INTO (ALIAS()) VALUES ;
  57350.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57351.       FRX_OBJCOD_DETAILHEADER,'','DH','Detail Header Band nodename')
  57352.    INSERT INTO (ALIAS()) VALUES ;
  57353.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND, ;
  57354.       FRX_OBJCOD_DETAILFOOTER,'','DF','Detail Footer Band nodename')
  57355.    INSERT INTO (ALIAS()) VALUES ;
  57356.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER,;
  57357.       FRX_OBJCOD_REPORTHEADER ,'','VFP-Report','Report root nodename')
  57358.    INSERT INTO (ALIAS()) VALUES ;
  57359.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_LABEL, ;
  57360.       FRX_OBJCOD_OTHER,'','T','Text object nodename')
  57361.    INSERT INTO (ALIAS()) VALUES ;
  57362.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_FIELD, ;
  57363.       FRX_OBJCOD_OTHER,'','E','Expression object nodename')
  57364.    INSERT INTO (ALIAS()) VALUES ;
  57365.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_PICTURE,;
  57366.       FRX_OBJCOD_OTHER,'','P','Picture object nodename')
  57367.    INSERT INTO (ALIAS()) VALUES ;
  57368.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_RECTANGLE,;
  57369.       FRX_OBJCOD_RECTANGLE,'','S','Shape object nodename')
  57370.    INSERT INTO (ALIAS()) VALUES ;
  57371.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_LINE, ;
  57372.       FRX_OBJCOD_OTHER,'','L','Line object nodename')
  57373.    INSERT INTO (ALIAS()) VALUES ;
  57374.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_VARIABLE,;
  57375.       FRX_OBJCOD_OTHER,'','V','Variable nodename')
  57376.    INSERT INTO (ALIAS()) VALUES ;
  57377.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_FONTRES,;
  57378.       FRX_OBJCOD_OTHER,'','FontRes','FontResource nodename')
  57379.    INSERT INTO (ALIAS()) VALUES ;
  57380.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_DATAENV,;
  57381.       FRX_OBJCOD_OTHER,'','DataEnv','DataEnvironment nodename')
  57382.    INSERT INTO (ALIAS()) VALUES ;
  57383.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_DATAOBJ,;
  57384.       FRX_OBJCOD_OTHER,'','DE-Cursor','DE-Cursor nodename')
  57385.    INSERT INTO (ALIAS()) VALUES ;
  57386.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_DATAOBJ, ;
  57387.       FRX_OBJCOD_OTHER+1,'','DE-Relation','DE-Relation nodename')
  57388.      * offset the DE Relation because
  57389.      * this information isn't in ObjType or ObjCode
  57390.      * as distinct from DE-Cursor other than in the Name field
  57391.    INSERT INTO (ALIAS()) VALUES ;
  57392.     (OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_GROUP, ;
  57393.       FRX_OBJCOD_OTHER,'','Group','Group selector nodename')
  57394.    INSERT INTO (ALIAS()) VALUES ;
  57395.     (OUTPUTXML_OBJTYPE_NODES, ;
  57396.      OUTPUTXML_OBJCODE_DOC,'','Reports','XML Document root nodename')
  57397.    INSERT INTO (ALIAS()) VALUES ;
  57398.     (OUTPUTXML_OBJTYPE_NODES,;
  57399.      OUTPUTXML_OBJCODE_DATA,'','Data','Report scope data root nodename')
  57400.    INSERT INTO (ALIAS()) VALUES ;
  57401.     (OUTPUTXML_OBJTYPE_NODES, ;
  57402.      OUTPUTXML_OBJCODE_RDL,'','VFP-RDL','RDL layout description root nodename')
  57403.    INSERT INTO (ALIAS()) VALUES ;
  57404.     (OUTPUTXML_OBJTYPE_NODES, ;
  57405.      OUTPUTXML_OBJCODE_PAGES,'','Pages','Pages collection root nodename')
  57406.    INSERT INTO (ALIAS()) VALUES ;
  57407.     (OUTPUTXML_OBJTYPE_NODES, ;
  57408.      OUTPUTXML_OBJCODE_COLS,'','Columns','Column collection root nodename')
  57409.    *&* Sedna     
  57410.    INSERT INTO (ALIAS()) VALUES ;
  57411.     (OUTPUTXML_OBJTYPE_NODES, ;
  57412.      OUTPUTXML_OBJCODE_RUN,'','Run','Run property set root nodename')
  57413. ENDPROC
  57414. PROCEDURE xsltparameters_assign
  57415. LPARAMETERS m.vNewVal
  57416. DO CASE
  57417. CASE VARTYPE(m.vNewVal) = "X"
  57418.   THIS.XSLTParameters= NULL
  57419. CASE VARTYPE(m.vNewVal) = "O" 
  57420.    TRY
  57421.      IF UPPER(m.vNewVal.BaseClass) == "COLLECTION" 
  57422.        THIS.XSLTParameters = m.vNewVal
  57423.      ENDIF
  57424.    CATCH 
  57425.    ENDTRY
  57426. OTHERWISE
  57427.   THIS.XSLTParameters= NULL
  57428. ENDCASE
  57429. ENDPROC
  57430. PROCEDURE getfrxlayoutobjectfieldlist
  57431. LPARAMETERS m.tcAlias
  57432. * frx
  57433. * PLATFORM,UNIQUEID,TIMESTAMP,OBJTYPE,OBJCODE,NAME,EXPR,VPOS,HPOS,HEIGHT,WIDTH,STYLE,
  57434. * PICTURE,ORDER,UNIQUE,COMMENT,ENVIRON,BOXCHAR,FILLCHAR,TAG,TAG2,PENRED,PENGREEN,PENBLUE,
  57435. * FILLRED,FILLGREEN,FILLBLUE,PENSIZE,PENPAT,FILLPAT,FONTFACE,FONTSTYLE,FONTSIZE,MODE,RULER,
  57436. * 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
  57437. * objects
  57438. * 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
  57439. * bands
  57440. * UNIQUEID,OBJTYPE,OBJCODE,EXPR,BANDLABEL,START,STOP,HEIGHT,P_START,P_STOP,P_HEIGHT,RESETTOTAL,BAND_SEQ,REL_BAND_ID
  57441. RETURN ;
  57442.        "RECNO() AS FrxRecno, "+m.tcAlias+".PLATFORM, "+m.tcAlias+".NAME,"+m.tcAlias+".EXPR,"+m.tcAlias+".OFFSET,"+m.tcAlias+".VPOS,"+m.tcAlias+".HPOS,"+m.tcAlias+".HEIGHT,"+;
  57443.        ""+m.tcAlias+".OBJTYPE, "+m.tcAlias+".TAG, "+m.tcAlias+".TAG2,"+m.tcAlias+".PENSIZE,"+m.tcAlias+".PENPAT,"+m.tcAlias+".FILLPAT,"+;
  57444.        ""+m.tcAlias+".WIDTH,"+m.tcAlias+".STYLE,"+m.tcAlias+".PICTURE,"+m.tcAlias+".ORDER,"+m.tcAlias+".COMMENT,"+m.tcAlias+".FILLCHAR,"+;       
  57445.        ""+m.tcAlias+".PENRED,"+m.tcAlias+".PENGREEN,"+m.tcAlias+".PENBLUE,"+m.tcAlias+".FILLRED,"+m.tcAlias+".FILLGREEN,"+m.tcAlias+".FILLBLUE,"+;
  57446.        ""+m.tcAlias+".FONTFACE, "+m.tcAlias+".FONTSTYLE,"+m.tcAlias+".FONTSIZE,"+m.tcAlias+".MODE,"+m.tcAlias+".FLOAT,"+m.tcAlias+".STRETCH,"+m.tcAlias+".STRETCHTOP,"+; 
  57447.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 0 ) AS FontBold,"+ ;
  57448.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 1 ) AS FontItalic,"+ ;
  57449.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 3 ) AS FontUnderline,"+ ;
  57450.        "BITTEST( "+m.tcAlias+".FONTSTYLE, 7 ) AS FontStrikeThrough,"+ ;
  57451.        "THIS.GetPathedImageInfo("+m.tcAlias+".ObjType, "+m.tcAlias+".Name, "+m.tcAlias+".Picture, "+m.tcAlias+".Offset) AS UnpathedImg,"+ ;       
  57452.        "THIS.GetPathedImageInfo("+m.tcAlias+".ObjType, "+m.tcAlias+".Name, "+m.tcAlias+".Picture, "+m.tcAlias+".Offset, .T.) AS PathedImg,"+ ;
  57453.        ""+m.tcAlias+".TOP,"+m.tcAlias+".BOTTOM,"+m.tcAlias+".NOREPEAT,"+m.tcAlias+".PAGEBREAK,"+m.tcAlias+".COLBREAK,"+m.tcAlias+".RESETPAGE,"+m.tcAlias+".GENERAL,"+m.tcAlias+".SPACING,"+ ;
  57454.        ""+m.tcAlias+".SWAPHEADER,"+m.tcAlias+".SWAPFOOTER,"+m.tcAlias+".EJECTBEFOR,"+m.tcAlias+".EJECTAFTER,"+m.tcAlias+".TOTALTYPE,"+m.tcAlias+".RESETTOTAL,"+ ;
  57455.        "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,"+ ;
  57456.        "OBJECTS.UniqueID AS ObjID, OBJECTS.ObjName, Objects.Locale_ID,"+ ;
  57457.        "OBJECTS.START_BAND_ID,OBJECTS.BAND_OFFSET,OBJECTS.END_BAND_ID,"+ ;
  57458.        "BANDS.UNIQUEID AS BandID,BANDS.OBJCODE AS BandType,Bands.BANDLABEL,Bands.START,"+;
  57459.        "Bands.STOP,Bands.BAND_SEQ,Bands.REL_BAND_ID, ("+m.tcAlias+".ObjType=9 AND (NOT "+m.tcAlias+".Plain)) AS BandStretch"
  57460. ENDPROC
  57461. PROCEDURE preparefrxcopy
  57462. LOCAL m.lcAlias, m.lcFile
  57463. m.lcAlias = "FRX"
  57464. IF EMPTY(SYS(2000,THIS.CommandClauses.File)) AND ;
  57465.    USED("FRX")
  57466.    *&* streamlined in Sedna leveraging new superclass capabilities.   
  57467.    m.lcFile = THIS.prepareFRXSwapCopy(JUSTPATH(THIS.targetFileName),.T.)
  57468.    m.lcAlias = JUSTSTEM(m.lcFile)   
  57469.    * prepareFRXSwapCopy defines the file name suitably for the
  57470.    * above JUSTSTEM() evaluation -> alias to work all the time.
  57471.    SELECT FRX
  57472. ENDIF
  57473. RETURN m.lcAlias
  57474. ENDPROC
  57475. PROCEDURE removefrxcopy
  57476. LPARAMETERS m.tcAlias
  57477. LOCAL m.lcFile
  57478. IF m.tcAlias # "FRX"
  57479.    m.lcFile = DBF(m.tcAlias)
  57480.    USE IN (m.tcAlias)
  57481.    * streamlined in Sedna using
  57482.    * new superclass feature
  57483.    THIS.removeFRXSwapCopy(m.lcFile) 
  57484. ENDIF      
  57485. ENDPROC
  57486. PROCEDURE adjustxsltparameter
  57487. LPARAMETERS m.tvValue, m.tsKey, m.tlRemoveOnly
  57488. LOCAL m.liIndex, m.liSession
  57489. IF ISNULL(THIS.XSLTParameters) AND NOT m.tlRemoveOnly
  57490.    m.liSession = SET("DATASESSION")
  57491.    THIS.resetDataSession()
  57492.    THIS.XSLTParameters = CREATEOBJECT("Collection")
  57493.    SET DATASESSION TO (m.liSession)
  57494. ENDIF
  57495. IF NOT ISNULL(THIS.XSLTParameters)
  57496.    WITH THIS.XSLTParameters
  57497.       FOR m.liIndex = 1 TO .COUNT
  57498.           IF .GETKEY(m.liIndex) == m.tsKey
  57499.              .REMOVE(m.liIndex)
  57500.              EXIT
  57501.           ENDIF
  57502.       NEXT
  57503.       IF NOT (m.tlRemoveOnly)
  57504.          .ADD(m.tvValue,m.tsKey)
  57505.       ENDIF
  57506.    ENDWITH   
  57507. ENDIF
  57508. ENDPROC
  57509. PROCEDURE getrunnodecontents
  57510. LPARAMETERS m.tlAsString
  57511. LOCAL m.lcItem, m.oXML, m.lvValue, m.liSession
  57512. THIS.setFRXDataSession()
  57513. m.lcItem =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ OUTPUTXML_OBJCODE_RUN , ;
  57514.                       "Nodes","FrxNodes"), ;
  57515.                        Nodes.ObjValue, ;
  57516.                       OUTPUTXML_GOOFTAG)               
  57517.                
  57518. * Handles Cursor, Empty object, Collection
  57519. * Raw or dom method.
  57520. m.lcItem = "<"  + m.lcItem + "/>"
  57521. m.liSession = SET("DATASESSION")
  57522. THIS.resetDataSession()
  57523. #IF OUTPUTXML = OUTPUTXML_DOM
  57524.    m.oXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  57525. #ELSE
  57526.    m.oXML = CREATEOBJECT("Microsoft.XMLDOM")
  57527. #ENDIF      
  57528. SET DATASESSION TO (m.liSession)
  57529. IF m.oXML.LoadXML(m.lcItem)
  57530.    THIS.setCurrentDataSession()
  57531.    DO CASE 
  57532.    CASE ISNULL(THIS.runCollector)
  57533.       m.oXML = NULL
  57534.    CASE VARTYPE(THIS.runCollector) = "C" 
  57535.       IF NOT (USED(THIS.runCollector) AND ;
  57536.               RECCOUNT(THIS.runCollector) > 0)
  57537.          * try FRX datasession
  57538.          THIS.setFRXDataSession()
  57539.       ENDIF        
  57540.       IF (USED(THIS.runCollector) AND ;
  57541.               RECCOUNT(THIS.runCollector) > 0)
  57542.          * two fields significant, first evaluates to property value, 
  57543.          * second is property name
  57544.          LOCAL m.lcField1, m.lcField2, m.liIndex, m.liSelect
  57545.          m.liSelect = SELECT(0)
  57546.          SELECT (THIS.runCollector)
  57547.          FOR m.liIndex = 1 TO FCOUNT()
  57548.              IF INLIST(TYPE(FIELD(m.liIndex)),"M","C")
  57549.                 IF EMPTY(m.lcField1)
  57550.                    m.lcField1 = FIELD(m.liIndex)
  57551.                 ELSE
  57552.                    m.lcField2 = FIELD(m.liIndex)
  57553.                    EXIT
  57554.                 ENDIF
  57555.              ENDIF
  57556.          ENDFOR
  57557.          IF (EMPTY(m.lcField1))
  57558.             m.oXML = NULL
  57559.          ELSE
  57560.             SCAN ALL FOR NOT DELETED()
  57561.                THIS.addRunNode(m.oXML,EVAL(m.lcField1),;
  57562.                             IIF(EMPTY(m.lcField2) OR EMPTY(EVAL(m.lcField2)), ;
  57563.                      "P" + TRANSFORM(RECNO()), EVAL(m.lcField2)))
  57564.             ENDSCAN
  57565.          ENDIF
  57566.       ENDIF         
  57567.       SELECT (m.liSelect)      
  57568.    CASE VARTYPE(THIS.runCollector) = "O" AND ;
  57569.        TYPE("THIS.runCollector.Baseclass") = "U"
  57570.          * empty object
  57571.        LOCAL m.liIndex, m.laMembers[1]
  57572.        IF AMEMBERS(m.laMembers,THIS.runCollector) = 0
  57573.           m.oXML = NULL
  57574.        ELSE
  57575.           FOR m.liIndex = 1 TO ALEN(m.laMembers)
  57576.              THIS.addRunNode(m.oXML,;
  57577.                              "THIS.runCollector." + m.laMembers[m.liIndex], ;
  57578.                              m.laMembers[m.liIndex])
  57579.           ENDFOR
  57580.        ENDIF          
  57581.    CASE VARTYPE(THIS.runCollector) = "O" AND ;
  57582.       UPPER(THIS.runCollector.BaseClass) == "COLLECTION"
  57583.       LOCAL m.liIndex
  57584.       IF THIS.runCollector.Count = 0
  57585.          m.oXML = NULL
  57586.       ELSE
  57587.          FOR m.liIndex = 1 TO THIS.runCollector.Count
  57588.             THIS.addRunNode(m.oXML,"THIS.runCollector[" + TRANSFORM(m.liIndex) + "]",;
  57589.                             IIF(EMPTY(THIS.runCollector.getKey[m.liIndex]), ;
  57590.                                 "P" + TRANSFORM(m.liIndex), ;
  57591.                                 THIS.runCollector.getKey[m.liIndex] ))
  57592.          ENDFOR
  57593.          
  57594.       ENDIF         
  57595.    OTHERWISE
  57596.       m.oXML = NULL
  57597.    ENDCASE      
  57598.    THIS.setFRXDataSession()
  57599.    DO CASE
  57600.    CASE ISNULL(m.oXML)
  57601.       RETURN NULL
  57602.    CASE m.tlAsString
  57603.       RETURN m.oXML.DocumentElement.XML   
  57604.    OTHERWISE
  57605.       RETURN m.oXML.DocumentElement
  57606.    ENDCASE
  57607.    RETURN NULL
  57608. ENDIF      
  57609. ENDPROC
  57610. PROCEDURE addrunnode
  57611. LPARAMETERS m.oXML, m.tvValueExpr, m.tcPropertyName
  57612. LOCAL m.oNode, m.vValue
  57613. m.oNode = m.oXML.createElement("property")
  57614. m.oNode.setAttribute("id",m.tcPropertyName)
  57615. m.vValue = THIS.evaluateUserExpression(m.tvValueExpr)
  57616. IF TYPE("m.vValue.XML") = "C" && xmlnode
  57617.    m.oNode.appendChild(m.vValue)
  57618.    m.oNode.Text = TRANSFORM(m.vValue)
  57619. ENDIF
  57620. m.vValue = NULL
  57621. m.oXML.DocumentElement.appendChild(m.oNode)
  57622. m.oNode = NULL
  57623. ENDPROC
  57624. PROCEDURE includedatatypeattributes_assign
  57625. LPARAMETERS m.tvNewVal
  57626. IF VARTYPE(m.tvNewVal) = "L"
  57627.    THIS.includeDataTypeAttributes = m.tvNewVal
  57628. ENDIF   
  57629. ENDPROC
  57630. PROCEDURE datatypeattr_assign
  57631. LPARAMETERS m.vNewVal
  57632. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  57633.    THIS.dataTypeAttr = m.vNewVal
  57634. ENDIF   
  57635. ENDPROC
  57636. PROCEDURE datatextattr_assign
  57637. LPARAMETERS m.vNewVal
  57638. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  57639.    THIS.dataTextAttr = m.vNewVal
  57640. ENDIF   
  57641. ENDPROC
  57642. PROCEDURE initializeformattingchangescursor
  57643. THIS.formattingChanges= "F"+SYS(2015)
  57644. IF THIS.includeDataTypeAttributes 
  57645.    CREATE CURSOR (THIS.formattingChanges) ;
  57646.              (FRXRecno i, ;
  57647.               DText M, ;
  57648.               DType C(1))
  57649. ENDIF 
  57650. ENDPROC
  57651. PROCEDURE formatdatavalue
  57652. LPARAMETERS m.tVal
  57653. IF INLIST(VARTYPE(m.tVal),"D","T")
  57654.    RETURN TTOC(m.tVal,3) 
  57655.    * a subclass could do more here
  57656.    RETURN TRANSFORM(m.tVal)
  57657. ENDIF
  57658. ENDPROC
  57659. PROCEDURE pageimageattr_assign
  57660. LPARAMETERS vNewVal
  57661. IF (NOT THIS.IsRunning) AND THIS.VerifyNCName(m.vNewVal)
  57662.    THIS.pageImageAttr = m.vNewVal
  57663. ENDIF   
  57664. ENDPROC
  57665. PROCEDURE evaluatestringtoboolean
  57666. LPARAMETERS tcVal
  57667. RETURN INLIST(UPPER(m.tcVal),"YES",".T.","TRUE","1")         
  57668. ENDPROC
  57669. PROCEDURE applyrdltransform_access
  57670. RETURN (THIS.XMLMode = OUTPUTXML_RDL_ONLY AND ;
  57671.        (NOT ISNULL(THIS.xsltProcessorRdl )))
  57672. ENDPROC
  57673. PROCEDURE fixmsxmlobjectfordtds
  57674. LPARAMETERS m.toXML
  57675. IF VARTYPE(m.toXML) = "O"
  57676.   TRY
  57677.      WITH m.toXML
  57678.         .validateOnParse = .F.
  57679.         .resolveExternals = .F.
  57680.         .setProperty("ProhibitDTD",.F.)
  57681.      ENDWITH
  57682.    CATCH WHEN .T. && Swallow any errors.
  57683.      *&* This fix primarily benefits
  57684.      *&* external usees of the ApplyXSLT public method;
  57685.      *&* it does not affect standard/automatic
  57686.      *&* usage of ApplyXSLT to VFP-RDL XML files.
  57687.      *&* It allows people to use the ApplyXSLT method
  57688.      *&* more flexibly when transforming XML data
  57689.      *&* between two schemas (standard B2B requirement).
  57690.      *&* However, the "ProhibitDTD" property
  57691.      *&* is not supported by the original 2003 msxml4.dll
  57692.      *&* distribution file.
  57693.      *&* The property will exist, and 
  57694.      *&* the behavior will be supported, if the user has
  57695.      *&* applied fixes and updates to MSXML as is usually
  57696.      *&* the case.
  57697.      *&* If the msxml4.dll file has been deployed using
  57698.      *&* an MSM supplied with VFP as part of a distribution
  57699.      *&* setup to a Vista machine, rather than as part of 
  57700.      *&* normal OS files in pre-Vista environments, this
  57701.      *&* may *not* be the case.
  57702.      *&* For information about updates and patches 
  57703.      *&* to msxml4.dll, 
  57704.      *&* see http://www.microsoft.com/downloads/details.aspx?FamilyID=24b7d141-6cdf-4fc4-a91b-6f18fe6921d4&DisplayLang=en#Instructions
  57705.      *&* Vulnerabilities in Microsoft XML Core Services 4.0 Could Allow Remote Code Execution (927978)
  57706.      *&* Note that msxml4.dll is a side-by-side installation file and 
  57707.      *&* the update will fail to occur properly if the DLL is currently locked
  57708.      *&* because an application is, or has been, using it.  This would including
  57709.      *&* loading VFP.
  57710.      *&* For instructions regarding "locked" file that may cause installation to fail
  57711.      *&* and how to get around it, see http://support.microsoft.com/?kbid=927978
  57712.      *&* To ensure that the updates have been applied, check the current date
  57713.      *&* of the msxml4.dll file in %windir%/system32 directory.
  57714.      *&* At this writing (Sedna development timeframe), the date of msxml4.dll is 11/2006.
  57715.    ENDTRY
  57716. ENDIF
  57717. ENDPROC
  57718. PROCEDURE frxcharsetsinuse
  57719. LPARAMETERS tcAlias
  57720. LOCAL m.liSession, m.liSelect, m.liTally, m.liRec, m.lcAlias, m.llSwitchSessions
  57721. IF VARTYPE(tcAlias) # "C" OR EMPTY(tcAlias) OR UPPER(ALLTRIM(tcAlias)) == "FRX"
  57722.    m.lcAlias = "FRX"
  57723.    m.llSwitchSessions = .T.
  57724.    m.lcAlias = ALLTRIM(tcAlias)
  57725. ENDIF   
  57726. m.liTally = 0
  57727. IF THIS.FRXDataSession > -1 AND m.llSwitchSessions
  57728.    m.liSession = SET("DATASESSION")
  57729.    THIS.setFRXDataSession()
  57730.    m.liSession = -1   
  57731. ENDIF   
  57732. IF USED(m.lcAlias)
  57733.    m.liSelect = SELECT(0)
  57734.    m.liRec = RECNO(m.lcAlias)
  57735.    SELECT (m.lcAlias)
  57736.    COUNT ALL FOR INLIST(ObjType,;
  57737.                         FRX_OBJTYP_LABEL,;
  57738.                         FRX_OBJTYP_FIELD) AND ;
  57739.                   Double AND Resoid # 1 ;
  57740.          TO m.liTally            
  57741.          *&* RESOID=1 indicates use of default locale, treat this like no charset indication
  57742.          *&* do not pay attention to header value, just text labels and expressions,
  57743.          *&* because the header value doesn't propagate to existing controls (even at designtime)
  57744.          *&* -- it just indicates the default for new objects.        
  57745.          *&* If you adjusted the FRX contents at runtime with new 
  57746.          *&* text controls, you might want to pay attention to the contents
  57747.          *&* of the header RESOID and DOUBLE values, though -- just as the design-time
  57748.          *&* components do.
  57749.   IF m.liRec > RECCOUNT()
  57750.      GO BOTTOM
  57751.      SKIP
  57752.   ELSE
  57753.      GO m.liRec
  57754.   ENDIF                   
  57755.   SELECT (m.liSelect)
  57756. ENDIF
  57757. IF m.liSession > -1
  57758.    SET DATASESSION TO (m.liSession)
  57759. ENDIF
  57760. RETURN (m.liTally > 0)
  57761. ENDPROC
  57762. PROCEDURE resetcallevaluatecontents
  57763. IF (THIS.CallEvaluateContents # LISTENER_CALLDYNAMICMETHOD_ALWAYS) AND ;
  57764.    THIS.includeDataTypeAttributes AND ;
  57765.    (THIS.xmlMode #  OUTPUTXML_RDL_ONLY)
  57766.    THIS.CallEvaluateContents = LISTENER_CALLDYNAMICMETHOD_ALWAYS
  57767. ENDIF
  57768. ENDPROC
  57769. PROCEDURE closetargetfile
  57770. LOCAL m.llResetQuietMode
  57771. m.llResetQuietMode =  ;
  57772.  ((NOT THIS.HadError) AND (NOT THIS.QuietMode) AND  ;
  57773.   (THIS.applyUserTransform OR THIS.applyRDLTransform ))
  57774. IF m.llResetQuietMode
  57775.    THIS.QuietMode = .T.
  57776. ENDIF
  57777. DODEFAULT()
  57778. IF m.llResetQuietMode
  57779.    THIS.QuietMode = .F.
  57780. ENDIF      
  57781. ENDPROC
  57782. PROCEDURE setfrxdatasessionenvironment
  57783. DODEFAULT()
  57784. SET EXACT ON
  57785. SET SYSFORMATS ON
  57786. SET CENTURY ON
  57787. SET SAFETY OFF
  57788. ENDPROC
  57789. PROCEDURE opentargetfile
  57790. #IF OUTPUTXML = OUTPUTXML_DOM
  57791.    THIS.VerifyTargetFile() 
  57792.    THIS.TargetHandle = 0
  57793.    RETURN (NOT THIS.HadError)
  57794. #ELSE
  57795.    RETURN DODEFAULT()   
  57796. #ENDIF
  57797. ENDPROC
  57798. PROCEDURE AfterBand
  57799. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  57800. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  57801. IF THIS.InvokeOnCurrentPass() AND ;
  57802.    THIS.Targethandle > -1 
  57803.    LOCAL m.lcBand, m.loNode, m.lcID, m.lcIDRef, ;
  57804.          m.llFormatBreakBand, m.loObjects, m.llOmitBand
  57805.    THIS.SetFRXDataSession()   
  57806.    m.lcBand =  IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+FRX_OBJTYP_BAND+ ;
  57807.                     OUTPUTXML_OBJTYPE_BANDOFFSET+nBandObjCode,;
  57808.                     "Nodes","FrxNodes"),;
  57809.                     Nodes.ObjValue, ;
  57810.                     OUTPUTXML_GOOFTAG)
  57811.                     
  57812.    GO m.nFRXRecNo IN FRX
  57813.    IF NOT THIS.IncludeBandsWithNoObjects 
  57814.       m.loObjects = THIS.FRXCursor.GetObjectsInBand(FRX.UniqueID,.F.,THIS.FRXDataSession)
  57815.       IF loObjects.Count = 0
  57816.           m.llOmitBand = .T.
  57817.       ENDIF
  57818.       m.loObjects = NULL
  57819.    ENDIF   
  57820.    THIS.SetCurrentDataSession()
  57821.       
  57822.    m.llFormatBreakBand = INLIST(m.nBandObjCode,;
  57823.                     FRX_OBJCOD_PAGEHEADER, ;
  57824.                     FRX_OBJCOD_PAGEFOOTER, ;
  57825.                     FRX_OBJCOD_COLHEADER, ;
  57826.                     FRX_OBJCOD_COLFOOTER)                 
  57827.                     
  57828.    * first evaluate THIS.IncludeBreaksInData 
  57829.    DO CASE
  57830.    CASE m.llOmitBand = .T.
  57831.       * nothing
  57832.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_INDATA OR ;
  57833.         NOT m.llFormatBreakBand   
  57834.       #IF OUTPUTXML = OUTPUTXML_RAW
  57835.          
  57836.          IF EMPTY(NVL(THIS.CurrentBand,"")) 
  57837.            * see continuation discussion in Render.
  57838.            * our fix there may have left us with
  57839.            * no band here
  57840.            * do nothing
  57841.          ELSE
  57842.          
  57843.             THIS.CurrentBand = NVL(THIS.CurrentBand,"") + ;
  57844.                THIS.XMLRawTag( m.lcBand, .F., m.lcID, m.lcIDRef ) 
  57845.             IF NOT (ISNULL(THIS.CurrentBand) OR EMPTY(THIS.CurrentBand))
  57846.                THIS.WriteRaw(THIS.CurrentBand)
  57847.                THIS.CurrentBand = ""
  57848.             ENDIF
  57849.          ENDIF    
  57850.                
  57851.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET                       
  57852.       #ELSE
  57853.          * nothing to do here when using the DOM
  57854.          THIS.CurrentBand = NULL
  57855.       #ENDIF
  57856.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION
  57857.       * build the collection which will be inserted into the
  57858.       * data before finishing.
  57859.       * but the band output at this point is .F.
  57860.       #IF OUTPUTXML = OUTPUTXML_RAW
  57861.           IF INLIST( m.nBandObjCode, ;
  57862.                  FRX_OBJCOD_PAGEHEADER, ;
  57863.                  FRX_OBJCOD_PAGEFOOTER) 
  57864.              THIS.CurrentPage = NVL(THIS.CurrentPage,"")
  57865.              THIS.CurrentPage = THIS.CurrentPage +  ;
  57866.                                THIS.XMLRawTag( m.lcBand, .F., m.lcID, m.lcIDRef ) 
  57867.              THIS.PageNodes = THIS.PageNodes + THIS.CurrentPage
  57868.              THIS.CurrentPage = NULL
  57869.           ELSE
  57870.              THIS.CurrentColumn = NVL(THIS.CurrentColumn,"")
  57871.              THIS.CurrentColumn = THIS.CurrentColumn + ;
  57872.                                 THIS.XMLRawTag( m.lcBand, .F., m.lcID, m.lcIDRef ) 
  57873.              THIS.ColumnNodes = THIS.ColumnNodes + THIS.CurrentColumn
  57874.              THIS.CurrentColumn = NULL
  57875.           ENDIF
  57876.           
  57877.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET 
  57878.       
  57879.       #ELSE
  57880.       
  57881.           * we leave THIS.CurrentBand alone in this case,
  57882.           * to use after the band has finished.
  57883.           IF INLIST( nBandObjCode, ;
  57884.                  FRX_OBJCOD_PAGEHEADER, ;
  57885.                  FRX_OBJCOD_PAGEFOOTER) 
  57886.              THIS.CurrentPage = NULL
  57887.           ELSE
  57888.              THIS.CurrentColumn = NULL
  57889.           ENDIF
  57890.           
  57891.       #ENDIF
  57892.    CASE INLIST( m.nBandObjCode, ;
  57893.                  FRX_OBJCOD_COLHEADER, ;
  57894.                  FRX_OBJCOD_COLFOOTER)   && XMLBREAKS_NONE and column band
  57895.        THIS.CurrentColumn = NULL
  57896.    OTHERWISE  && XMLBREAKS_NONE and page band
  57897.        THIS.CurrentPage = NULL
  57898.    ENDCASE
  57899.    THIS.resetDataSession()
  57900. ENDIF
  57901. IF INLIST(m.nBandObjCode,FRX_OBJCOD_PAGEFOOTER, FRX_OBJCOD_TITLE) 
  57902.    THIS.includePage = .F.
  57903. ENDIF
  57904. ENDPROC
  57905. PROCEDURE Destroy
  57906. DODEFAULT()
  57907. THIS.ResetDocument()
  57908. STORE NULL TO ;
  57909.    THIS.ColumnNodes, ;
  57910.    THIS.CurrentBand, ;
  57911.    THIS.CurrentColumn, ;
  57912.    THIS.CurrentDocument, ;
  57913.    THIS.CurrentPage, ;
  57914.    THIS.DataNodes, ;
  57915.    THIS.pageNodes, ;
  57916.    THIS.XSLTProcessorRDL, ;
  57917.    THIS.XSLTProcessorUser, ;
  57918.    THIS.xsltParameters 
  57919. ENDPROC
  57920. PROCEDURE createconfigtable
  57921. LPARAMETERS m.tcDBF, m.tlOverWrite
  57922. * table is being created from scratch,
  57923. * may be in a VCX in an unknown environment
  57924. * (definitely not in REPORTOUTPUT.APP!)
  57925. DODEFAULT(m.tcDBF, m.tlOverWrite)
  57926. IF NOT THIS.HadError
  57927.    LOCAL m.liSelect, m.llSafetyOn
  57928.    m.llSafetyOn = (SET("SAFETY") = "ON")
  57929.    SET SAFETY OFF
  57930.    m.liSelect = SELECT(0)
  57931.    SELECT 0
  57932.    USE (m.tcDBF) EXCLU  
  57933.    INDEX ON ObjType+ObjCode+ ;
  57934.       IIF(ObjType=FRX_OBJTYP_BAND+OUTPUTXML_OBJTYPE_NODES, ;
  57935.           OUTPUTXML_OBJTYPE_BANDOFFSET,0) ;
  57936.       TAG FRXNodes  
  57937.    IF m.llSafetyOn
  57938.       SET SAFETY ON
  57939.    ENDIF   
  57940.    THIS.InsertXMLConfigRecords()   
  57941.    USE
  57942.    SELECT (m.liSelect)
  57943. ENDIF   
  57944. ENDPROC
  57945. PROCEDURE Init
  57946. THIS.ReadConfiguration = OUTPUTCLASS_READCONFIG_INIT
  57947. IF DODEFAULT()
  57948.    THIS.AppName = OUTPUTXML_APPNAME_LOC
  57949.    THIS.ResetDocument()
  57950.    RETURN .F.   
  57951. ENDIF
  57952. IF THIS.applyUserTransform
  57953.    THIS.GetDefaultUserXSLT()
  57954. ENDIF   
  57955. RETURN NOT THIS.HadError
  57956. ENDPROC
  57957. PROCEDURE AfterReport
  57958. LPARAMETERS tlCalledEarly
  57959. THIS.SetFRXDataSession()
  57960. IF THIS.TargetHandle > -1 AND NOT (THIS.HadError )
  57961.     THIS.fillRunCollector()
  57962.    #IF OUTPUTXML = OUTPUTXML_RAW
  57963.        LOCAL m.lcNode
  57964.        IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY 
  57965.         
  57966.           IF  NOT EMPTY(NVL(THIS.CurrentBand,""))
  57967.              m.lcNode = SUBSTR(THIS.CurrentBand,2,AT(" ", THIS.CurrentBand)-2)
  57968.              THIS.CurrentBand = THIS.CurrentBand + THIS.XMLRawTag(m.lcNode)
  57969.              * write a closing tag
  57970.              THIS.WriteRaw(THIS.CurrentBand)
  57971.           ENDIF
  57972.           IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION 
  57973.              IF NOT ISNULL(THIS.PageNodes)
  57974.                  lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+OUTPUTXML_OBJCODE_PAGES,;
  57975.                              "Nodes","FrxNodes"), ;
  57976.                            Nodes.ObjValue, ;
  57977.                            OUTPUTXML_GOOFTAG)
  57978.                  THIS.WriteRaw(THIS.PageNodes) 
  57979.                  THIS.WriteRaw(THIS.XMLRawTag(m.lcNode))                  
  57980.              ENDIF
  57981.              IF NOT ISNULL(THIS.ColumnNodes)
  57982.                 m.lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+OUTPUTXML_OBJCODE_COLS,;
  57983.                              "Nodes","FrxNodes"), ;
  57984.                            Nodes.ObjValue, ;
  57985.                            OUTPUTXML_GOOFTAG)
  57986.                  THIS.WriteRaw(THIS.ColumnNodes) 
  57987.                  THIS.WriteRaw(THIS.XMLRawTag(m.lcNode))                                   
  57988.              ENDIF
  57989.           ENDIF          
  57990.         
  57991.           m.lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+OUTPUTXML_OBJCODE_DATA,;
  57992.                         "Nodes","FrxNodes"), ;
  57993.                       Nodes.ObjValue, ;
  57994.                       OUTPUTXML_GOOFTAG)
  57995.        
  57996.           THIS.WriteRaw( THIS.XMLRawTag(m.lcNode))
  57997.        ENDIF
  57998.         
  57999.        m.lcNode = THIS.getRunNodeContents(.T.)
  58000.        
  58001.        IF NOT (ISNULL(lcNode) OR EMPTY(lcNode))
  58002.           THIS.WriteRaw(lcNode)
  58003.        ENDIF             
  58004.        m.lcNode =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER, ;
  58005.                            "Nodes","ObjType"), ;
  58006.                             Nodes.ObjValue, ;
  58007.                             OUTPUTXML_GOOFTAG)               
  58008.        THIS.WriteRaw( THIS.XMLRawTag(m.lcNode))    
  58009.        * check to see if continuation... 
  58010.        IF NOT OUTPUTXML_CONTINUATION
  58011.           THIS.WriteRaw( THIS.XMLRawTag(THIS.CurrentDocument))          
  58012.        ENDIF
  58013.    #ELIF OUTPUTXML = OUTPUTXML_DOTNET     
  58014.       * XMLTextWriter work
  58015.    #ELSE
  58016.        LOCAL m.loNode
  58017.        * domwork here        
  58018.        IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION
  58019.           * currently all this is done on entry, but
  58020.           * if not:
  58021.           * append the pages collection
  58022.           * into the report data node --
  58023.           * that's where we should be right now
  58024.           * THIS.DataNodes.AppendChild(THIS.PageNodes)
  58025.           ** IF NOT ISNULL(THIS.ColumnNodes)
  58026.           * THIS.DataNodes.AppendChild(THIS.ColumnNodes)             
  58027.           ** ENDIF
  58028.        ENDIF
  58029.        
  58030.        m.loNode = THIS.getRunNodeContents()
  58031.        
  58032.        IF NOT ISNULL(m.loNode)
  58033.           THIS.DataNodes.ParentNode.AppendChild(m.loNode)
  58034.        ENDIF             
  58035.        IF NOT OUTPUTXML_CONTINUATION
  58036.           THIS.CurrentDocument.Save(THIS.TargetFileName)
  58037.        ENDIF
  58038.        m.loNode = NULL
  58039.     #ENDIF
  58040. ENDIF
  58041. IF OUTPUTXML_CONTINUATION
  58042.    IF THIS.runCollectorResetLevel = OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT 
  58043.       THIS.resetRunCollector()       
  58044.    ENDIF
  58045.    THIS.ResetReport()   
  58046.    IF THIS.runCollectorResetLevel > OUTPUTFX_RUNCOLLECTOR_RESET_NEVER 
  58047.       THIS.resetRunCollector()       
  58048.    ENDIF
  58049.    THIS.ResetDocument()     
  58050.    IF (NOT tlCalledEarly) AND ;
  58051.       (THIS.applyUserTransform OR ;
  58052.        THIS.applyRDLTransform)
  58053.       THIS.ApplyUserTransformToOutput()
  58054.       IF (NOT THIS.HadError)
  58055.          * we suppressed this message earlier when closing the target file,
  58056.          * which is just an intermediary format in this case:
  58057.          * IF THIS.DoMessage( OUTPUTCLASS_SUCCESS_LOC + ;
  58058.                         IIF(SYS(2024)="Y",CHR(13)+OUTPUTCLASS_REPORT_INCOMPLETE_LOC,""),;
  58059.                         MB_ICONINFORMATION + MB_YESNO ) = IDYES
  58060.          *   _CLIPTEXT = THIS.TargetFileName
  58061.          * ENDIF
  58062.       ENDIF   
  58063.    ENDIF   
  58064. ENDIF
  58065. THIS.resetDataSession()   
  58066. IF (NOT tlCalledEarly)
  58067.    DODEFAULT()
  58068. ENDIF
  58069. ENDPROC
  58070. PROCEDURE Error
  58071. LPARAMETERS m.nError, m.cMethod, m.nLine
  58072.    DODEFAULT(m.nError,m.cMethod,m.nLine)
  58073.    * we could evaluate errors first, but generally,
  58074.    THIS.CloseTargetFile()
  58075.    IF THIS.isRunning
  58076.       THIS.QuietMode = .T.
  58077.    ENDIF   
  58078.    THIS.CancelReport()
  58079. ENDPROC
  58080. PROCEDURE Render
  58081. LPARAMETERS m.nFRXRecNo, m.nLeft,m.nTop,m.nWidth,m.nHeight, ;
  58082.             m.nObjectContinuationType, m.cContentsToBeRendered, m.GDIPlusImage
  58083. IF NOT ISNULL(THIS.successorGFXNoRender)
  58084.    * XML Output and descendents respect norendering properties
  58085.    * as successors, evaluating them individually since the conditions
  58086.    * might apply only to some output types
  58087.    IF THIS.successorGFXNoRender.applyFX(THIS,"RENDER",m.nFRXRecNo, m.nLeft) = ;
  58088.        OUTPUTFX_BASERENDER_NORENDER
  58089.        RETURN OUTPUTFX_BASERENDER_NORENDER
  58090.    ENDIF                
  58091. ENDIF
  58092. IF (DODEFAULT(m.nFRXRecNo, @m.nLeft,@m.nTop,@m.nWidth,@m.nHeight, ;
  58093.               @m.nObjectContinuationType, @m.cContentsToBeRendered, @m.GDIPlusImage) # ;
  58094.               OUTPUTFX_BASERENDER_NORENDER) AND ;
  58095.    THIS.InvokeOnCurrentPass() AND ;
  58096.    THIS.Targethandle > -1 
  58097.    * also evaluate THIS.IncludeBreaksInData and 
  58098.    * the band for the object in question.
  58099.    * If the stars align, create the node for the object here.  For now:
  58100.    LOCAL m.lcNode, m.loNode, m.lcFormattingInfo, m.lcContents,  ;
  58101.          m.llTextType, m.loBandRef, m.liBandRecno, m.lcID
  58102.    THIS.SetFRXDataSession()
  58103.    GO m.nFRXRecNo IN FRX
  58104.    m.lcContents = m.cContentsToBeRendered
  58105.    m.llTextType = INLIST(FRX.ObjType,  FRX_OBJTYP_LABEL, FRX_OBJTYP_FIELD)
  58106.    m.lcID = TRANSFORM(m.nFRXRecNo)
  58107.    IF INLIST(m.nObjectContinuationType, ;
  58108.              LISTENER_CONTINUATION_MIDDLE, ;
  58109.              LISTENER_CONTINUATION_END)
  58110.       m.lcID = m.lcID + "+"
  58111.    ENDIF
  58112.       
  58113.    IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION ;
  58114.       OR (ISNULL(THIS.CurrentPage) AND ISNULL(THIS.CurrentColumn))
  58115.       m.lcNode =   IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+FRX.ObjType,"Nodes","ObjType"), ;
  58116.                      Nodes.ObjValue,;
  58117.                      OUTPUTXML_GOOFTAG)
  58118.                   
  58119.       #IF OUTPUTXML = OUTPUTXML_RAW
  58120.           m.lcFormattingInfo = THIS.GetRawFormattingInfo( m.nLeft, m.nTop, m.nWidth,m.nHeight, m.nObjectContinuationType)
  58121.           THIS.setFRXDataSession()          
  58122.           IF m.llTextType
  58123.              * build 1515: render gets unicode
  58124.              m.lcContents = STRCONV(TRANSFORM(m.lcContents),STRCONV_UNICODE_UTF8)
  58125.           ELSE
  58126.              m.lcContents = TRANSFORM(m.lcContents)  
  58127.           ENDIF
  58128.           DO CASE
  58129.           CASE NOT ISNULL(THIS.CurrentPage)
  58130.              THIS.CurrentPage = THIS.CurrentPage +  ;
  58131.                  THIS.XMLRawNode( ;
  58132.                  m.lcNode, ;
  58133.                  m.lcContents, ;
  58134.                  m.lcID,.F.,m.lcFormattingInfo) && FRX.UniqueID
  58135.           CASE NOT ISNULL(THIS.CurrentColumn)
  58136.              THIS.CurrentColumn = THIS.CurrentColumn +  ;
  58137.                  THIS.XMLRawNode( ;
  58138.                  m.lcNode, ;
  58139.                  m.lcContents, ;
  58140.                  m.lcID,.F.,m.lcFormattingInfo) 
  58141.           OTHERWISE 
  58142.              * write directly to the stream
  58143.              * First, take care of continuation.
  58144.              IF EMPTY(NVL(THIS.CurrentBand,""))
  58145.                 * first object in a continued band
  58146.                  IF ISNULL(THIS.FRXCursor)
  58147.                     m.liBandRecno = 0
  58148.                  ELSE
  58149.                     m.loBandRef =  THIS.FRXCursor.GetBandFor(FRX.UniqueID, .T.,THIS.FRXDataSession)
  58150.                     SELECT FRX
  58151.                     LOCATE FOR UniqueID == loBandRef.UniqueID
  58152.                     IF EOF()
  58153.                        m.liBandRecno = 0
  58154.                     ELSE
  58155.                        m.liBandRecno = RECNO()
  58156.                     ENDIF
  58157.                  ENDIF
  58158.                  IF m.liBandRecno = 0
  58159.                     THIS.CurrentBand = THIS.XMLRawTag(OUTPUTXML_GOOFTAG, .T.,;
  58160.                                   "0",TRANSFORM(IIF(THIS.sharedPageNo = 0, THIS.PageNo, THIS.sharedPageNo)) )
  58161.                  ELSE
  58162.                     THIS.SetCurrentDataSession()
  58163.                     THIS.BeforeBand(FRX_OBJCOD_DETAIL,m.liBandRecno, .T.)
  58164.                     THIS.SetFRXDataSession()
  58165.                  ENDIF                 
  58166.                  THIS.CurrentBand = THIS.CurrentBand + ;
  58167.                       THIS.XMLRawNode( ;
  58168.                        m.lcNode, ;
  58169.                        m.lcContents, ;
  58170.                        m.lcID,.F.,m.lcFormattingInfo) 
  58171.                 IF EOF()      
  58172.                    THIS.WriteRaw(THIS.CurrentBand + ;
  58173.                                 THIS.XMLRawTag(OUTPUTXML_GOOFTAG))
  58174.                    THIS.CurrentBand = ""               
  58175.                 ENDIF
  58176.                 GO m.nFRXRecNo IN FRX
  58177.              ELSE      
  58178.                 THIS.CurrentBand = THIS.CurrentBand + ;
  58179.                      THIS.XMLRawNode( ;
  58180.                       m.lcNode, ;
  58181.                       m.lcContents, ;
  58182.                       m.lcID,.F., m.lcFormattingInfo) 
  58183.              ENDIF
  58184.              
  58185.           ENDCASE
  58186.      
  58187.       #ELIF OUTPUTXML =  OUTPUTXML_DOTNET
  58188.           * XMLTextWriter work
  58189.       #ELSE      
  58190.           * if continuation type is of type 2 or 3
  58191.           * and we're in a text type object
  58192.           * we have to create a new
  58193.           * continued band node as if a BeforeBand event has occurred.         
  58194.           THIS.setFRXDataSession()
  58195.           IF ISNULL(THIS.CurrentBand)
  58196.              * first object in a continued band
  58197.              IF ISNULL(THIS.FRXcursor)
  58198.                 m.liBandRecno = 0
  58199.              ELSE
  58200.                 m.loBandRef =  THIS.FRXCursor.GetBandFor(FRX.UniqueID, .T., THIS.FRXDataSession)
  58201.                 SELECT FRX
  58202.                 LOCATE FOR UniqueID == m.loBandRef.UniqueID
  58203.                 m.liBandRecno = RECNO()
  58204.              ENDIF
  58205.              THIS.SetCurrentDataSession()
  58206.              IF EOF()
  58207.                  THIS.BeforeBand(FRX_OBJCOD_DETAIL,1, .T.)
  58208.              ELSE
  58209.                  THIS.BeforeBand(FRX_OBJCOD_DETAIL,m.liBandRecno, .T.)
  58210.              ENDIF
  58211.              THIS.SetFRXDataSession()
  58212.              GO m.nFRXRecNo IN FRX
  58213.           ENDIF
  58214.           m.loNode = THIS.CurrentDocument.CreateElement(m.lcNode)          
  58215.           m.lcContents = TRANSFORM(m.lcContents)            
  58216.           * build 1515: render gets unicode, and is already regionally transformed          
  58217.           * EXCEPT if it's a filename for an image, in which case it's DBCS          
  58218.           IF m.llTextType 
  58219.              m.loNode.Text = CREATEBINARY(m.lcContents)          
  58220.           ELSE
  58221.              m.loNode.Text = m.lcContents          
  58222.           ENDIF             
  58223.           m.loNode.SetAttribute(THIS.IdAttribute,m.lcID)
  58224.           THIS.SetDOMFormattingInfo( m.loNode, m.nLeft, m.nTop, m.nWidth,m.nHeight, m.nObjectContinuationType)
  58225.           DO CASE
  58226.           CASE NOT ISNULL(THIS.CurrentPage)
  58227.              THIS.CurrentPage.AppendChild(m.loNode)          
  58228.           CASE NOT ISNULL(THIS.CurrentColumn)
  58229.              THIS.CurrentColumn.AppendChild(m.loNode)          
  58230.           OTHERWISE
  58231.              THIS.CurrentBand.AppendChild(m.loNode)                     
  58232.           ENDCASE
  58233.           m.loNode = NULL
  58234.        #ENDIF
  58235.    ELSE
  58236.       * otherwise object belongs to a formatting header or footer
  58237.       * and we're not processing them (XMLBREAKS_NONE)
  58238.    ENDIF                   
  58239.    THIS.resetDataSession()
  58240. ENDIF
  58241. RETURN  
  58242. ENDPROC
  58243. PROCEDURE BeforeBand
  58244. LPARAMETERS m.nBandObjCode, m.nFRXRecNo, m.tlContinuedBand
  58245. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  58246. IF INLIST(m.nBandObjCode,FRX_OBJCOD_PAGEHEADER, FRX_OBJCOD_TITLE,FRX_OBJCOD_SUMMARY) 
  58247.    THIS.includePage =  THIS.IncludePageInOutput(_PAGENO)
  58248.    *(THIS.PageNo >= THIS.CommandClauses.RangeFrom) AND ;
  58249.    *    ((THIS.CommandClauses.RangeTo = -1) OR (THIS.PageNo <= THIS.CommandClauses.RangeTo))
  58250.    * possibly to be adapted later:
  58251.    * regardless of whether IncludePageInOutput() is used
  58252.    * or the manual evaluation above (commented) is used,
  58253.    * _PAGENO will work for continued reports only if NORESET is not used.
  58254.    * THIS.PageNo/THIS.SharedPageNo will not work whether NORESET is used or not,
  58255.    * for continued reports, 
  58256.    * unless you maintain a private offset.  RANGE is
  58257.    * sensitive to the current REPORT FORM command, not the full
  58258.    * NOPAGEEJECT (chained) run
  58259. ENDIF
  58260. IF THIS.InvokeOnCurrentPass() AND ;
  58261.   THIS.Targethandle > -1 
  58262.    LOCAL m.lcBand, m.loNode, m.lcID, m.lcIDRef, ;
  58263.          m.llFormatBreakBand, m.lcInterruptedBand,;
  58264.          m.llOmitBand, m.loObjects
  58265.    THIS.SetFRXDataSession()   
  58266.    GO m.nFRXRecNo IN FRX   
  58267.    IF NOT THIS.IncludeBandsWithNoObjects 
  58268.       m.loObjects = THIS.FRXCursor.GetObjectsInBand(FRX.UniqueID,.F.,THIS.FRXDataSession)
  58269.       IF m.loObjects.Count = 0
  58270.           m.llOmitBand = .T.
  58271.       ENDIF
  58272.       m.loObjects = NULL
  58273.    ENDIF   
  58274.       
  58275.    m.lcBand =  IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_BAND+ ;
  58276.                     OUTPUTXML_OBJTYPE_BANDOFFSET+nBandObjCode,;
  58277.                     "Nodes","FrxNodes"),;
  58278.                     Nodes.ObjValue, ;
  58279.                     OUTPUTXML_GOOFTAG)
  58280.    THIS.SetCurrentDataSession()
  58281.                     
  58282.    m.llFormatBreakBand = INLIST(nBandObjCode,;
  58283.                     FRX_OBJCOD_PAGEHEADER, ;
  58284.                     FRX_OBJCOD_PAGEFOOTER, ;
  58285.                     FRX_OBJCOD_COLHEADER, ;
  58286.                     FRX_OBJCOD_COLFOOTER)                 
  58287.                     
  58288.    IF m.llFormatBreakBand
  58289.       m.lcIDRef =  TRANSFORM(m.nFRXRecNo) && TRANSFORM(IIF(EMPTY(FRX.UniqueID),"",FRX.UniqueID))
  58290.       m.lcID = TRANSFORM(IIF(THIS.sharedPageNo = 0, THIS.PageNo, THIS.sharedPageNo))
  58291.          
  58292.    ELSE
  58293.       m.lcID =  TRANSFORM(m.nFRXRecNo) && TRANSFORM(IIF(EMPTY(FRX.UniqueID),"",FRX.UniqueID) )
  58294.       IF m.tlContinuedBand
  58295.          m.lcID = m.lcID + "+"
  58296.       ENDIF
  58297.       m.lcIDRef = TRANSFORM(IIF(THIS.sharedPageNo = 0, THIS.PageNo, THIS.sharedPageNo))
  58298.       
  58299.    ENDIF
  58300.    * first evaluate THIS.IncludeBreaksInData 
  58301.    DO CASE
  58302.    CASE m.llOmitBand
  58303.       * do nothing -- TBD checked later.
  58304.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_INDATA OR ;
  58305.         NOT m.llFormatBreakBand   
  58306.       #IF OUTPUTXML = OUTPUTXML_RAW
  58307.          IF NOT (ISNULL(THIS.CurrentBand) OR EMPTY(THIS.CurrentBand))
  58308.              * a data band has spanned
  58309.              * formatting breaks (pages or columns)
  58310.              * and we haven't otherwise caught it.
  58311.              * This should not happen.
  58312.              m.lcInterruptedBand = SUBSTR(ALLTR(THIS.CurrentBand),2,AT(" ", THIS.CurrentBand)-2)
  58313.              * write a closing tag
  58314.              THIS.WriteRaw(THIS.CurrentBand + THIS.XMLRawTag(m.lcInterruptedBand))
  58315.          ENDIF
  58316.          
  58317.       
  58318.         THIS.CurrentBand =  THIS.XMLRawTag( m.lcBand,.T., m.lcID, m.lcIDRef ) 
  58319.                
  58320.       
  58321.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET                       
  58322.       #ELSE
  58323.           m.loNode = THIS.CurrentDocument.CreateElement(m.lcBand)
  58324.           m.loNode.SetAttribute(THIS.idAttribute,m.lcID)
  58325.           m.loNode.SetAttribute(THIS.idrefAttribute,m.lcIDRef)
  58326.           THIS.DataNodes.AppendChild(m.loNode)
  58327.           THIS.CurrentBand = m.loNode                                    
  58328.           m.loNull = NULL
  58329.       #ENDIF
  58330.    CASE THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION
  58331.       * build the collection which will be inserted into the
  58332.       * data before finishing.
  58333.       * but the band output at this point is .F.
  58334.       #IF OUTPUTXML = OUTPUTXML_RAW
  58335.           IF INLIST( m.nBandObjCode, ;
  58336.                  FRX_OBJCOD_PAGEHEADER, ;
  58337.                  FRX_OBJCOD_PAGEFOOTER) 
  58338.              THIS.CurrentPage = NVL(THIS.CurrentPage,"")
  58339.              THIS.CurrentPage = THIS.CurrentPage + ;
  58340.                                 THIS.XMLRawTag( m.lcBand, .T.,m.lcID, m.lcIDRef ) 
  58341.           ELSE
  58342.              THIS.CurrentColumn = NVL(THIS.CurrentColumn,"")
  58343.              THIS.CurrentColumn = THIS.CurrentColumn + ;
  58344.                                   THIS.XMLRawTag( m.lcBand, .T., m.lcID, m.lcIDRef ) 
  58345.           ENDIF
  58346.           
  58347.          
  58348.       #ELIF OUTPUTXML = OUTPUTXML_DOTNET 
  58349.       
  58350.       #ELSE
  58351.       
  58352.           * we leave THIS.CurrentBand alone in this case,
  58353.           * to use after the band has finished.
  58354.           IF INLIST( m.nBandObjCode, ;
  58355.                  FRX_OBJCOD_PAGEHEADER, ;
  58356.                  FRX_OBJCOD_PAGEFOOTER) 
  58357.              THIS.CurrentPage = THIS.CurrentDocument.CreateElement(m.lcBand)
  58358.              THIS.CurrentPage.SetAttribute(THIS.idAttribute,m.lcID)
  58359.              THIS.CurrentPage.SetAttribute(THIS.idrefAttribute,m.lcIDRef)
  58360.              THIS.PageNodes.AppendChild(THIS.CurrentPage)
  58361.           ELSE
  58362.              THIS.CurrentColumn = THIS.CurrentDocument.CreateElement(m.lcBand)
  58363.              THIS.CurrentColumn.SetAttribute(THIS.idAttribute,m.lcID)
  58364.              THIS.CurrentColumn.SetAttribute(THIS.idrefAttribute,m.lcIDRef)
  58365.              THIS.ColumnNodes.AppendChild(THIS.CurrentColumn)
  58366.           ENDIF
  58367.           
  58368.       #ENDIF
  58369.    CASE INLIST( m.nBandObjCode, ;
  58370.                  FRX_OBJCOD_COLHEADER, ;
  58371.                  FRX_OBJCOD_COLFOOTER)   && XMLBREAKS_NONE and column band
  58372.       THIS.CurrentColumn = "X"
  58373.    OTHERWISE  && XMLBREAKS_NONE and page band
  58374.       THIS.CurrentPage = "X"
  58375.    ENDCASE
  58376.    THIS.resetDataSession()
  58377. ENDIF
  58378. ENDPROC
  58379. PROCEDURE BeforeReport
  58380. DODEFAULT()
  58381. IF (NOT THIS.HadError) 
  58382.    THIS.SetFRXDataSession()
  58383.    IF THIS.isSuccessor 
  58384.       * need a private norender object
  58385.       * to handle potential rendering tests
  58386.       * specific to this output type     
  58387.       THIS.successorGFXNoRender = ;
  58388.            THIS.checkCollectionForSpecifiedMember(;
  58389.            THIS.gfxNoRenderClass,;
  58390.            THIS.gfxNoRenderClassLib,.T.,.T.)           
  58391.    ENDIF
  58392.    IF USED("FRX")
  58393.       LOCAL m.liSelect, m.lcDocument, m.lcReport, ;
  58394.             m.lcRDL, m.lcPage, m.lcCol, m.lcData, m.loNode, m.loParent
  58395.       m.liSelect = SELECT(0)
  58396.       SELECT FRX
  58397.       IF THIS.TargetHandle = -1 AND ;
  58398.          (THIS.applyUserTransform OR ;
  58399.           THIS.applyRDLTransform)
  58400.          THIS.verifyTargetFile()      
  58401.          IF EMPTY(JUSTEXT(THIS.TargetFileName))
  58402.             THIS.TargetFileName = FORCEEXT(THIS.TargetFileName,THIS.TargetFileExt)
  58403.          ENDIF   
  58404.          THIS.AddProperty("SaveTargetFileName",THIS.TargetFileName)
  58405.          THIS.TargetFileName = FORCEEXT(THIS.TargetFileName,"TMP")
  58406.       ENDIF
  58407.          
  58408.       IF (THIS.TargetHandle > -1 OR THIS.OpenTargetFile())  
  58409.          IF NOT USED("Nodes")
  58410.             IF  UPPER(FULLPATH(THIS.ConfigurationTable)) == ;
  58411.                 UPPER(FULLPATH(FORCEEXT(OUTPUTCLASS_INTERNALDBF,"DBF")))
  58412.                 USE (THIS.ConfigurationTable) AGAIN IN 0  ;
  58413.                    NOUPDATE ALIAS Nodes SHARED
  58414.             ELSE       
  58415.                 USE (THIS.ConfigurationTable) AGAIN IN 0  ;
  58416.                    ALIAS Nodes SHARED
  58417.                 THIS.VerifyNodeNames()
  58418.                 THIs.VerifyAttributeNames()
  58419.             ENDIF
  58420.          ENDIF
  58421.             
  58422.          * create helper object
  58423.          * create band and object cursors   
  58424.          * we may want to evaluate raw mode
  58425.          * as well as THIS.XMLMode to see if these are needed:
  58426.          IF (NOT (THIS.IncludeBandsWithNoObjects AND  ;
  58427.             THIS.XMLMode = OUTPUTXML_DATA_ONLY) ) && OR OUTPUTXML_PERFORMLOCALECONVERSION 
  58428.             THIS.LoadFRXCursor = .T.               
  58429.             IF ISNULL(THIS.FRXCursor) OR ;
  58430.                (NOT THIS.FRXCursor.CreateObjectCursor("FRX", "OBJECTS", .F., .T. ,THIS.FRXDataSession)) && force the load and make sure
  58431.                                                          && we have access to runtime
  58432.                                                          && version of the cursor
  58433.                THIS.IncludeBandsWithNoObjects = .T.
  58434.             ELSE
  58435.                SELECT Bands                  
  58436.                IF TAGNO("UniqueID") = 0
  58437.                   INDEX ON UniqueID TAG UniqueID
  58438.                ENDIF
  58439.                SET ORDER TO 0                  
  58440.                SELECT Objects
  58441.                IF TAGNO("UniqueID") = 0
  58442.                   INDEX ON UniqueID TAG UniqueID
  58443.                ENDIF
  58444.                SET ORDER TO 0
  58445.             ENDIF   
  58446.          ENDIF   
  58447.          
  58448.          THIS.IsRunning = .T.               
  58449.          SET ORDER TO 0 IN FRX            
  58450.          m.lcDocument =  IIF(SEEK(OUTPUTXML_OBJTYPE_NODES+ ;
  58451.                               OUTPUTXML_OBJCODE_DOC,;
  58452.                               "Nodes","FrxNodes"), ;
  58453.                               Nodes.ObjValue, ;
  58454.                             OUTPUTXML_GOOFTAG)
  58455.          m.lcReport =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER, ;
  58456.                             "Nodes","ObjType"), ;
  58457.                              Nodes.ObjValue, ;
  58458.                              OUTPUTXML_GOOFTAG)               
  58459.          IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY 
  58460.             m.lcData =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ ;
  58461.                                  OUTPUTXML_OBJCODE_DATA, ;
  58462.                                 "Nodes","FrxNodes"), ;
  58463.                                  Nodes.ObjValue, ;
  58464.                                  OUTPUTXML_GOOFTAG)
  58465.          ENDIF
  58466.          IF NOT THIS.XMLMode = OUTPUTXML_DATA_ONLY 
  58467.             m.lcRDL = IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ ;
  58468.                              OUTPUTXML_OBJCODE_RDL, ;
  58469.                              "Nodes","FrxNodes"), ;
  58470.                              Nodes.ObjValue, ;
  58471.                              OUTPUTXML_GOOFTAG)
  58472.          ENDIF
  58473.          IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION   
  58474.             m.lcPage =  IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+ ;
  58475.                                 OUTPUTXML_OBJCODE_PAGES, ;
  58476.                                 "Nodes","FrxNodes"), ;
  58477.                                 Nodes.ObjValue, ;
  58478.                                 OUTPUTXML_GOOFTAG)
  58479.    *        GO (THIS.frxHeaderRecno) IN FRX
  58480.    *        IF FRX.VPos > 1
  58481.             m.lcCol = IIF(SEEK( OUTPUTXML_OBJTYPE_NODES+;
  58482.                               OUTPUTXML_OBJCODE_COLS,;
  58483.                               "Nodes","FrxNodes"), ;
  58484.                                Nodes.ObjValue, ;
  58485.                               OUTPUTXML_GOOFTAG)
  58486.     *       ENDIF
  58487.          ENDIF                    
  58488.          #IF OUTPUTXML = OUTPUTXML_RAW
  58489.              IF EMPTY(THIS.CurrentDocument) OR ISNULL(THIS.CurrentDocument)
  58490.                 THIS.CurrentDocument = m.lcDocument
  58491.                 THIS.WriteRaw( ;
  58492.                      THIS.XMLRawTag( THIS.CurrentDocument,.T.) )   
  58493.              ENDIF
  58494.              THIS.WriteRaw( ;
  58495.                   THIS.XMLRawTag( m.lcReport,.T.) )   
  58496.              * could add FRXname as ID here                
  58497.              IF NOT THIS.XMLMode = OUTPUTXML_DATA_ONLY    
  58498.                 * write RDL here
  58499.                 THIS.WriteRaw( ;
  58500.                      THIS.XMLRawTag( m.lcRDL,.T.,THIS.xmlRawConv( THIS.CommandClauses.FILE)) )  
  58501.                 THIS.WriteRaw( STRCONV(THIS.GetVFPRDLContents(m.lcRDL, .T.),STRCONV_DBCS_UTF8)  )
  58502.                 THIS.WriteRaw( ;
  58503.                      THIS.XMLRawTag( m.lcRDL) )   
  58504.              ENDIF
  58505.              IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY           
  58506.                 THIS.WriteRaw( ;
  58507.                  THIS.XMLRawTag( m.lcData,.T.) )   
  58508.                       
  58509.                 IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION   
  58510.                    THIS.PageNodes =  THIS.XMLRawTag( m.lcPage,.T.)  
  58511.  *                 IF NOT EMPTY(lcCol)
  58512.                       THIS.ColumnNodes = THIS.XMLRawTag(m.lcCol,.T.)
  58513.  *                 ENDIF
  58514.                 ENDIF
  58515.               ENDIF
  58516.                      
  58517.          #ELIF OUTPUTXML = OUTPUTXML_DOTNET
  58518.              * XMLTextWriter work  
  58519.          #ELSE
  58520.              IF VARTYPE(THIS.CurrentDocument) # "O"
  58521.                 LOCAL m.liSession
  58522.                 m.liSession = SET("DATASESSION")
  58523.                 THIS.resetDataSession()
  58524.                 THIS.CurrentDocument = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  58525.                 SET DATASESSION TO (m.liSession)
  58526.                 * COMPROP(THIS.CurrentDocument,"UTF8",1)                                
  58527.                 THIS.CurrentDocument.DocumentElement = THIS.CurrentDocument.CreateElement(m.lcDocument)
  58528.              ENDIF
  58529.              loNode = THIS.CurrentDocument.CreateElement(m.lcReport)                  
  58530.              * setattribute id using FRXName here                
  58531.              * idref?
  58532.              THIS.CurrentDocument.DocumentElement.AppendChild(m.loNode)
  58533.              m.loParent = loNode             
  58534.              IF NOT THIS.XMLMode = OUTPUTXML_DATA_ONLY    
  58535.                 m.loNode = THIS.CurrentDocument.CreateElement(m.lcRDL)
  58536.                 m.loNode.SetAttribute(THIS.idAttribute,THIS.CommandClauses.FILE)
  58537.                 m.loNode.AppendChild(THIS.GetVFPRDLContents(m.lcRDL))
  58538.                 m.loParent.AppendChild(m.loNode)
  58539.              ENDIF
  58540.              IF NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY                        
  58541.                 m.loNode = THIS.CurrentDocument.CreateElement(m.lcData)
  58542.                 * possibly add DE stuff here                
  58543.                 m.loParent.AppendChild(m.loNode)
  58544.                 THIS.DataNodes = m.loNode
  58545.                 IF THIS.IncludeBreaksInData = OUTPUTXML_BREAKS_COLLECTION   
  58546.                    THIS.PageNodes = THIS.CurrentDocument.CreateElement(m.lcPage)
  58547.                    THIS.DataNodes.AppendChild(THIS.PageNodes)
  58548.                    THIS.ColumnNodes = THIS.CurrentDocument.CreateElement(m.lcCol)
  58549.                    THIS.DataNodes.AppendChild(THIS.ColumnNodes)                   
  58550.                 ENDIF
  58551.              ENDIF
  58552.          #ENDIF
  58553.          IF THIS.XMLMode = OUTPUTXML_RDL_ONLY
  58554.             THIS.AfterReport(.T.)
  58555.          ENDIF
  58556.       ENDIF
  58557.       *&* Sedna
  58558.       IF THIS.XMLMode # OUTPUTXML_RDL_ONLY
  58559.          THIS.initializeFormattingChangesCursor()    
  58560.          SELECT FRX
  58561.          IF USED(THIS.formattingChanges)
  58562.             SELECT FRX
  58563.             SCAN FOR Platform = FRX_PLATFORM_WINDOWS AND ;
  58564.                  ObjType = FRX_OBJTYP_FIELD AND NOT DELETED() && fields only
  58565.                 INSERT INTO (THIS.FormattingChanges) ;
  58566.                   (FRXRecno) VALUES (RECNO("FRX"))
  58567.             ENDSCAN
  58568.             SELECT (THIS.FormattingChanges)
  58569.             INDEX ON FRXRecno TAG FRXRecno
  58570.             SELECT FRX
  58571.          ENDIF
  58572.       ENDIF
  58573.       STORE NULL TO m.loNode, m.loParent
  58574.       SELECT (m.liSelect)
  58575.    ELSE
  58576.       THIS.DoMessage(OUTPUTXML_FRXMISSING_LOC,MB_ICONSTOP )
  58577.       THIS.lastErrorMessage = OUTPUTXML_FRXMISSING_LOC
  58578.    ENDIF   
  58579.    THIS.resetDataSession()
  58580. ENDIF
  58581. RETURN 
  58582. ENDPROC
  58583. PROCEDURE invokeoncurrentpass
  58584. RETURN (THIS.includePage) AND ;
  58585.        (NOT THIS.XMLMode = OUTPUTXML_RDL_ONLY ) AND ;
  58586.        ((NOT THIS.TwoPassProcess) OR THIS.CurrentPass = LISTENER_FULLPASS)
  58587.         
  58588. ENDPROC
  58589. PROCEDURE verifyconfigtable
  58590. LPARAMETERS m.tcAlias
  58591. LOCAL m.llReturn, laRequired[1], m.liIndex, m.liSelect, ;
  58592.       m.liTag, m.lcTag, m.lcIndex, m.llSafetyOn, m.llFixedOn
  58593. m.llReturn = DODEFAULT(m.tcAlias)
  58594. IF m.llReturn
  58595.    * check for required tagnames (used in SEEKs)
  58596.    m.liSelect = SELECT(0)
  58597.    SELECT (m.tcAlias)
  58598.    DIME laRequired[2,2]
  58599.    laRequired[1,1] = "OBJTYPE"
  58600.    laRequired[1,2] = "OBJTYPE"
  58601.    laRequired[2,1] = "FRXNODES"
  58602.    laRequired[2,2] = NORMALIZE("OBJTYPE+OBJCODE+IIF(OBJTYPE="+ ;
  58603.                       TRANSFORM(FRX_OBJTYP_BAND+OUTPUTXML_OBJTYPE_NODES,"9999999")+"," + ;
  58604.                       TRANSFORM(OUTPUTXML_OBJTYPE_BANDOFFSET,"9999999")+",0)")
  58605.    FOR m.liIndex = 1 TO ALEN(laRequired,1)
  58606.        m.liTag = TAGNO(laRequired[m.liIndex,1])
  58607.        IF m.liTag = 0 OR NOT NORMALIZE(KEY(m.liTag)) == ;
  58608.           laRequired[m.liIndex,2]
  58609.           m.llReturn = .F.
  58610.        ENDIF
  58611.    ENDFOR
  58612.    IF NOT m.llReturn
  58613.       m.llSafetyOn = (SET("SAFETY") = "ON")
  58614.       SET SAFETY OFF
  58615.       m.llFixedOn = (SET("FIXED") = "ON")
  58616.       SET FIXED OFF
  58617.       TRY
  58618.          USE (DBF(m.tcAlias)) EXCLU ALIAS (m.tcAlias)
  58619.          FOR m.liIndex = 1 TO ALEN(laRequired,1)
  58620.             m.lcTag = laRequired[m.liIndex,1]
  58621.             m.lcIndex = laRequired[m.liIndex,2]
  58622.             INDEX ON &lcIndex TAG &lcTag
  58623.          ENDFOR
  58624.       
  58625.          m.llReturn = .T.
  58626.       CATCH
  58627.       ENDTRY   
  58628.       
  58629.       
  58630.       IF m.llReturn
  58631.          FOR m.liIndex = 1 TO ALEN(laRequired,1)
  58632.              m.liTag = TAGNO(laRequired[m.liIndex,1])
  58633.              IF m.liTag = 0 OR NOT NORMALIZE(KEY(m.liTag)) == ;
  58634.                 laRequired[m.liIndex,2]
  58635.                 m.llReturn = .F.
  58636.              ENDIF
  58637.          ENDFOR
  58638.       ENDIF
  58639.       
  58640.       USE (DBF(m.tcAlias)) SHARED ALIAS (m.tcAlias)
  58641.       
  58642.       IF m.llSafetyOn
  58643.          SET SAFETY ON
  58644.       ENDIF
  58645.       IF m.llFixedOn
  58646.          SET FIXED ON
  58647.       ENDIF
  58648.    ENDIF
  58649.    IF NOT m.llReturn
  58650.       m.lcMessage =  OUTPUTXML_CONFIGTAGMISSING_LOC + CHR(13) 
  58651.       FOR m.liIndex = 1 TO ALEN(laRequired,1)
  58652.           m.lcMessage = m.lcMessage + ;
  58653.                      CHR(13) + laRequired[m.liIndex,1] + ;
  58654.                      "=" + laRequired[m.liIndex,2]
  58655.       ENDFOR               
  58656.       THIS.DoMessage(m.lcMessage,MB_ICONSTOP )      
  58657.       THIS.lastErrorMessage = OUTPUTXML_CONFIGTAGMISSING_LOC
  58658.    ENDIF
  58659.    IF m.llReturn 
  58660.                                   
  58661.      * just do one check, this is in case
  58662.      * a different listener created the config file.
  58663.      * the XML will run just fine without these records,
  58664.      * it will just use its gooftag instead of regular
  58665.      * nodenames if all or any are missing
  58666.      IF NOT SEEK( OUTPUTXML_OBJTYPE_NODES+ FRX_OBJTYP_REPORTHEADER, ;
  58667.                                ALIAS(),"ObjType")
  58668.         TRY
  58669.            IF IsReadOnly()
  58670.               USE (DBF(m.tcAlias)) SHARED ALIAS (m.tcAlias)
  58671.            ENDIF
  58672.            THIS.InsertXMLConfigRecords()
  58673.         CATCH
  58674.         ENDTRY   
  58675.                                
  58676.      ENDIF                          
  58677.    ENDIF
  58678.    SELECT (m.liSelect)
  58679. ENDIF
  58680. RETURN m.llReturn       
  58681. ENDPROC
  58682. PROCEDURE targetfileext_assign
  58683. LPARAMETERS m.vNewVal
  58684. IF VARTYPE(m.vNewVal) = "C" AND ;
  58685.    NOT UPPER(ALLTRIM(STRTRAN(m.vNewVal,".",""))) == "TMP"
  58686.    DODEFAULT(m.vNewVal)
  58687.    * this class reserves the extension
  58688.    * TMP for swapping in and out when 
  58689.    * using temporary files and XLSTs transforms
  58690. ENDIF   
  58691. ENDPROC
  58692. PROCEDURE setfrxrunstartupconditions
  58693. DODEFAULT()
  58694. IF TYPE("THIS.CommandClauses.File") # "C"
  58695.    ADDPROPERTY(THIS.CommandClauses,"File","")
  58696. ENDIF      
  58697. IF TYPE("THIS.CommandClauses.NoPageEject") # "L"
  58698.    ADDPROPERTY(THIS.CommandClauses,"NoPageEject",.F.)
  58699. ENDIF      
  58700. ENDPROC
  58701. PROCEDURE EvaluateContents
  58702. LPARAMETERS m.nFRXRecno, m.oObjProperties
  58703. DODEFAULT(m.nFRXRecno,m.oObjProperties)
  58704. * do some work even though we may not be
  58705. * adding DTYPE and DTEXT, so that
  58706. * subclasses can rely on the right record
  58707. * being made available in the formattingChanges alias
  58708. * and the "empty values" object always being there
  58709. IF THIS.InvokeOnCurrentPass() AND ;
  58710.    THIS.targetHandle <> -1
  58711.    THIS.setFRXDataSession() 
  58712.    IF USED(THIS.formattingChanges)
  58713.       IF ISNULL(THIS.evaluateContentsValues) 
  58714.          * first time
  58715.          SELECT (THIS.formattingChanges)
  58716.          SCATTER MEMO BLANK NAME THIS.evaluateContentsValues ;
  58717.               FIELDS EXCEPT FRXRecno
  58718.       ENDIF
  58719.       =SEEK(m.nFRXRecno,THIS.FormattingChanges, "FRXRecno") 
  58720.       IF NOT EOF(THIS.formattingChanges)
  58721.          SELECT (THIS.formattingChanges) 
  58722.          GATHER NAME THIS.evaluateContentsValues  && always start off empty
  58723.          IF THIS.includeDataTypeAttributes 
  58724.             WITH m.oObjProperties
  58725.                IF EMPTY(.Value)
  58726.                  REPLACE DType WITH "C"
  58727.                ELSE
  58728.                  REPLACE DType WITH VARTYPE(.Value), ;
  58729.                          DText WITH THIS.formatDataValue(.Value)
  58730.                ENDIF  
  58731.             ENDWITH         
  58732.          ENDIF
  58733.          SELECT FRX
  58734.       ENDIF   
  58735.    ENDIF   
  58736.    THIS.resetDataSession() 
  58737.    RETURN .F.   
  58738. ENDIF      
  58739.            
  58740. ENDPROC
  58741. PROCEDURE resetruncollector
  58742. THIS.runCollector = NULL
  58743. ENDPROC
  58744. PROCEDURE fillruncollector
  58745. * getRunNodeContents will allow a Collection, 
  58746. * a table/alias, or an empty-type object.
  58747. * Table/Alias is easiest, and allows you to use
  58748. * reset levels of OUTPUTFX_RUNCOLLECTOR_RESET_NEVER or
  58749. * OUTPUTFX_RUNCOLLECTOR_RESET_ONCHAIN, because the entry
  58750. * keys do not have to be unique.
  58751. * However, a Collection or EMPTY object
  58752. * allows you to add serialized XML documents as the values
  58753. * of a single property if you like. (This is done
  58754. * in addRunNode method.) You also don't have to 
  58755. * place a cursor in the user's data session.
  58756. * (The getRunNodeContents method will find the cursor in the FRX data session 
  58757. * as well, but that wouldn't work very well for 
  58758. * chained reports; in fact, even CurrentDataSession is
  58759. * dicey with chained reports unless you're sure none
  58760. * of them has a private data session.)
  58761. * For these reasons, although its known document 
  58762. * properties are all simple values, xmlListener 
  58763. * chooses to implement
  58764. * fillRunCollector using a Collection object, and   
  58765. * a CASE exists below to load the XML contents properly
  58766. * for any consumers that wish to read it as true XML.
  58767. * runCollectorResetLevel is readonly at OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT
  58768. * to ensure uniqueness of the keys for each report run.
  58769. * If you override this method to use an alias, you can
  58770. * gather data cumulatively for chained runs however you
  58771. * choose, and getRunNodeContents should cope.
  58772. * If you augment this method to add to the collection,
  58773. * you can add serialized objects
  58774. * in the form of XML nodes that have nothing to do with the 
  58775. * original memberdata contents, and may be completely different
  58776. * in schema.  HTMLListener does this for HTTP-EQUIV handling.
  58777. IF ISNULL(THIS.runCollector) OR VARTYPE(THIS.runCollector) # "O"
  58778.    * because we are using OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT,
  58779.    * this should always be true, and the session issue is
  58780.    * probably not relevant.  But we will adjust the session
  58781.    * in case somebody changes this #DEFINEd life-period of
  58782.    * the runCollector object
  58783.    LOCAL m.liSession
  58784.    m.liSession = SET("DATASESSION")
  58785.    THIS.resetDataSession()
  58786.    THIS.runCollector = CREATEOBJECT("Collection")
  58787.    SET DATASESSION TO (m.liSession)
  58788. ENDIF
  58789. THIS.setFRXDataSession()
  58790. IF USED(THIS.memberDataAlias) 
  58791.    LOCAL m.lvValue, m.lcExpr, m.liSelect, m.loXML, m.loXMLTemp
  58792.    IF USED("FRX") 
  58793.       GO (THIS.frxHeaderRecno) IN FRX
  58794.       #IF OUTPUTXML = OUTPUTXML_DOM
  58795.          m.loXML = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  58796.          m.loXMLTemp = CREATEOBJECT(OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT)
  58797.       #ELSE
  58798.          m.loXML = CREATEOBJECT("Microsoft.XMLDOM")
  58799.          m.loXMLTemp = CREATEOBJECT("Microsoft.XMLDOM")
  58800.       #ENDIF      
  58801.       IF NOT m.loXML.LoadXML(FRX.Style)
  58802.          m.loXML = NULL
  58803.       ENDIF
  58804.    ENDIF      
  58805.    m.liSelect = SELECT(0)
  58806.    SELECT (THIS.memberDataAlias)
  58807.    SCAN ALL FOR FRXRecno = THIS.frxHeaderRecno AND ;
  58808.         Type = FRX_BLDR_MEMBERDATATYPE  ;
  58809.         AND (NOT (EMPTY(Execute) OR EMPTY(Name) OR EMPTY(ExecWhen) OR DELETED()))
  58810.         * do not check
  58811.         * for Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS   
  58812.         * because you can add your own in. 
  58813.         * But it must have *some* namespace.
  58814.         * IOW, the original metadata record with 
  58815.         * blank namespace is not included in this treatment,
  58816.         * because its Execute and ExecWhen fields 
  58817.         * are specified to have different scripting behavior.       
  58818.         m.lvValue = ""
  58819.         m.lcExpr = Execute
  58820.         DO CASE
  58821.         CASE VAL(DeClass) = ADVPROP_EDITMODE_GETEXPR 
  58822.            m.lvValue = THIS.evaluateUserExpression(m.lcExpr)
  58823.         CASE VAL(DeClass) = ADVPROP_EDITMODE_TEXT AND ;
  58824.            NOT ISNULL(m.loXML) 
  58825.            m.lvValue = ;
  58826.               m.loXML.SelectSingleNode("/VFPData/reportdata" + ;
  58827.                       "[@name='" + Name + "' and @execwhen='" + ExecWhen + "']/@execute")
  58828.            IF (NOT ISNULL(m.lvValue)) AND ;
  58829.               m.loXMLTemp.LoadXML(m.lvValue.Text)
  58830.               m.lvValue = m.loXMLTemp.DocumentElement
  58831.            ELSE
  58832.               m.lvValue = m.lcExpr
  58833.                * may not really be XML, we still want the information
  58834.            ENDIF                      
  58835.         OTHERWISE
  58836.            m.lvValue = m.lcExpr
  58837.         ENDCASE
  58838.         * The following help ensures uniqueness of key values
  58839.         * in case people use the same property names in ExecWhen.
  58840.         
  58841.         IF Name == FRX_BLDR_NAMESPACE_ADVANCEDPROPS 
  58842.            m.lcExpr = ExecWhen
  58843.         ELSE
  58844.            m.lcExpr = Name+"."+ExecWhen
  58845.         ENDIF
  58846.         IF THIS.runCollector.getKey(m.lcExpr) = 0  
  58847.            THIS.runCollector.add(m.lvValue,m.lcExpr)
  58848.         ENDIF
  58849.    ENDSCAN        
  58850.    SELECT (liSelect)
  58851.    STORE NULL  TO m.loXML, m.loXMLTemp
  58852. ENDIF
  58853. ENDPROC
  58854. PROCEDURE runcollectorresetlevel_assign
  58855. LPARAMETERS tvNewVal
  58856. THIS.runCollectorResetLevel = OUTPUTFX_RUNCOLLECTOR_RESET_ONREPORT
  58857. ENDPROC
  58858. o^PROCEDURE outputfromdata
  58859. LPARAMETERS toListener, tcOutputDBF, tnWidth, tnHeight
  58860. IF VARTYPE(toListener) <> "O"
  58861.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  58862.     RETURN
  58863. ENDIF 
  58864. IF EMPTY(toListener.cFRXAlias)
  58865.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  58866.     RETURN
  58867. ENDIF 
  58868. * =DoFoxyTherm(90, "Texto label", "Titulo")
  58869. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  58870. * =DoFoxyTherm() && Desliga
  58871. IF NOT This.QuietMode 
  58872.     LOCAL lnSecs
  58873.     lnSecs = SECONDS()
  58874.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  58875.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  58876.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  58877.     =DoFoxyTherm(1, "0%", _Screen.oFoxyPreviewer._InitStatusText)
  58878. ENDIF 
  58879. LOCAL lnSelect, lnOrigDataSession
  58880. lnSelect          = SELECT()
  58881. lnOrigDataSession = SET("Datasession")
  58882. * Ensure we are at the correct DataSession
  58883. SET DATASESSION TO (toListener.ListenerDataSession)
  58884. * SET DATASESSION TO (toListener.CurrentDataSession)
  58885. SELECT (tcOutputDBF)
  58886. * Generate RTF using the stored information
  58887. This.lDefaultMode = .F.
  58888. * This.BeforeReport()
  58889. THIS.nPageHeight = CEILING(THIS.nScreenDPI * tnHeight / 960)
  58890. THIS.nPageWidth  = CEILING(THIS.nScreenDPI * tnWidth / 960)
  58891. THIS.nOutFile    = FCREATE(THIS.cTargetFileName) && .cOutFile)
  58892. LOCAL cHtml
  58893. cHtml = [<html><head><META http-equiv="Content-Type" content="text/html">] + ;
  58894.     [<title>] + This.cTargetFileName + [</title></head><body>]
  58895. FPUTS(THIS.nOutFile, cHtml)
  58896. LOCAL lnPgFrom, lnPgTo
  58897. lnPgFrom = toListener.COMMANDCLAUSES.RangeFrom  && _goHelper._ClausenRangeFrom
  58898. lnPgTo   = IIF(toListener.COMMANDCLAUSES.RangeTo = -1, 999999, _goHelper._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  58899. && _goHelper._ClausenRangeTo
  58900. * Initialize class
  58901. SELECT (tcOutputDBF)
  58902. IF This.QuietMode 
  58903.     SCAN
  58904.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  58905.             This.RenderHTML(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  58906.         ENDIF
  58907.     ENDSCAN
  58908. ELSE 
  58909.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  58910.     lnLastPercent = 0
  58911.     lnDelay       = 1
  58912.     lnTotRecs     = RECCOUNT()
  58913.     lnRec         = 0
  58914.     SCAN
  58915.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  58916.             lnRec = lnRec + 1
  58917.             lnPercent = CEILING(100*lnRec/lnTotRecs)
  58918.             IF (lnLastPercent > 0 AND ;
  58919.                     lnPercent - lnLastPercent < lnDelay  AND ;
  58920.                     lnPercent <> 100)
  58921.             ELSE 
  58922.                 =DoFoxyTherm(lnPercent, ;
  58923.                     ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _Screen.oFoxyPreviewer._SecondsText, ;
  58924.                     _Screen.oFoxyPreviewer._RunStatusText)
  58925.             ENDIF 
  58926.             This.RenderHTML(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  58927.         ENDIF
  58928.     ENDSCAN
  58929.     =DoFoxyTherm(100, ;
  58930.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _Screen.oFoxyPreviewer._SecondsText, ;
  58931.                 _Screen.oFoxyPreviewer._RunStatusText)
  58932. ENDIF 
  58933. * Finalize
  58934. * This.AfterReport()
  58935. FPUTS(THIS.nOutFile, [</body></html>])
  58936. LOCAL llSaved
  58937. llSaved = FCLOSE(THIS.nOutFile)
  58938. * Delete the pages image files
  58939. LOCAL n, lcFile
  58940. FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  58941.     lcFile = This.aPagesImgs(m.n)
  58942.     IF NOT EMPTY(lcFile)
  58943.         TRY 
  58944.             DELETE FILE (lcFile)
  58945.         CATCH
  58946.         ENDTRY
  58947.     ENDIF
  58948. ENDFOR
  58949. USE IN SELECT(tcOutputDBF)
  58950. * Restore DataSession, ALias
  58951. SET DATASESSION TO (lnOrigDataSession)
  58952. SELECT (lnSelect)
  58953. IF NOT This.QuietMode 
  58954.     =DoFoxyTherm()
  58955. ENDIF
  58956. IF llSaved
  58957.     IF This.lObjTypeMode
  58958.         _Screen.oFoxyPreviewer.lSaved = llSaved
  58959.     ENDIF
  58960.     IF This.lOpenViewer 
  58961.         This.ShellExec(This.cTargetFileName)
  58962.     ENDIF 
  58963. ENDIF 
  58964. RETURN
  58965. ENDPROC
  58966. PROCEDURE getbandname
  58967. LPARAMETERS nBandObjCode
  58968. DO CASE
  58969.     CASE nBandObjCode = FRX_OBJCOD_TITLE
  58970.         RETURN 'FRX_OBJCOD_TITLE'
  58971.     CASE nBandObjCode = FRX_OBJCOD_PAGEHEADER
  58972.         RETURN 'FRX_OBJCOD_PAGEHEADER'
  58973.     CASE nBandObjCode = FRX_OBJCOD_COLHEADER
  58974.         RETURN 'FRX_OBJCOD_COLHEADER'
  58975.     CASE nBandObjCode = FRX_OBJCOD_GROUPHEADER
  58976.         RETURN 'FRX_OBJCOD_GROUPHEADER'
  58977.     CASE nBandObjCode = FRX_OBJCOD_DETAIL
  58978.         RETURN 'FRX_OBJCOD_DETAIL'
  58979.     CASE nBandObjCode = FRX_OBJCOD_GROUPFOOTER
  58980.         RETURN 'FRX_OBJCOD_GROUPFOOTER'
  58981.     CASE nBandObjCode = FRX_OBJCOD_COLFOOTER
  58982.         RETURN 'FRX_OBJCOD_COLFOOTER'
  58983.     CASE nBandObjCode = FRX_OBJCOD_PAGEFOOTER
  58984.         RETURN 'FRX_OBJCOD_PAGEFOOTER'
  58985.     CASE nBandObjCode = FRX_OBJCOD_SUMMARY
  58986.         RETURN 'FRX_OBJCOD_SUMMARY'
  58987.     CASE nBandObjCode = FRX_OBJCOD_DETAILHEADER
  58988.         RETURN 'FRX_OBJCOD_DETAILHEADER'
  58989.     CASE nBandObjCode = FRX_OBJCOD_DETAILFOOTER
  58990.         RETURN 'FRX_OBJCOD_DETAILFOOTER'
  58991.     OTHERWISE
  58992.         RETURN ''
  58993. ENDCASE
  58994. ENDPROC
  58995. PROCEDURE getfontstyle
  58996. LPARAMETERS nFontStyle
  58997. LOCAL cStyle
  58998. cStyle = ''
  58999. * extended styles
  59000. IF nFontStyle = FRX_FONTSTYLE_UNDERLINED
  59001.     cStyle = 'U'
  59002.     nFontStyle = nFontStyle - FRX_FONTSTYLE_UNDERLINED
  59003. ENDIF
  59004. IF nFontStyle = FRX_FONTSTYLE_STRIKETHROUGH
  59005.     cStyle = cStyle + 'S'
  59006.     nFontStyle = nFontStyle - FRX_FONTSTYLE_STRIKETHROUGH
  59007. ENDIF
  59008. * standart styles
  59009. DO CASE
  59010.     CASE nFontStyle = FRX_FONTSTYLE_NORMAL
  59011.         cStyle = cStyle + 'N'
  59012.     CASE nFontStyle = FRX_FONTSTYLE_BOLD
  59013.         cStyle = cStyle + 'B'
  59014.     CASE nFontStyle = FRX_FONTSTYLE_ITALIC
  59015.         cStyle = cStyle + 'I'
  59016.     CASE nFontStyle = FRX_FONTSTYLE_BOLD + FRX_FONTSTYLE_ITALIC
  59017.         cStyle = cStyle + 'BI'
  59018. ENDCASE
  59019. RETURN cStyle
  59020. ENDPROC
  59021. PROCEDURE rgbtohex
  59022. LPARAMETERS nReg, nGreen, nBlue
  59023. RETURN [#] + RIGHT(TRANSFORM(MAX(nReg, 0), [@0]), 2) + ;
  59024.     RIGHT(TRANSFORM(MAX(nGreen, 0), [@0]), 2) + RIGHT(TRANSFORM(MAX(nBlue, 0), [@0]), 2)
  59025. ENDPROC
  59026. PROCEDURE getcontinuationtype
  59027. LPARAMETERS nObjectContinuationType
  59028. DO CASE
  59029.     CASE nObjectContinuationType = LISTENER_CONTINUATION_NONE
  59030.         RETURN 'LISTENER_CONTINUATION_NONE'
  59031.     CASE nObjectContinuationType = LISTENER_CONTINUATION_START
  59032.         RETURN 'LISTENER_CONTINUATION_START'
  59033.     CASE nObjectContinuationType = LISTENER_CONTINUATION_MIDDLE
  59034.         RETURN 'LISTENER_CONTINUATION_MIDDLE'
  59035.     CASE nObjectContinuationType = LISTENER_CONTINUATION_END
  59036.         RETURN 'LISTENER_CONTINUATION_END'
  59037.     OTHERWISE
  59038.         RETURN ''
  59039. ENDCASE
  59040. ENDPROC
  59041. PROCEDURE getpageimg
  59042. #DEFINE OutputJPEG     102
  59043. #DEFINE OutputPNG     104
  59044. LOCAL loListener as ReportListener 
  59045. * loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  59046. loListener = This  && This.oActiveListener
  59047. LOCAL lnPage
  59048. lnPage = PAGE - loListener.CommandClauses.RangeFrom + 1
  59049. DIMENSION This.aPagesImgs(lnPage)
  59050. IF EMPTY(This.aPagesImgs(lnPage))
  59051.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  59052.     lnDeviceType = OutputJpeg  && OutputPNG
  59053.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".JPG" && ".PNG"
  59054.     loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  59055.     This.aPagesImgs(lnPage) = lcFile
  59056. ENDIF 
  59057. RETURN This.aPagesImgs(lnPage)
  59058. ENDPROC
  59059. PROCEDURE getpicturefromlistener
  59060. * 2011/02/25 CChalom
  59061. * When we can't access the image from the EXE or from a General field, we still can get 
  59062. * an image of the object, and draw it to the PDF document
  59063. LPARAMETERS tnX, tnY, tnWidth, tnHeight, tcFile
  59064. LOCAL lcFile
  59065. lcFile = This.GetPageImg()
  59066. IF EMPTY(lcFile)
  59067.     RETURN .F. && Could not load image
  59068. ENDIF 
  59069. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  59070. LOCAL lnHor, lnVert
  59071. lnHor  = 9.972
  59072. lnVert = 9.996
  59073. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, tcFile)
  59074. RETURN lcNewFile
  59075. ENDPROC
  59076. PROCEDURE processimages
  59077. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  59078. * TODO:
  59079. * Manage new possibilities for storing images, using the new properties:
  59080. * cExternalFileLocation = ".\images"  
  59081. * lCopyImageFilesToExternalFileLocation = .T.
  59082. * Create Images directory
  59083. LOCAL lcFile, lcPath, lcShortPath, lcImageCopy, lcPathLocation
  59084. lcFile = This.cTargetFileName
  59085. IF EMPTY(This.cExternalFileLocation)
  59086.     lcPathLocation = JUSTSTEM(lcFile) + "_IMAGES"
  59087. ELSE 
  59088.     lcPathLocation = This.cExternalFileLocation
  59089. ENDIF
  59090. lcPath = ADDBS(JUSTPATH(lcFile)) + lcPathLocation
  59091. lcShortPath = lcPathLocation + "\" + JUSTFNAME(cContentsToBeRendered)
  59092. IF NOT DIRECTORY(lcPath)
  59093.     MKDIR (lcPath)
  59094. ENDIF
  59095. DO CASE
  59096. CASE EMPTY(cContentsToBeRendered)  && General field
  59097.     This.nImgCounter = This.nImgCounter + 1
  59098.     lcImageCopy = ADDBS(lcPath) + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  59099.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  59100.     lcShortPath = JUSTSTEM(lcFile) + "_IMAGES" + "\" + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  59101. CASE NOT EMPTY(SYS(2000, cContentsToBeRendered))  && File is accessible in the disk
  59102.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  59103.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  59104. *    IF NOT FILE(lcImageCopy)
  59105.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  59106.     ENDIF
  59107. CASE EMPTY(SYS(2000, cContentsToBeRendered))  && Image embedded in EXE
  59108.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  59109.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  59110.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  59111. *    IF NOT FILE(lcImageCopy)
  59112.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  59113.     ENDIF
  59114. OTHERWISE
  59115.     RETURN ""
  59116. ENDCASE
  59117. * If we could not generate the image copy, leave
  59118. IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  59119.     RETURN ""
  59120. ENDIF    
  59121. LOCAL lcHTML, lcImgHTML
  59122. DO CASE
  59123. CASE General = 0        && Clip
  59124.     * Get the picture size
  59125.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  59126.     LOCAL loVFPImg as Image
  59127.     loVFPImg = CREATEOBJECT("Image")
  59128.     loVFPImg.Picture = lcImageCopy
  59129.     lnWidth = loVFPImg.Width
  59130.     lnHeight = loVFPImg.Height
  59131.     loVFPImg = NULL
  59132.     CLEAR RESOURCES (lcImageCopy)
  59133.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnWidth) + [" height="] + TRANSFORM(lnHeight) +  [">]
  59134.     lcHTML = ;
  59135.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  59136.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  59137.         [">] + ;
  59138.         lcImgHTML + ;
  59139.         [</span>]
  59140. *!*    img {    position: absolute;    
  59141. *!*    clip: rect(0 100px 200px 0);    
  59142. *!*    /* clip: shape(top right bottom left); NB 'rect' is the only available option */}
  59143. * <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>
  59144. CASE General = 1    && Isometric
  59145.     * Calculating the image size for isometric images
  59146.     * Get the picture size
  59147.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  59148.     LOCAL loVFPImg as Image
  59149.     loVFPImg = CREATEOBJECT("Image")
  59150.     loVFPImg.Picture = lcImageCopy
  59151.     lnPictWidth  = loVFPImg.Width
  59152.     lnPictHeight = loVFPImg.Height
  59153.     loVFPImg     = NULL
  59154.     CLEAR RESOURCES (lcImageCopy)
  59155.     * Isometric Adjustment
  59156.     LOCAL lnHorFactor, lnVertFactor, lnResizeFactor, lnIsoWidth, lnIsoHeight
  59157.     m.lnHorFactor    = m.tnWidth  / m.lnPictWidth
  59158.     m.lnVertFactor   = m.tnHeight / m.lnPictHeight
  59159.     m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  59160.     m.lnIsoWidth     = m.lnPictWidth * m.lnResizeFactor
  59161.     m.lnIsoHeight = m.lnPictHeight * m.lnResizeFactor
  59162.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnIsoWidth) + [" height="] + TRANSFORM(lnIsoHeight) +  [">]
  59163.     lcHTML = ;
  59164.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  59165.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  59166.         [">] + ;
  59167.         lcImgHTML + ;
  59168.         [</span>]
  59169. OTHERWISE 
  59170. *!*    CASE .General = 2    && Stretch
  59171.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(tnWidth) + [" height="] + TRANSFORM(tnHeight) +  [">]
  59172.     lcHTML = ;
  59173.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;">] + ;
  59174.         lcImgHTML + ;
  59175.         [</span>]
  59176. ENDCASE 
  59177. RETURN lcHTML
  59178. ENDPROC
  59179. PROCEDURE processtext
  59180. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  59181. LOCAL lcHTML, lcText, lcOrigText
  59182. lcOrigText = ALLTRIM(STRCONV(cContentsToBeRendered, 6)) && STRCONV_UNICODE_UTF8) for Russian
  59183. IF EMPTY(lcOrigText)
  59184.     RETURN ""
  59185. ENDIF 
  59186. * Html special chars
  59187. lcText = STRTRAN(lcOrigText, [&], [&]) && first!
  59188. *lcText = STRTRAN(lcText, [ ], [ ])
  59189. lcText = STRTRAN(lcText, [<], [<])
  59190. lcText = STRTRAN(lcText, [>], [>])
  59191. * Alignment settings
  59192. *     Offset = 0 && Left Aligned
  59193. *     Offset = 1 && Right Aligned
  59194. *     Offset = 2 && Center Aligned
  59195. LOCAL lcAlign
  59196. DO CASE
  59197. CASE Offset = 0
  59198.     lcAlign = "text-align: left;"
  59199. CASE Offset = 1
  59200.     lcAlign = "text-align: right;"
  59201. CASE Offset = 2
  59202.     lcAlign = "text-align: center;"
  59203. OTHERWISE
  59204.     lcAlign = ""
  59205. ENDCASE
  59206. * css style for span to output
  59207. LOCAL lcFillHex, lcPreSpan, lcPostSpan, lcForeHex, lcPreFont, lcForeHex, lcPostFont 
  59208. * Mode: 0 = Opaque background; 1 = Transparent
  59209. DO CASE
  59210. *CASE (fillred = 255 AND fillgreen = 255 AND fillblue = 255) OR Mode = 1 && Transparent
  59211. *    lcFillHex = "" && white
  59212. CASE Mode = 1 && Transparent
  59213.     lcFillHex = "" && white
  59214. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  59215.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  59216. *    lcFillHex = "" && white
  59217. OTHERWISE
  59218.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  59219. ENDCASE
  59220. IF PenRed = -1
  59221.     lcForeHex = THIS.RgbToHex(0, 0, 0)
  59222. ELSE 
  59223.     lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  59224. ENDIF
  59225. IF Stretch
  59226.     lcWWrap = [white-space:normal;]
  59227. ELSE 
  59228.     * Get the quantity of lines needed
  59229.     LOCAL lnLines
  59230.     lnLines = 0
  59231.     lnLines = This.GetLinesCnt(lcOrigText, FontFace, FontSize, FontStyle, tnLeft, tnTop, tnWidth, tnHeight)
  59232.     IF lnLines <= 1
  59233.         lcWWrap = [overflow:hidden ;] + [white-space:nowrap;]
  59234.     ELSE 
  59235.         lcWWrap = [white-space:normal;]
  59236.     ENDIF 
  59237. ENDIF 
  59238. lcPreSpan = [<span style="] + ;
  59239.             [position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  59240.             [width:] + TRANSFORM(tnWidth) + [px;height:] + TRANSFORM(tnHeight) + [px;] + lcAlign + ;
  59241.             IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;]) + ;
  59242.             [font-family:] + ALLTRIM(FontFace) + [;] + [font-size:] + TRANSFORM(FONTSIZE+2) + [px;] + ;
  59243.             [color:] +  + lcForeHex + ";" + ;
  59244.             lcWWrap + ;
  59245.             [">]
  59246. lcPostSpan = [</span>]
  59247. *    [word-wrap:break-word;] + ;
  59248. *    [overflow:hidden ;] + ;
  59249. *    [white-space:normal;] + ;
  59250. *    [overflow: visible;] + ;
  59251. * Font attrib
  59252. lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  59253. *lcPreFont = [<font face="] + ALLTRIM(FontFace) + [" fontsize=] + TRANSFORM(FONTSIZE-2) + [ color=] + lcForeHex + [>]
  59254. *lcPostFont = [</font>]
  59255. lcPreFont = ""
  59256. lcPostFont = ""
  59257. * Set Html font style
  59258. LOCAL lcFontStyle, lcPreStyle, lcPostStyle
  59259. lcFontStyle = THIS.GetFontStyle(FontStyle)
  59260. STORE '' TO lcPreStyle, lcPostStyle
  59261. IF AT('B', lcFontStyle) > 0
  59262.     lcPreStyle = [<b>]
  59263.     lcPostStyle = [</b>]
  59264. ENDIF
  59265. IF AT('I', lcFontStyle) > 0
  59266.     lcPreStyle = lcPreStyle + [<i>]
  59267.     lcPostStyle = [</i>] + lcPostStyle
  59268. ENDIF
  59269. IF AT('U', lcFontStyle) > 0
  59270.     lcPreStyle = lcPreStyle + [<u>]
  59271.     lcPostStyle = [</u>] + lcPostStyle
  59272. ENDIF
  59273. IF AT('S', lcFontStyle) > 0
  59274.     lcPreStyle = lcPreStyle + [<s>]
  59275.     lcPostStyle = [</s>] + lcPostStyle
  59276. ENDIF
  59277. * write to file
  59278. lcHtml = lcPreSpan + lcPreFont + lcPreStyle + lcText + lcPostStyle + lcPostFont + lcPostSpan
  59279. RETURN lcHTML
  59280. ENDPROC
  59281. PROCEDURE processlines
  59282. LPARAMETERS tnLeft, tnTop, tnWIdth, tnHeight
  59283. LOCAL lcHTML
  59284. *!*    lcHTML = ;
  59285. *!*        [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  59286. *!*        [height:1px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  59287. *!*        [<font face="Arial" fontsize=10 color=#000000></font></span>]
  59288. lcHTML = ;
  59289.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  59290.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  59291.     [<font face="Arial" fontsize=10 color=#000000></font></span>]
  59292. RETURN lcHTML
  59293. ENDPROC
  59294. PROCEDURE processshapes
  59295. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, tnObjectContinuationType
  59296. *!* 2011-08-17 - Jacques Parent
  59297. *!* Added tnObjectContinuationType parameter
  59298. * Process Background information
  59299. LOCAL lcFillHex
  59300. * Mode    : 0 = Opaque background; 1 = Transparent
  59301. * FillPat : 0 = Transparent; others fill patterns (opaque)
  59302. DO CASE
  59303. CASE ((Mode = 1) OR (FillPat = 0)) AND (FillRed = -1) && Transparent
  59304.     lcFillHex = "" && white
  59305. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  59306.     * lcFillHex = "" && White
  59307.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  59308. OTHERWISE
  59309.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  59310. ENDCASE
  59311. lcFillHex = IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;])
  59312. * Process Border color
  59313. LOCAL lcBorderHex
  59314. lcBorderHex = ""
  59315. * PenPat: 0 = Transparent (no border)
  59316. DO CASE
  59317. CASE PenPat = 0 && Transparent
  59318. CASE PenRed = -1
  59319.     lcBorderHex = THIS.RgbToHex(0,0,0) && Black
  59320. OTHERWISE
  59321.     lcBorderHex = THIS.RgbToHex(PenRed, PenGreen, PenBlue)
  59322. ENDCASE
  59323. IF NOT EMPTY(lcBorderHex)
  59324.     *!* --------------------------------------------------------------------------------------------------------
  59325.     *!* --------------------------------------------------------------------------------------------------------
  59326.     *!* --------------------------------------------------------------------------------------------------------
  59327.     *!* 2011-08-17 - Jacques Parent
  59328.     *!* In case tnObjectContinuationType is <> 0, we must deactivate some borders...
  59329.     DO CASE
  59330.         CASE tnObjectContinuationType == 1    && Top of box only
  59331.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  59332.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  59333.                           [border-top:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  59334.         CASE tnObjectContinuationType == 2    && Middle of box only
  59335.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  59336.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  59337.         CASE tnObjectContinuationType == 3    && Bottom of box only
  59338.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  59339.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  59340.                           [border-bottom:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  59341.         OTHERWISE    && Complete box
  59342.             lcBorderHex = [border:] + TRANSFORM(PenSize) + [px ] + ;
  59343.                 lcBorderHex + [ solid;]
  59344.             * border:1px solid 
  59345.     ENDCASE
  59346.     *!* --------------------------------------------------------------------------------------------------------
  59347.     *!* --------------------------------------------------------------------------------------------------------
  59348.     *!* --------------------------------------------------------------------------------------------------------
  59349. ENDIF 
  59350. LOCAL lcHTML
  59351. lcHTML = ;
  59352.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  59353.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;] + ;
  59354.     lcBorderHex + ;
  59355.     lcFillHex + [">] + [ ] + ;
  59356.     [</span>]
  59357. RETURN lcHTML
  59358. ENDPROC
  59359. PROCEDURE getlinescnt
  59360. LPARAMETERS tcText, tcFontName, tnSize, tcStyle, tnLeft, tnTop, tnWidth, tnHeight
  59361. LOCAL loFont, lnChars, lnLines, lnHeight, lnWidth, lnFactor
  59362. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  59363. loRect = NEWOBJECT("GPRectangle", "_Gdiplus.vcx", "", 0, 0, tnWidth, tnHeight)
  59364. * Create a font object using the text object's settings.
  59365. loFont = NEWOBJECT("GPFont", "_Gdiplus.vcx")
  59366. loFont.Create(tcFontName, tnSize, tcStyle, 3)
  59367. LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  59368. loGfx  = NEWOBJECT("GpGraphics", "_Gdiplus.vcx")
  59369. lnFactor = 1 && 10
  59370. loGfx.CreateFromHWND(_Screen.HWnd)
  59371. loGfx.PageUnit  = 1
  59372. loGfx.PageScale = 0.3
  59373. loRect.w = tnWidth  / lnFactor
  59374. loRect.h = tnHeight / lnFactor
  59375. LOCAL loSize as GpSize OF HOME() + "\ffc\_Gdiplus.vcx"
  59376. loSize = loGfx.MeasureStringA(tcText, loFont, loRect.GdipRectF, .F., @lnChars, @lnLines)
  59377. lnWidth  = loSize.w
  59378. lnHeight = loSize.h
  59379. RETURN lnLines
  59380. * loGfx.SetHandle(0)
  59381. *RETURN (lnHeight / 960) * 72 * lnFactor
  59382. ENDPROC
  59383. PROCEDURE cropimage
  59384. Lparameters lcFile As String, tnX, tnY, lnWidth As Integer, lnHeight As Integer, tcNewFile
  59385. IF EMPTY(tcNewFile)
  59386.     tcNewFile = FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  59387. ENDIF
  59388. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  59389. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  59390. loBmp.CreateFromFile(lcFile)
  59391. lnHeight = MIN(lnHeight, loBmp.ImageHeight)
  59392. lnWidth  = MIN(lnWidth , loBmp.ImageWidth)
  59393. LOCAL lhBitmap, lnStatus
  59394. lhBitmap = 0
  59395. * Function used in the CropImage method
  59396. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  59397. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, lnWidth, lnHeight, loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  59398. IF (lnStatus <> 0) OR (lhBitmap = 0)
  59399.     loBmp = NULL
  59400.     * lnHandle = 0
  59401.     RETURN ""
  59402. ENDIF 
  59403. LOCAL loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  59404. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  59405. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  59406. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  59407. LOCAL lcEXT, lcEncoder
  59408. lcEXT = UPPER(JUSTEXT(lcFile))
  59409. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  59410. LOCAL lcCroppedFile
  59411. lcCroppedFile = tcNewFile && FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  59412. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  59413. loCropped = NULL
  59414. loBMP     = NULL
  59415. This.oImages.Add(lcCroppedFile)
  59416. RETURN lcCroppedFile
  59417. ENDPROC
  59418. PROCEDURE renderhtml
  59419. * 2011-07-14 CChalom:
  59420. * Introduced text alignment, Width and Height
  59421. * Adjusted positions
  59422. * Fixed transparent background texts
  59423. * Reduced FontSize in 2 points to make text fit in space
  59424. * Added lines
  59425. * Created separate methods to deal with different tasks
  59426. * TODO:
  59427. * Manage images and shapes
  59428. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  59429. This.nX0 = nLeft
  59430. This.nY0 = nTop
  59431. This.nW0 = nWidth
  59432. This.nH0 = nHeight
  59433. LOCAL lcDebugInfo, lcHTML
  59434. IF THIS.lDebug
  59435.     lcDebugInfo = [<!-- nLeft:] + TRANSFORM(nLeft) + [, nTop:] + TRANSFORM(nTop) + [, nWidth:] + ;
  59436.         TRANSFORM(nWidth) + [, nHeight:] + TRANSFORM(nHeight) + [, ContinuationType:] + ;
  59437.         THIS.GetContinuationType(nObjectContinuationType) + [, cContents:] + cContentsToBeRendered + [ -->]
  59438.     FPUTS(THIS.nOutFile, lcDebugInfo)
  59439. ENDIF
  59440. #Define OBJ_COMMENT                  0
  59441. #Define OBJ_LABEL                    5
  59442. #Define OBJ_LINE                     6
  59443. #Define OBJ_RECTANGLE                7
  59444. #Define OBJ_FIELD                    8
  59445. #Define OBJ_PICTURE                 17
  59446. #Define OBJ_VARIABLE                18
  59447. LOCAL lnAdjust
  59448. lnAdjust = 1.10
  59449. * dpi2pix
  59450. nLeft   = CEILING(CEILING(THIS.nScreenDPI * nLeft / 960) * lnAdjust)
  59451. nTop    = ROUND(THIS.nScreenDPI * nTop / 960, 0)
  59452. nWidth  = CEILING(CEILING(THIS.nScreenDPI * nWidth / 960) * lnAdjust)
  59453. nHeight = CEILING(THIS.nScreenDPI * nHeight / 960)
  59454. IF PAGE > 1
  59455. *    nTop = THIS.nPageHeight * (PAGE - This.oActiveListener.CommandClauses.RangeFrom) + nTop && Original -1
  59456.     nTop = THIS.nPageHeight * (PAGE - This.CommandClauses.RangeFrom) + nTop && Original -1
  59457. ENDIF
  59458. DO CASE
  59459. CASE ObjType = OBJ_LINE
  59460.     lcHTML = This.ProcessLines(nLeft, nTop, nWidth, nHeight)
  59461. CASE ObjType = OBJ_RECTANGLE
  59462.     lcHTML = This.ProcessShapes(nLeft, nTop, nWidth, nHeight, nObjectContinuationType)
  59463.     *!* 2011-08-17 - Jacques Parent
  59464.     *!* Added nObjectContinuationType parameter
  59465. CASE INLIST(ObjType, OBJ_LABEL, OBJ_FIELD)
  59466.     lcHTML = This.ProcessText(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  59467. CASE ObjType = OBJ_PICTURE
  59468.     lcHTML = This.ProcessImages(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  59469. OTHERWISE
  59470.     RETURN
  59471. ENDCASE
  59472. IF VARTYPE(lcHTML) <> "C"
  59473.     RETURN 
  59474. ENDIF
  59475. IF NOT EMPTY(lcHTML)
  59476.     =FPUTS(THIS.nOutFile, lcHtml)
  59477. ENDIF
  59478. ENDPROC
  59479. PROCEDURE prepareoutput
  59480. LOCAL lcOutputDBF, lnWidth, lnHeight
  59481. m.lcOutputDBF = This.GetFullFRXData()
  59482. IF NOT EMPTY(m.lcOutputDBF)
  59483.     m.lnWidth  = This.GETPAGEWIDTH()
  59484.     m.lnHeight = This.GETPAGEHEIGHT()
  59485.     This.OutputFromData(This, m.lcOutputDBF, m.lnWidth, m.lnHeight)
  59486. ENDIF
  59487. ENDPROC
  59488. PROCEDURE BeforeReport
  59489. This.lDefaultMode = .T.
  59490. DODEFAULT()
  59491. ENDPROC
  59492. PROCEDURE AfterReport
  59493. This.PrepareOutput()
  59494. DODEFAULT()
  59495. ENDPROC
  59496. PROCEDURE AfterBand
  59497. LPARAMETERS nBandObjCode, nFRXRecno
  59498. DODEFAULT(nBandObjCode, nFRXRecno)
  59499. LOCAL cBand
  59500. SET DATASESSION TO THIS.FRXDATASESSION
  59501. GO nFRXRecno IN frx
  59502. cBand = THIS.GetBandName(nBandObjCode)
  59503. IF THIS.lDebug
  59504.     FPUTS(THIS.nOutFile, '<!-- AfterBand:' + cBand + ' -->')
  59505. ENDIF
  59506. IF ATC('pagefooter', cBand) > 0
  59507. * fputs(This.nOutFile, '<hr color = black>')
  59508. ENDIF
  59509. SET DATASESSION TO THIS.CURRENTDATASESSION
  59510. ENDPROC
  59511. PROCEDURE BeforeBand
  59512. LPARAMETERS nBandObjCode, nFRXRecno
  59513. DODEFAULT(nBandObjCode, nFRXRecno)
  59514. SET DATASESSION TO THIS.FRXDATASESSION
  59515. GO nFRXRecno IN frx
  59516. IF THIS.lDebug
  59517.     FPUTS(THIS.nOutFile, '<!-- BeforeBand:' + THIS.GetBandName(nBandObjCode) + ' -->')
  59518. ENDIF
  59519. SET DATASESSION TO THIS.CURRENTDATASESSION
  59520. ENDPROC
  59521. PROCEDURE Destroy
  59522. FCLOSE(This.nOutFile)
  59523. DODEFAULT()
  59524. ENDPROC
  59525. PROCEDURE Init
  59526. * Author: aMaximum
  59527. * Class adapted from the class posted at www.foxclub.ru
  59528. * Original info:
  59529. **************************************************
  59530. *-- Class: html_listener (c:\projects\vfp9_preview\html_listener.vcx)
  59531. *-- ParentClass: reportlistener
  59532. *-- BaseClass: reportlistener
  59533. *-- Time Stamp: 06/18/04 03:09:01 PM
  59534. * http://forum.foxclub.ru/read.php?29,144472
  59535. * 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
  59536. * http://forum.foxclub.ru/read.php?29,144639,144728
  59537. * 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
  59538. * The report emerged, but the problem with the encoding of Russian letters. What is the trick?  
  59539. * Change in the method of render on strconv 
  59540. * cText = strconv (cContentsToBeRendered, 6)
  59541. *   Or changing 
  59542. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;">] + ; 
  59543. *   to 
  59544. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;charset=utf-8">] + ;
  59545. * and then there is a UNICODE conversion to UTF-8
  59546. DODEFAULT()
  59547. #define LOGPIXELSX 88
  59548. DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER HDC, INTEGER ITEM
  59549. DECLARE INTEGER GetDC IN WIN32API INTEGER HWND
  59550. LOCAL HDC, lnScreenDPI
  59551. HDC = GetDC(0)
  59552. lnScreenDPI = GetDeviceCaps( m.HDC, LOGPIXELSX )
  59553. THIS.nScreenDPI = lnScreenDPI
  59554. THIS.lDebug = .F. && VERSION(2) = 2
  59555. This._cTempFolder = ADDBS(SYS(2023)) && ADDBS(GETENV("TEMP"))
  59556. This.oImages = CREATEOBJECT("Collection")
  59557. ENDPROC
  59558. PROCEDURE updateproperties
  59559. DODEFAULT()
  59560. IF NOT This.lObjTypeMode OR (VARTYPE(_Screen.oFoxyPreviewer) <> "O")
  59561.     RETURN
  59562. ENDIF 
  59563. LOCAL loFP
  59564. loFP = _Screen.oFoxyPreviewer
  59565. IF VARTYPE(This.CommandClauses) = "O"
  59566.     *!*    IF This.CommandClauses.Preview
  59567.     *!*        This.lOpenViewer = .T.
  59568.     *!*    ELSE 
  59569.     *!*        This.lOpenViewer = NVL(loFP.lOpenViewer, .T.)
  59570.     *!*    ENDIF
  59571.     This.lOpenViewer = This.CommandClauses.Preview
  59572.     IF NOT EMPTY(This.CommandClauses.ToFile)
  59573.         This.cTargetFileName = This.CommandClauses.ToFile
  59574.     ELSE 
  59575.         IF VARTYPE(_Screen.oFoxyPreviewer) = "O" AND ;
  59576.                 NOT EMPTY(_Screen.oFoxyPreviewer.cDestFile) AND ;
  59577.                 EMPTY(This.cTargetFileName)
  59578.             LOCAL lcDestFile
  59579.             lcDestFile = _Screen.oFoxyPreviewer.cDestFile
  59580.             IF NOT "\" $ lcDestFile
  59581.                 lcDestFile = ALLTRIM(ADDBS(_Screen.oFoxyPreviewer.cOutputPath) + lcDestFile)
  59582.             ENDIF
  59583.             This.cTargetFileName = lcDestFile
  59584.         ELSE
  59585.             LOCAL lcFile
  59586.             lcFile = This.cTargetFileName
  59587.             IF EMPTY(lcFile)
  59588.                 lcFile = PUTFILE("","","HTM")
  59589.             ENDIF
  59590.             IF EMPTY(lcFile)
  59591.                 _ReportListener::CancelReport()
  59592.                 * This.CancelReport()
  59593.                 RETURN .F.
  59594.             ENDIF
  59595.             This.cTargetFileName = lcFile
  59596.         ENDIF
  59597.     ENDIF 
  59598. ENDIF
  59599. This.QUIETMODE        = NVL(loFP.lQuietMode         , .F.)
  59600. ENDPROC
  59601. _GDIPLUS.VCX
  59602. DATASESSIONv
  59603. GpGraphics
  59604. _GDIPlus.VCX
  59605. TLCALLEDFROMBEFOREREPORT
  59606. _GDIPLUS
  59607. LISESSION
  59608. RESETDATASESSION
  59609. ENSURECOLLECTION
  59610. FFCGRAPHICS
  59611. COUNT
  59612. GETOBJECTINSTANCE
  59613. QUIETONERROR    
  59614. QUIETMODE[
  59615. TCPROGRAM
  59616. TCPROGRAM
  59617. LIRENDERBEHAVIOR
  59618. LITEMP
  59619. LCMETHODTOKEN
  59620. ISSUCCESSOR
  59621. UPPERMETHODNAME
  59622. COUNT
  59623. SETCURRENTDATASESSION
  59624. APPLYFX
  59625. NEEDGFXS
  59626. COLLECTION
  59627. ApplyFX
  59628. ApplyFX
  59629. TLCALLEDFROMBEFOREREPORT
  59630. LIINDEX
  59631. GETFEEDBACKFXOBJECT
  59632. GETMEMBERDATASCRIPTFXOBJECT
  59633. GETROTATEGFXOBJECT
  59634. GETNORENDERGFXOBJECT
  59635. COUNT
  59636. REMOVE
  59637. GFXSF
  59638. TCPROGRAM    
  59639. LCPROGRAM9
  59640. VNEWVAL
  59641. CANCELREQUESTEDE
  59642. VNEWVAL
  59643. FXFEEDBACKCLASSC
  59644. VNEWVAL
  59645. FXFEEDBACKCLASSLIB7
  59646. VNEWVAL
  59647. FXFEEDBACKMODULE
  59648. THIS.CommandClauses.NoDialogb
  59649. TLQUIET
  59650. THIS    
  59651. QUIETMODE
  59652. ISSUCCESSOR
  59653. COMMANDCLAUSES
  59654. NODIALOG
  59655. ADDCOLLECTIONMEMBER
  59656. FXFEEDBACKCLASS
  59657. FXFEEDBACKCLASSLIB
  59658. FXFEEDBACKMODULE!
  59659. CHECKCOLLECTIONFORSPECIFIEDMEMBER    
  59660. STARTMODE
  59661. classPath
  59662. VNEWVAL
  59663. THIS    
  59664. CLASSPATH
  59665. RESETTODEFAULT
  59666. A required helper object is not defined.C
  59667. This report run may be missing some features,
  59668. or it may not conclude successfully.
  59669. DATASESSIONv
  59670.  ALIAS 
  59671. CLASSLIBv
  59672.  ALIAS 
  59673. CLASSLIBv
  59674. PROCEDUREv
  59675. PROCEDUREv
  59676. A required helper object is not available.C
  59677. Class: 
  59678.  Library: 
  59679. This report run may be missing some features,
  59680. or it may not conclude successfully.
  59681. TCCLASS
  59682. TCCLASSLIB
  59683. TCMODULE
  59684. TLASSIGNUNIQUENAMETOOBJECT
  59685. TCNAMEPREFIX
  59686. TLMANDATORYOBJECT
  59687. THIS    
  59688. DOMESSAGE
  59689. LCFORCEVCX
  59690. LCFORCEFXP
  59691. LCUSETHISLIB
  59692. LCEXTERNALSPATH    
  59693. LISESSION
  59694. RESETDATASESSION
  59695. GETPATHFOREXTERNALS    
  59696. CLASSPATH
  59697. TCCLASS
  59698. TCCLASSLIB
  59699. TLINGFX
  59700. TLRETURNREF
  59701. LIINDEX
  59702. LCFORCEVCX
  59703. LCCLASSLIB
  59704. LCCLASS    
  59705. LCTHISLIB
  59706. LLFOUND
  59707. LOREF
  59708. ENSURECOLLECTION
  59709. LCFORCEFXP
  59710. COUNT
  59711. CLASSLIBRARY
  59712. CLASS
  59713. ApplyFX
  59714. TCCLASS
  59715. TCCLASSLIB
  59716. TCMODULE
  59717. TLSINGLETON
  59718. TLINGFX
  59719. TLREQUIRED
  59720. LEXISTS
  59721. LIRETURN
  59722. THIS!
  59723. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  59724. ENSURECOLLECTION
  59725. GETOBJECTINSTANCE
  59726. LILEVEL
  59727. LCSYS16
  59728. LCPATH
  59729. THIS    
  59730. CLASSPATH
  59731. CLASSLIBRARY
  59732. GpGraphics
  59733. TVNEWVAL
  59734. THIS    
  59735. ISRUNNING
  59736. FFCGRAPHICS
  59737. LADUMMYo
  59738. Class to handle scripting during C
  59739. report generation process is not available.
  59740. Report run may not provide expected dynamic behavior.
  59741. SETFRXDATASESSION
  59742. MEMBERDATAALIAS
  59743. EXECUTE
  59744. ADDCOLLECTIONMEMBER
  59745. FXMEMBERDATASCRIPTCLASS
  59746. FXMEMBERDATASCRIPTCLASSLIB
  59747. FXMEMBERDATASCRIPTMODULE!
  59748. CHECKCOLLECTIONFORSPECIFIEDMEMBER    
  59749. DOMESSAGE
  59750. VNEWVAL
  59751. FXMEMBERDATASCRIPTCLASSC
  59752. VNEWVAL
  59753. FXMEMBERDATASCRIPTCLASSLIB7
  59754. VNEWVAL
  59755. FXMEMBERDATASCRIPTMODULE
  59756. FRXCursor
  59757. _FRXCURSOR.VCX
  59758. THIS    
  59759. ISRUNNING    
  59760. FRXCURSOR
  59761. LOADFRXCURSOR
  59762. GETOBJECTINSTANCE    
  59763. QUIETMODE?
  59764. VNEWVAL
  59765. THIS    
  59766. ISRUNNING    
  59767. FRXCURSORD
  59768. VNEWVAL
  59769. THIS    
  59770. ISRUNNING
  59771. LOADFRXCURSORE
  59772. VNEWVAL
  59773. MEMBERDATAALIAS
  59774. WINDOWS
  59775. UnpackFRXMemberdata
  59776. Class to handle scripting during C
  59777. report generation process is not available.
  59778. Report run may not provide expected dynamic behavior.
  59779. PLATFORM
  59780. STYLE
  59781. LOADFRXCURSOR    
  59782. FRXCURSOR
  59783. UNPACKFRXMEMBERDATA
  59784. MEMBERDATAALIAS
  59785. FRXDATASESSION    
  59786. DOMESSAGEK
  59787. TVNEWVAL
  59788. RUNCOLLECTORRESETLEVEL
  59789. BEFOREREPORT
  59790. AFTERREPORT
  59791. LOADREPORT
  59792. UNLOADREPORT
  59793. DATASESSIONv
  59794. WINDOWS
  59795. BEFOREBAND
  59796. AFTERBAND
  59797. TCMETHODTOKEN
  59798. LIFRXRECNO    
  59799. LISESSION
  59800. FRXHEADERRECNO
  59801. SETFRXDATASESSION
  59802. OBJTYPE
  59803. PLATFORM
  59804. Microsoft.VFP.Reporting.Builder.Rotate
  59805. Class to handle rotation during C
  59806. report generation process is not available.
  59807. Report layout controls will not rotate.
  59808. SETFRXDATASESSION
  59809. MEMBERDATAALIAS
  59810. EXECUTE
  59811. ADDCOLLECTIONMEMBER
  59812. GFXROTATECLASS
  59813. GFXROTATECLASSLIB
  59814. GFXROTATEMODULE!
  59815. CHECKCOLLECTIONFORSPECIFIEDMEMBER    
  59816. DOMESSAGE
  59817. VNEWVAL
  59818. GFXROTATECLASSE
  59819. VNEWVAL
  59820. GFXROTATECLASSLIB9
  59821. VNEWVAL
  59822. GFXROTATEMODULE]
  59823. TCNAME
  59824. TLINGFX
  59825. TLNAMEISCLASS
  59826. LIINDEX
  59827. LLFOUND
  59828. LCNAME
  59829. COUNT
  59830. CLASS
  59831. REMOVE
  59832. reportStopRunDatetime
  59833. THIS!
  59834. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  59835. FXFEEDBACKCLASS
  59836. FXFEEDBACKCLASSLIB
  59837. REPORTSTOPRUNDATETIME
  59838. reportStartRunDatetime
  59839. THIS!
  59840. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  59841. FXFEEDBACKCLASS
  59842. FXFEEDBACKCLASSLIB
  59843. REPORTSTARTRUNDATETIME
  59844. DATASESSIONv
  59845. THIS.CommandClauses.StartDatasessionb
  59846. TVVALUEEXPR    
  59847. LISESSION
  59848. LVVALUE
  59849. SETCURRENTDATASESSION
  59850. SETFRXDATASESSION
  59851. RESETDATASESSION
  59852. COMMANDCLAUSES
  59853. STARTDATASESSION
  59854. LISTENERDATASESSION9
  59855. VNEWVAL
  59856. GFXNORENDERCLASS9
  59857. VNEWVAL
  59858. GFXNORENDERCLASSLIB9
  59859. VNEWVAL
  59860. GFXNORENDERMODULE
  59861. ListenerRef.Preprocess.NoRenderWhen
  59862. Microsoft.VFP.Reporting.Builder.AdvancedProperty
  59863. ListenerRef.NoRenderWhen
  59864. ListenerRef.Preprocess.NoRenderWhen
  59865. Class or behavior to handle conditional rendering during C
  59866. report generation process is not available during this run.
  59867. Some report layout controls may appear unexpectedly in the output.
  59868. GFXNORENDERCLASS
  59869. LLNEEDTHISGFX
  59870. LLOPENEDMEMBERDATA
  59871. SETFRXDATASESSION
  59872. MEMBERDATAALIAS
  59873. COMMANDCLAUSES
  59874. ISDESIGNERLOADED!
  59875. CHECKCOLLECTIONFORSPECIFIEDMEMBER
  59876. GFXNORENDERCLASSLIB
  59877. STYLE
  59878. LOADFRXCURSOR
  59879. EXECWHEN
  59880. EXECUTE
  59881. ADDCOLLECTIONMEMBER
  59882. GFXNORENDERMODULE    
  59883. DOMESSAGE
  59884. COLLECTION
  59885. Collection
  59886. COLLECTION
  59887. Collection
  59888. TLGFXS
  59889. GFXS    
  59890. BASECLASS
  59891. TNHANDLE
  59892. FFCGRAPHICS    
  59893. SETHANDLE
  59894. SHAREDGDIPLUSGRAPHICS
  59895. NEXTERNALGDIPLUSGFXg
  59896. COUNT
  59897. SENDFX
  59898. CANCELREQUESTED/
  59899. FFCGRAPHICS    
  59900. FRXCURSOR
  59901. NFRXRECNO
  59902. NLEFT
  59903. NWIDTH
  59904. NHEIGHT
  59905. NOBJECTCONTINUATIONTYPE
  59906. CCONTENTSTOBERENDERED
  59907. GDIPLUSIMAGE
  59908. LIDEFAULTBEHAVIOR
  59909. LLNEEDGFXS
  59910. LNSTATE
  59911. LHGFX
  59912. GDIPLUSGRAPHICS
  59913. ISSUCCESSOR
  59914. COUNT
  59915. NEEDGFXS
  59916. FFCGRAPHICS    
  59917. SETHANDLE
  59918. SENDFX
  59919. RESTORE    
  59920. SUCCESSOR
  59921. SETSUCCESSORDYNAMICPROPERTIES
  59922. RENDER
  59923. NFRXRECNO
  59924. OOBJPROPERTIES
  59925. SENDFX    
  59926. SUCCESSOR
  59927. SETSUCCESSORDYNAMICPROPERTIES
  59928. ADJUSTOBJECTSIZE
  59929. NFRXRECNO
  59930. OOBJPROPERTIES
  59931. SENDFX    
  59932. SUCCESSOR
  59933. SETSUCCESSORDYNAMICPROPERTIES
  59934. EVALUATECONTENTSF
  59935. NBANDOBJCODE    
  59936. NFRXRECNO
  59937. SENDFX
  59938. NBANDOBJCODE    
  59939. NFRXRECNO
  59940. COUNT
  59941. FFCGRAPHICS    
  59942. SETHANDLE
  59943. GDIPLUSGRAPHICS
  59944. SENDFX?
  59945. SENDFX
  59946. COMMANDCLAUSES
  59947. COMMANDCLAUSESFILE
  59948. SENDFX
  59949. memberDataAlias
  59950. SETFRXDATASESSION
  59951. ISSUCCESSOR
  59952. CREATEMEMBERDATACURSOR    
  59953. SUCCESSOR
  59954. ADDPROPERTY
  59955. MEMBERDATAALIAS
  59956. CHECKCOLLECTIONMEMBERS
  59957. CREATEHELPEROBJECTS
  59958. SENDFX|
  59959. CALLADJUSTOBJECTSIZE
  59960. CALLEVALUATECONTENTS
  59961. COMMANDCLAUSESFILE
  59962. COMMANDCLAUSES
  59963. SETFRXDATASESSIONENVIRONMENT
  59964. CREATEHELPEROBJECTS
  59965. CHECKCOLLECTIONMEMBERS
  59966. SENDFXx
  59967. FX-Update Listener
  59968. APPNAME
  59969. CREATEHELPEROBJECTS
  59970. HADERROR%
  59971. CMESSAGE
  59972. SENDFX
  59973. SENDFX
  59974. SENDFX
  59975. VNEWVAL
  59976. LOADFRXCURSOR    
  59977. FRXCURSOR    
  59978. QUIETMODE
  59979. FFCGRAPHICS
  59980. QUIETONERROR
  59981. createhelperobjects,
  59982. needgfxs
  59983. sendfx
  59984. checkcollectionmembers"
  59985. uppermethodnamex
  59986. cancelrequested_assign
  59987. fxfeedbackclass_assign5    
  59988. fxfeedbackclasslib_assign
  59989. fxfeedbackmodule_assign
  59990. getfeedbackfxobjectd
  59991. classpath_assign
  59992. getobjectinstance
  59993. checkcollectionforspecifiedmember
  59994. addcollectionmember}
  59995. getpathforexternals
  59996. ffcgraphics_assign
  59997. getmemberdatascriptfxobject%
  59998. fxmemberdatascriptclass_assignb
  59999. fxmemberdatascriptclasslib_assign
  60000. fxmemberdatascriptmodule_assignE
  60001. frxcursor_access
  60002. frxcursor_assign
  60003. loadfrxcursor_assign
  60004. memberdataalias_assign
  60005. creatememberdatacursor
  60006. runcollectorresetlevel_assign
  60007. getfrxrecno
  60008. getrotategfxobject
  60009. gfxrotateclass_assignG)
  60010. gfxrotateclasslib_assign
  60011. gfxrotatemodule_assign
  60012. removecollectionmemberw*
  60013. reportstoprundatetime_accessP,
  60014. reportstartrundatetime_accessx-
  60015. evaluateuserexpression
  60016. gfxnorenderclass_assign
  60017. gfxnorenderclasslib_assignf1
  60018. gfxnorendermodule_assign
  60019. getnorendergfxobject&2
  60020. ensurecollection
  60021. setgdiplusgraphics
  60022. CancelReport
  60023. Destroy;9
  60024. Render
  60025. AdjustObjectSize
  60026. EvaluateContents
  60027. AfterBand
  60028. BeforeBand1@
  60029. UnloadReport
  60030. AfterReport
  60031. BeforeReport
  60032. LoadReport
  60033. Init;D
  60034. DoStatus
  60035. UpdateStatus,E
  60036. resetcalladjustobjectsizeTE
  60037. resetcallevaluatecontents[E
  60038. ClearStatusbE
  60039. quietmode_assign
  60040. VNEWVAL
  60041. ALLOWMODALMESSAGES9
  60042. VNEWVAL
  60043. LIGNOREERRORS,
  60044. Error:           
  60045. Method:       
  60046. Line:            
  60047. NERROR
  60048. CMETHOD
  60049. NLINE
  60050. CNAME
  60051. CMESSAGE    
  60052. CCODELINE
  60053. LCERRORMESSAGE
  60054. LCCODELINEMSG
  60055. HADERROR
  60056. LASTERRORMESSAGE
  60057. LASTERRORMESSAGEM
  60058. DATASESSIONv
  60059. Collection
  60060. Collection
  60061. Collection
  60062. toListener.BaseClassb
  60063. REPORTLISTENER
  60064. TCFRXNAME    
  60065. TCCLAUSES
  60066. TOLISTENER
  60067. REPORTFILENAMES
  60068. REPORTCLAUSES    
  60069. LISTENERS    
  60070. LISESSION
  60071. RESETDATASESSION
  60072. REPORTPAGES
  60073. COUNT    
  60074. BASECLASSi
  60075. ISRUNNINGREPORTS
  60076. REPORTFILENAMES
  60077. REPORTCLAUSES    
  60078. LISTENERS
  60079. REPORTPAGESP
  60080.  OBJE C
  60081.  OBJEC 
  60082. REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses
  60083.  OBJECT 
  60084.  OBJE 
  60085.  OBJEC 
  60086.  OBJE 
  60087.  OBJE 
  60088.  TYPE 
  60089.  TYPE 
  60090. _oReportOutput['
  60091. REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT THIS
  60092. REPORT FORM (THIS.ReportFileNames[m.liIndex]) &lcClauses  OBJECT m.loListener
  60093. TLREMOVEREPORTSAFTERRUN
  60094. TLOMITLISTENERREFERENCES
  60095. ISRUNNINGREPORTS
  60096. REPORTFILENAMES
  60097. COUNT
  60098. OERROR
  60099. LIINDEX    
  60100. LCCLAUSES
  60101. LOLISTENER
  60102. LCPARSE
  60103. REPORTCLAUSES    
  60104. LISTENERS
  60105. ADJUSTREPORTPAGESINFO
  60106. LCERRMSG
  60107. PREPAREERRORMESSAGE
  60108. ERRORNO    
  60109. PROCEDURE
  60110. LINENO
  60111. APPNAME
  60112. MESSAGE
  60113. LINECONTENTS    
  60114. DOMESSAGE
  60115. LASTERRORMESSAGE
  60116. REMOVEREPORTS
  60117. SETFRXDATASESSION
  60118. lDefaultMode
  60119. listenerDataSession
  60120. LDEFAULTMODE
  60121. LISTENERDATASESSION
  60122. RESETTODEFAULT
  60123. lDefaultMode
  60124. DATASESSIONv
  60125. FRXDataSession
  60126. LDEFAULTMODE
  60127. FRXDATASESSION
  60128. RESETTODEFAULT
  60129. RESETDATASESSION
  60130. lDefaultMode
  60131. DATASESSIONv
  60132. CurrentDataSession
  60133. LDEFAULTMODE
  60134. CURRENTDATASESSION
  60135. RESETTODEFAULT
  60136. RESETDATASESSION9
  60137. VNEWVAL
  60138. THIS    
  60139. QUIETMODE9
  60140. VNEWVAL
  60141. ISSUCCESSORr
  60142. REPORTLISTENER
  60143. VNEWVAL
  60144. THIS    
  60145. ISRUNNING    
  60146. BASECLASS    
  60147. SUCCESSOR
  60148. WINDOWS
  60149. WINDOWS
  60150. SETFRXDATASESSION
  60151. OBJTYPE
  60152. PLATFORM
  60153. REPORTUSESPRIVATEDATASESSION
  60154. ENVIRON
  60155. FRXHEADERRECNO
  60156. SETCURRENTDATASESSION
  60157. DRIVINGALIAS
  60158. ISSUCCESSOR
  60159. SHAREDOUTPUTPAGECOUNT
  60160. OUTPUTPAGECOUNT
  60161. SHAREDPAGETOTAL    
  60162. PAGETOTAL
  60163. SHAREDPAGENO
  60164. PAGENO
  60165. SHAREDGDIPLUSGRAPHICS
  60166. GDIPLUSGRAPHICS    
  60167. SUCCESSOR
  60168. CURRENTPASS
  60169. TWOPASSPROCESS
  60170. CALLEVALUATECONTENTS
  60171. CALLADJUSTOBJECTSIZE9
  60172. VNEWVAL
  60173. APPNAME9
  60174. VNEWVAL
  60175. SHAREDGDIPLUSGRAPHICS9
  60176. VNEWVAL
  60177. SHAREDPAGEHEIGHT9
  60178. VNEWVAL
  60179. SHAREDPAGEWIDTHD
  60180. VNEWVAL
  60181. SUPPORTSLISTENERTYPE    
  60182. ISRUNNING
  60183. LISTENERTYPEt
  60184. VNEWVAL
  60185. THIS    
  60186. ISRUNNING
  60187. OUTPUTTYPE
  60188. SUPPORTSLISTENERTYPE
  60189. LISTENERTYPE9
  60190. VNEWVAL
  60191. SHAREDOUTPUTPAGECOUNT9
  60192. VNEWVAL
  60193. SHAREDPAGENO9
  60194. VNEWVAL
  60195. SHAREDPAGETOTAL
  60196. Empty
  60197. THIS.CommandClauses.NoDialogb
  60198. NoDialog-
  60199. COMMANDCLAUSESc
  60200. THIS    
  60201. PAGELIMITc
  60202. PAGETOPLIMITc
  60203. PAGETAILLIMIT9
  60204. PAGELIMITQUIETMODE9
  60205. PAGELIMITINSIDERANGE 
  60206. CallAdjustObjectSize
  60207. CallEvaluateContents
  60208. CALLADJUSTOBJECTSIZE
  60209. RESETCALLADJUSTOBJECTSIZE
  60210. CALLEVALUATECONTENTS
  60211. RESETCALLEVALUATECONTENTS    
  60212. SUCCESSOR
  60213. VNEWVAL
  60214. SHAREDLISTENERTYPEZ
  60215. TVNEWVAL
  60216. COMMANDCLAUSESFILE
  60217. DATASESSIONv
  60218. SAFETYv
  60219. TCPATH
  60220. TLKEEPCOPYOPEN"
  60221. TLADJUSTCOMMANDCLAUSESINLOADREPORT
  60222. LCPATH
  60223. LCFILE    
  60224. LISESSION
  60225. LCALIAS
  60226. LISELECT
  60227. LLSAFETY
  60228. SETFRXDATASESSION
  60229. COMMANDCLAUSES
  60230. ONEFIELD
  60231.  RECYCLE
  60232. ERASE (FORCEEXT(m.tcFile,"FRX")) &lcRecycle
  60233. ERASE (FORCEEXT(m.tcFile,"FRT")) &lcRecycle
  60234. TCFILE    
  60235. TLRECYCLE
  60236. LCRECYLE
  60237. LLRESETTINGSHAREDCOPY
  60238. ISFRXSWAPCOPYPRESENT
  60239. COMMANDCLAUSES
  60240. FILE    
  60241. LCRECYCLE
  60242. COMMANDCLAUSESFILEb
  60243. THIS.commandClauses.Fileb
  60244. COMMANDCLAUSESFILE
  60245. COMMANDCLAUSES
  60246. FILEk
  60247. TIREPORTINDEX    
  60248. TCCLAUSES
  60249. TOLISTENER
  60250. REPORTPAGES
  60251. REPORTFILENAMES
  60252. COUNT
  60253. PAGENO%
  60254. STRING
  60255. STRING
  60256. STRING
  60257. ShellExecute
  60258. SHELL32.Dll
  60259. FindWindow
  60260. WIN32API
  60261. LCLINK
  60262. LCACTION
  60263. LCPARMS
  60264. SHELLEXECUTE
  60265. SHELL32
  60266. FINDWINDOW
  60267. WIN32API
  60268. CAPTIONk
  60269. Your report exceeded a specified page limit (C
  60270. Report execution was cancelled.
  60271. Your results are not complete.
  60272. Your report exceeded a specified page limit (C
  60273. Report execution was cancelled.
  60274. Your results are not complete.
  60275. NPAGENO    
  60276. LLINCLUDE
  60277. ISSUCCESSOR    
  60278. PAGELIMIT
  60279. PAGENO
  60280. PAGELIMITQUIETMODE    
  60281. DOMESSAGE
  60282. LASTERRORMESSAGE
  60283. CANCELREPORT
  60284. PAGETOPLIMIT
  60285. PAGETAILLIMIT
  60286. PAGELIMITINSIDERANGE
  60287. Running calculation prepass... 
  60288. CMESSAGE
  60289. THIS    
  60290. QUIETMODE    
  60291. ISRUNNING
  60292. COMMANDCLAUSES
  60293. NODIALOG
  60294. TWOPASSPROCESS
  60295. CURRENTPASS
  60296. isSuccessora
  60297. commandClausesFile
  60298. CLEARERRORS
  60299. SETFRXDATASESSIONENVIRONMENT
  60300. RESETDATASESSION
  60301. FRXHEADERRECNO    
  60302. SUCCESSOR
  60303. ADDPROPERTY
  60304. COMMANDCLAUSESFILE
  60305. PRINTJOBNAME
  60306. COMMANDCLAUSES
  60307. LOADREPORT@
  60308. THIS    
  60309. SUCCESSOR
  60310. SETSUCCESSORDYNAMICPROPERTIES
  60311. CLEARSTATUS@
  60312. THIS    
  60313. SUCCESSOR
  60314. SETSUCCESSORDYNAMICPROPERTIES
  60315. UPDATESTATUS
  60316. ISSUCCESSOR
  60317. SHAREDPAGEWIDTH
  60318. GETPAGEWIDTH
  60319. SHAREDPAGEHEIGHT
  60320. GETPAGEHEIGHT
  60321. RESETDATASESSION    
  60322. SUCCESSOR
  60323. FRXDATASESSION
  60324. CURRENTDATASESSION
  60325. TWOPASSPROCESS
  60326. COMMANDCLAUSES
  60327. SETSUCCESSORDYNAMICPROPERTIES
  60328. UNLOADREPORTY
  60329. ISSUCCESSOR    
  60330. SUCCESSOR
  60331. SETSUCCESSORDYNAMICPROPERTIES
  60332. CANCELREPORTG
  60333. FRXDataSession
  60334. CurrentDataSession
  60335. ISSUCCESSOR
  60336. SHAREDPAGEWIDTH
  60337. GETPAGEWIDTH
  60338. SHAREDPAGEHEIGHT
  60339. GETPAGEHEIGHT    
  60340. SUCCESSOR
  60341. FRXDATASESSION
  60342. CURRENTDATASESSION
  60343. TWOPASSPROCESS
  60344. COMMANDCLAUSES
  60345. SETSUCCESSORDYNAMICPROPERTIES
  60346. AFTERREPORT
  60347. RESETTODEFAULT.
  60348. DATASESSIONv
  60349. VFP Report Output Class
  60350. CallEvaluateContents
  60351. CallEvaluateContents
  60352. CallAdjustObjectSize
  60353. CallAdjustObjectSize
  60354. LISTENERDATASESSION
  60355. APPNAME
  60356. CLASS
  60357. ADDPROPERTY
  60358. HADERROR_
  60359. NBANDOBJCODE    
  60360. NFRXRECNO
  60361. THIS    
  60362. SUCCESSOR
  60363. SETSUCCESSORDYNAMICPROPERTIES
  60364. BEFOREBAND
  60365. RESETDATASESSION
  60366. CMESSAGE
  60367. IPARAMS
  60368. CTITLE
  60369. THIS    
  60370. QUIETMODE    
  60371. ISRUNNING
  60372. COMMANDCLAUSES
  60373. NODIALOG
  60374. ALLOWMODALMESSAGES
  60375. APPNAME
  60376. DOSTATUSD
  60377. ERROR
  60378. ERROR()
  60379. nError
  60380. PROGRAM()
  60381. cMethod
  60382. LINENO()
  60383. nLine
  60384. &lcOnError
  60385. NERROR
  60386. CMETHOD
  60387. NLINE    
  60388. LCONERROR
  60389. LCERRORMSG
  60390. LCCODELINEMSG
  60391. HADERROR
  60392. LIGNOREERRORS    
  60393. STARTMODE
  60394. PREPAREERRORMESSAGE
  60395. LASTERRORMESSAGE    
  60396. DOMESSAGE%
  60397. sharedPageNo
  60398. sharedPageTotal
  60399. sharedOutputPageCount
  60400. sharedGDIPlusGraphics
  60401. sharedGDIPlusGraphics
  60402. sharedPageHeight
  60403. sharedPageWidth
  60404. sharedOutputPageCount
  60405. sharedPageNo
  60406. sharedPageTotal
  60407. sharedListenerType
  60408. SETFRXRUNSTARTUPCONDITIONS
  60409. GETFRXSTARTUPINFO
  60410. RESETDATASESSION
  60411. ISSUCCESSOR
  60412. SHAREDPAGEHEIGHT
  60413. GETPAGEHEIGHT
  60414. SHAREDPAGEWIDTH
  60415. GETPAGEWIDTH
  60416. SHAREDLISTENERTYPE
  60417. LISTENERTYPE
  60418. RESETTODEFAULT    
  60419. SUCCESSOR
  60420. ADDPROPERTY
  60421. SHAREDGDIPLUSGRAPHICS
  60422. SHAREDOUTPUTPAGECOUNT
  60423. SHAREDPAGENO
  60424. SHAREDPAGETOTAL
  60425. SETSUCCESSORDYNAMICPROPERTIES
  60426. FRXDATASESSION
  60427. CURRENTDATASESSION
  60428. TWOPASSPROCESS
  60429. COMMANDCLAUSES
  60430. COMMANDCLAUSESFILE
  60431. BEFOREREPORT
  60432. RESETDYNAMICMETHODCALLS
  60433. CALLEVALUATECONTENTS
  60434. CALLADJUSTOBJECTSIZE;
  60435. RUNCOLLECTOR    
  60436. SUCCESSOR    
  60437. LISTENERS
  60438. REPORTCLAUSES
  60439. REPORTFILENAMES
  60440. PREVIEWCONTAINER
  60441. COMMANDCLAUSESR
  60442. NBANDOBJCODE    
  60443. NFRXRECNO
  60444. THIS    
  60445. SUCCESSOR
  60446. SETSUCCESSORDYNAMICPROPERTIES    
  60447. AFTERBAND
  60448. NFRXRECNO
  60449. NLEFT
  60450. NWIDTH
  60451. NHEIGHT
  60452. NOBJECTCONTINUATIONTYPE
  60453. CCONTENTSTOBERENDERED
  60454. GDIPLUSIMAGE
  60455. THIS    
  60456. SUCCESSOR
  60457. SETSUCCESSORDYNAMICPROPERTIES
  60458. RENDER
  60459. allowmodalmessages_assign,
  60460. lignoreerrors_assign
  60461. prepareerrormessage
  60462. pushglobalsetsv
  60463. popglobalsets}
  60464. clearerrors
  60465. getlasterrormessage
  60466. addreport
  60467. removereports
  60468. runreports
  60469. setfrxdatasessionenvironmentC
  60470. invokeoncurrentpassv
  60471. resetdatasession
  60472. setfrxdatasessionn
  60473. setcurrentdatasessionz
  60474. quietmode_assign~
  60475. issuccessor_assign
  60476. successor_assign.
  60477. getfrxstartupinfo
  60478. setsuccessordynamicpropertiesg
  60479. appname_assignT
  60480. sharedgdiplusgraphics_assign
  60481. sharedpageheight_assign
  60482. sharedpagewidth_assignj
  60483. listenertype_assign
  60484. outputtype_assignM
  60485. sharedoutputpagecount_assign
  60486. sharedpageno_assignr
  60487. sharedpagetotal_assign
  60488. setfrxrunstartupconditions)
  60489. pagelimit_assign
  60490. pagetoplimit_assignA
  60491. pagetaillimit_assign
  60492. pagelimitquietmode_assignD
  60493. pagelimitinsiderange_assign
  60494. resetdynamicmethodcalls
  60495. resetcalladjustobjectsize
  60496. resetcallevaluatecontents
  60497. sharedlistenertype_assign
  60498. commandclausesfile_assign
  60499. preparefrxswapcopy
  60500. removefrxswapcopyi$
  60501. isfrxswapcopypresent}&
  60502. adjustreportpagesinfo
  60503. shellexec
  60504. IncludePageInOutputZ*
  60505. DoStatusu.
  60506. LoadReport
  60507. ClearStatus
  60508. UpdateStatus
  60509. UnloadReport
  60510. CancelReport
  60511. AfterReport
  60512. BeforeBandA8
  60513. DoMessage
  60514. Errorx:
  60515. BeforeReportZ<
  60516. DestroyxA
  60517. AfterBand#B
  60518. Render
  60519. lvParam.C
  60520. ,Obj.C
  60521. lvParam.C
  60522. Listener.PageNo=C
  60523. _PAGENO=
  60524.  recno=
  60525. , TargetAlias=
  60526. , targetRecno=
  60527. PCOUNT
  60528. TARGETHANDLE
  60529. LIINDEX
  60530. LOOBJ
  60531. LVPARAM
  60532. LIOBJINDEX    
  60533. LIMEMBERS    
  60534. LAMEMBERS
  60535. VERBOSE
  60536. SETCURRENTDATASESSION
  60537. SHAREDPAGENO
  60538. PAGENO
  60539. DRIVINGALIAS
  60540. TARGETALIAS
  60541. RESETDATASESSION
  60542. MEMBERS:
  60543. THIS.C
  60544. THIS.C
  60545. ... NO MEMBERS
  60546. tvCommand.C
  60547. TVCOMMAND
  60548. TCHEADER
  60549. TARGETHANDLE
  60550. LIINDEX    
  60551. LAMEMBERS    
  60552. LIMEMBERS9
  60553. VNEWVAL
  60554. VERBOSE
  60555. DODEBUG
  60556. DODEBUG
  60557. DODEBUG
  60558. DODEBUGe
  60559.  current CommandClauses
  60560. INCLUDELOADANDUNLOAD    
  60561. LCPROGRAM
  60562. DODEBUG
  60563. DODEBUGCOMMANDCLAUSES
  60564. COMMANDCLAUSES
  60565. TARGETHANDLE
  60566. NOPAGEEJECT
  60567. CLOSETARGETFILE    
  60568. QUIETMODE
  60569. TARGETFILENAME
  60570.  received CommandClauses
  60571. INCLUDELOADANDUNLOAD
  60572. TARGETHANDLE
  60573. OPENTARGETFILE
  60574. DODEBUG
  60575. DODEBUGCOMMANDCLAUSES
  60576. COMMANDCLAUSES
  60577. DODEBUG
  60578. DODEBUG
  60579. DODEBUG
  60580. DODEBUG
  60581. DODEBUG
  60582. DODEBUG
  60583. DODEBUG
  60584. DODEBUG
  60585. DODEBUG
  60586. DODEBUG
  60587. DODEBUG
  60588. DODEBUGO
  60589. DODEBUG
  60590. VERBOSE
  60591. TARGETALIAS
  60592. SETFRXDATASESSION
  60593. RESETDATASESSION
  60594. DODEBUG
  60595. DODEBUG
  60596. DODEBUGS
  60597.  current CommandClauses
  60598. LCPROGRAM
  60599. DODEBUG
  60600. DODEBUGCOMMANDCLAUSES
  60601. COMMANDCLAUSES
  60602. INCLUDELOADANDUNLOAD
  60603. NOPAGEEJECT
  60604. CLOSETARGETFILE    
  60605. QUIETMODE
  60606. TARGETFILENAMEd
  60607.  received CommandClauses
  60608. LCPROGRAM
  60609. VERBOSE
  60610. SETCURRENTDATASESSION
  60611. TARGETHANDLE
  60612. OPENTARGETFILE
  60613. DODEBUG
  60614. DODEBUGCOMMANDCLAUSES
  60615. COMMANDCLAUSES
  60616. RESETDATASESSION8
  60617. TARGETFILENAMEW
  60618. VFP Report Output Class
  60619. APPNAME
  60620. HADERROR
  60621. dodebug,
  60622. dodebugcommandclausesZ
  60623. verbose_assign
  60624. OutputPage
  60625. IncludePageInOutput
  60626. EvaluateContents
  60627. CancelReport
  60628. UnloadReport
  60629. LoadReport8
  60630. WriteMethod
  60631. WriteExpression
  60632. UpdateStatus
  60633. SupportsListenerType
  60634. SaveAsClass
  60635. ResetToDefault
  60636. ReadMethod
  60637. ReadExpression
  60638. OnPreviewClosen
  60639. ClearStatus\
  60640. RenderS
  60641. DoStatus
  60642. BeforeBand
  60643. AfterBand^
  60644. AdjustObjectSizea
  60645. AddPropertyd
  60646. AfterReportR
  60647. BeforeReportl!
  60648. opentargetfile
  60649. PROCEDURE storefrxdata
  60650. LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage
  60651. IF This.TwoPassProcess AND This.CurrentPass = 0 && Code to detect if report will run twice because of use of _PAGETOTAL
  60652.     *    DODEFAULT(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage)
  60653.     RETURN
  60654. ENDIF
  60655. * As each object is rendered, add a record to the cursor.
  60656. LOCAL lcContents, lnRec, lnSelect, lnSession, llDynamics
  60657. m.lnSelect     = SELECT()
  60658. m.lnSession     = SET("Datasession")
  60659. m.llDynamics = .F.
  60660. DO WHILE .T.
  60661.     WITH This
  60662.         m.lcContents = STRCONV(m.tcContentsToBeRendered, 6)
  60663.         * Ensure we are in the correct datasession
  60664.         .ResetDataSession()
  60665.         IF VARTYPE(_goHelper) = "O" AND (_goHelper.nSearchPages > 0) AND (.PageNo > _goHelper.nSearchPages)
  60666.             This.lStoreData = .F.
  60667.             * MESSAGEBOX("The offline output generation was turned off because you are using the 'nSearchPages'" + CHR(13) + ;
  60668.             "feature. If you want to allow all options, set the Search Pages value to -1" + CHR(13) + CHR(13) + ;
  60669.             "Current value = " + TRANSFORM(_goHelper.nSearchPages), 48, "Attention")
  60670.             EXIT
  60671.         ENDIF
  60672.         IF NOT EMPTY(This.cMainAlias)
  60673.             m.lnRec = RECNO(This.cMainAlias)
  60674.         ELSE
  60675.             m.lnRec = 1
  60676.         ENDIF
  60677.         LOCAL lcTestContents, lcNewContents, lcNewUNContents, lnRotate, lnDynamics
  60678.         STORE "" TO m.lcTestContents, m.lcNewContents, m.lcNewUNContents
  60679.         m.lnRotate = 0
  60680.         m.lnDynamics = This.GetDynamicsFromFRX(m.tnFRXRecno, @m.lcTestContents, @m.lnRotate)
  60681.         IF NOT EMPTY(m.lcTestContents)
  60682.             m.lcNewContents      = m.lcTestContents
  60683.             m.lcNewUNContents = STRCONV(m.lcTestContents, 5)
  60684.         ELSE
  60685.             m.lcNewContents      = m.lcContents
  60686.             m.lcNewUNContents = m.tcContentsToBeRendered
  60687.         ENDIF
  60688.         *!*                    IF (VARTYPE(_TempDynamics.Script) = "C") AND (NOT EMPTY(_TempDynamics.Script))
  60689.         *!*                        REPLACE Contents WITH _TempDynamics.Script, ;
  60690.         *!*                            UNContents WITH STRCONV(_TempDynamics.Script, 5) IN (THIS.cFullOutputAlias)
  60691.         *!*                    ENDIF
  60692.         TRY
  60693.             *        INSERT INTO (.cOutputAlias) ;
  60694.             VALUES (tnFRXRecNo, lnRec, tnLeft, tnTop, tnWidth, tnHeight, ;
  60695.             tnObjectContinuationType, lcContents, tcContentsToBeRendered, ;
  60696.             .PageNo, This.nFrxIndex, lnDynamics)
  60697.             && MAX(_goHelper._nIndex, 1))
  60698.             INSERT INTO (.cOutputAlias) ;
  60699.                 VALUES (m.tnFRXRecno, m.lnRec, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  60700.                 m.tnObjectContinuationType, m.lcNewContents, m.lcNewUNContents, ;
  60701.                 .PageNo, This.nFrxIndex, m.lnDynamics, m.lnRotate)
  60702.         CATCH TO m.loexc
  60703.             SET STEP ON
  60704.         ENDTRY
  60705.     ENDWITH
  60706.     EXIT
  60707. ENDDO
  60708. SET DATASESSION TO (m.lnSession)
  60709. IF NOT EMPTY(This.cMainAlias)
  60710.     IF NOT USED(This.cMainAlias)
  60711.         This.cMainAlias = ""
  60712.     ENDIF
  60713.         SELECT (This.cMainAlias)
  60714.     CATCH
  60715.         SELECT (m.lnSelect)
  60716.     ENDTRY
  60717.     SELECT (m.lnSelect)
  60718. ENDIF
  60719. ENDPROC
  60720. PROCEDURE getfullfrxdata
  60721. *!*    Creates a single CURSOR with the Render + FRX information, to be used
  60722. *!*    by the report listeners to generate the outputs without running the
  60723. *!*    REPORT FORM again.
  60724. *!*    -----------------------------------------------------------------------------
  60725. * Ensure we are in the correct DataSession
  60726. This.ResetDataSession()
  60727. IF EMPTY(This.cOutputAlias)
  60728.     MESSAGEBOX("The helper 'Rendering' cursor is not available.", 16, "Error")
  60729.     RETURN ""
  60730.     IF NOT USED(This.cOutputAlias)
  60731.         USE (This.cOutputAlias) IN 0 SHARED AGAIN
  60732.     ENDIF
  60733. ENDIF
  60734. IF EMPTY(This.cFRXAlias)
  60735.     MESSAGEBOX("The helper 'FRX' cursor is not available.", 16, "Error")
  60736.     RETURN ""
  60737.     IF NOT USED(This.cFRXAlias)
  60738.         USE (This.cFRXAlias) IN 0 SHARED AGAIN
  60739.     ENDIF
  60740. ENDIF
  60741. IF NOT EMPTY(This.cFullOutputAlias)
  60742.     USE IN SELECT(This.cFullOutputAlias)
  60743. ENDIF 
  60744. LOCAL lnSelect, lcFullOutput
  60745. m.lnSelect = SELECT()
  60746. LOCAL loExc as Exception
  60747.     LOCAL lnAliases && , lcCurrFRX
  60748.     m.lnAliases = ALEN(This.aFRXTables, 1)
  60749.     DIMENSION m.laTempData(m.lnAliases)
  60750.     FOR m.n = 1 TO m.lnAliases
  60751.         m.laTempData(m.n) = STRTRAN(SYS(2015), " ", "_")
  60752.         SELECT CAST(RECNO() AS N(4,0)) as nRecno, * FROM (This.aFRXTables(m.n)) INTO CURSOR TempFRX READWRITE
  60753.         SELECT TempFRX
  60754.         * Change some field values to be used to index the object drawing in the output files
  60755. REPLACE ALL RESETRPT WITH 0
  60756. REPLACE ALL RESETRPT WITH 1 FOR OBJTYPE = 7
  60757. REPLACE ALL RESETRPT WITH 2 FOR OBJTYPE = 6
  60758. REPLACE ALL RESETRPT WITH 3 FOR OBJTYPE = 5
  60759. REPLACE ALL RESETRPT WITH 4 FOR OBJTYPE = 8
  60760. REPLACE ALL RESETRPT WITH 5 FOR OBJTYPE = 17
  60761. *!*    OBJTYPE
  60762. *!*    resetrpt    
  60763. *!*    7 - Shape
  60764. *!*    6 - Line
  60765. *!*    5 - Label
  60766. *!*    8 - Field
  60767. *!*    17 - Picture
  60768.         * Rename the fields that can be duplicated during JOIN
  60769.         ALTER TABLE TempFRX rename COLUMN Width  to FRXWidth
  60770.         ALTER TABLE TempFRX rename COLUMN Height to FRXHeight
  60771.         ALTER TABLE TempFRX rename COLUMN Top    to FRXTop
  60772.         INDEX ON nRecno TAG nRecno
  60773. *        SELECT OA.*, ; && OA = Output Alias
  60774.             TempFrx.* ;
  60775.                 FROM (This.cOutputAlias) OA ;
  60776.                 JOIN TempFrx ON OA.FrxRecno = TempFrx.nRecno ;
  60777.                 WHERE FRXINDEX = m.n ;
  60778.                 ORDER BY Page, resetRpt, Top, Left ;
  60779.                 INTO CURSOR (m.laTempData(m.n)) READWRITE
  60780.         SELECT OA.*, ; && OA = Output Alias
  60781.             TempFrx.* ;
  60782.                 FROM (This.cOutputAlias) OA ;
  60783.                 JOIN TempFrx ON OA.FrxRecno = TempFrx.nRecno ;
  60784.                 WHERE FRXINDEX = m.n ;
  60785.                 INTO CURSOR (m.laTempData(m.n)) READWRITE
  60786.         IF _TALLY = 0
  60787.             MESSAGEBOX("Error creating report data. The output will not be rendered correctly.", 16, "Error")
  60788.             SET STEP ON 
  60789.         ENDIF 
  60790.         USE IN SELECT("TempFRX")
  60791.     ENDFOR 
  60792.     IF m.lnAliases > 1
  60793.         SELECT m.laTempData(1)
  60794.         FOR m.n = 2 TO m.lnAliases
  60795.             APPEND FROM DBF(m.laTempData(m.n))
  60796.             USE IN SELECT(m.laTempData(m.n))
  60797.         ENDFOR 
  60798.     ENDIF 
  60799.     * Check if the "cAuxFullOutputAlias" exists, and appends with its data
  60800.     TRY 
  60801.         IF NOT EMPTY(This.cAuxFullOutputAlias)
  60802.             IF NOT USED(This.cAuxFullOutputAlias)
  60803.                 USE (This.cAuxFullOutputAlias) IN 0 SHARED AGAIN
  60804.             ENDIF
  60805.             SELECT m.laTempData(1)
  60806.             APPEND FROM DBF(This.cAuxFullOutputAlias)
  60807.         ENDIF 
  60808.     CATCH TO m.loExc
  60809.         SET STEP ON 
  60810.     ENDTRY
  60811.     This.cFullOutputAlias = m.laTempData(1)
  60812.     SELECT (This.cFullOutputAlias)
  60813.     SCAN
  60814.         IF Dynamics > 0
  60815.             This.ProcessDynamics()
  60816.         ENDIF
  60817.     ENDSCAN
  60818. CATCH TO m.loExc
  60819.     MESSAGEBOX("Error getting report information" + CHR(13) + ;
  60820.             TRANSFORM(m.loExc.ERRORNO) + " - " + m.loExc.MESSAGE + CHR(13) + ;
  60821.             "Line: " + TRANSFORM(m.loExc.LINENO) + " - " + m.loExc.LINECONTENTS + ;
  60822.             CHR(13) + CHR(13) + "Please inform the details to   vfpimaging@hotmail.com", 16, "FoxyPreviewer Error")
  60823.     This.cFullOutputAlias = ""
  60824. ENDTRY
  60825. SELECT (m.lnSelect)
  60826. RETURN (This.cFullOutputAlias)
  60827. ENDPROC
  60828. PROCEDURE erasetempfiles
  60829. This.resetDataSession()
  60830. * We need to clean all properties properly because the class remains opened
  60831. * waiting for new sessions
  60832. LOCAL n
  60833. FOR m.n = 1 TO ALEN(This.aFRXTables, 1)
  60834.     USE IN SELECT(This.aFRXTables(m.n))
  60835. ENDFOR 
  60836. DIMENSION This.aFRXTables(1)
  60837. This.aFRXTables(1) = ""
  60838. USE IN SELECT(This.cOutputAlias)
  60839. USE IN SELECT(This.cFullOutputAlias)
  60840. USE IN SELECT(This.cFRXAlias)
  60841. USE IN SELECT(This.cAuxFullOutputAlias)
  60842. This.cOutputAlias        = ""
  60843. This.cFullOutputAlias    = ""
  60844. This.cFRXAlias           = ""
  60845. This.cAuxFullOutputAlias = ""
  60846. ENDPROC
  60847. PROCEDURE updateproperties
  60848. Local lcThermClass, loExc
  60849.     IF (VARTYPE(_goHelper) = "O") AND ;
  60850.             _goHelper.lExtended = .F. AND ;
  60851.             VARTYPE(_Screen.oFoxypreviewer) = "O" OR ;
  60852.             (VARTYPE(_goHelper) <> "O" AND VARTYPE(_Screen.oFoxypreviewer) = "O")
  60853.         This.QuietMode       = _Screen.oFoxypreviewer.lQuietMode
  60854.         This.Successor       = _Screen.oFoxypreviewer.cSuccessor
  60855.         This.lExpandFields = _Screen.oFoxypreviewer.lExpandFields
  60856.         LOCAL lnType
  60857.         m.lnType = _Screen.oFoxypreviewer.nThermType
  60858.         IF m.lnType = 1
  60859.             m.lcThermClass = "FXTHERM"
  60860.         ELSE
  60861.             m.lcThermClass = "FOXYTHERM"
  60862.         ENDIF
  60863.         This.fxFeedbackClass = m.lcThermClass
  60864.         _Screen.oFoxypreviewer._oDestScreen = This.CommandClauses.Window
  60865.     ENDIF
  60866. CATCH TO m.loExc
  60867.     SET STEP ON
  60868. ENDTRY
  60869. ENDPROC
  60870. PROCEDURE getdynamicsfromfrx
  60871. LPARAMETERS tnRecno, tcNewContents, tnRotate
  60872. #DEFINE OBJ_COMMENT                  0
  60873. #DEFINE OBJ_LABEL                    5
  60874. #DEFINE OBJ_LINE                     6
  60875. #DEFINE OBJ_RECTANGLE                7
  60876. #DEFINE OBJ_FIELD                    8
  60877. #DEFINE OBJ_PICTURE                 17
  60878. #DEFINE OBJ_VARIABLE                18
  60879. LOCAL lnSession, lnSelect, lcDynamics, lnObjType, lcStyle
  60880. m.lnSelect   = SELECT()
  60881. m.lnSession  = SET("Datasession")
  60882. m.lcDynamics = ""
  60883. * Get info from FRX
  60884. THIS.setFRXDataSession()
  60885. SELECT FRX
  60886. GO m.tnRecno
  60887. m.lnObjType = FRX.ObjType
  60888. m.lcStyle   = FRX.STYLE
  60889. * Restore the datasession
  60890. SET DATASESSION TO(m.lnSession)
  60891. SELECT (m.lnSelect)
  60892. IF EMPTY(m.lcStyle) OR (NOT USED(THIS.cMainAlias)) OR (NOT INLIST(m.lnObjType, OBJ_LABEL, OBJ_FIELD, OBJ_PICTURE))
  60893.     RETURN 0
  60894. ENDIF
  60895. *!* Code to handle the Dynamic Options added in SP2
  60896. LOCAL lcExecWhen, lcDynType, N, llTrue, lcScript, lcNewContents
  60897. m.N = 1
  60898. m.llTrue = .F.
  60899. m.lcScript = ""
  60900. m.lcNewContents = ""
  60901. DO WHILE .T.
  60902.     m.lcDynType = UPPER(STREXTRACT(m.lcStyle, [name="Microsoft.VFP.Reporting.Builder.], ["], m.N))
  60903.     && Possible results: ROTATE, EVALUATECONTENTS
  60904.     DO CASE
  60905.     CASE m.lcDynType == "ROTATE"
  60906.         m.tnRotate = VAL(STREXTRACT(m.lcStyle, [ execute="], ["], m.N))
  60907.         m.N = m.N + 1
  60908.         LOOP
  60909.     CASE EMPTY(m.lcDynType)
  60910.         m.N = 0
  60911.         EXIT
  60912.     OTHERWISE
  60913.     ENDCASE
  60914.     m.lcExecWhen = STREXTRACT(m.lcStyle, [execwhen="], ["], m.N)
  60915.     m.lcExecWhen = THIS.GetStringFromXML(m.lcExecWhen)
  60916.         m.llTrue = EVALUATE(m.lcExecWhen)
  60917.     CATCH
  60918.         m.llTrue = .F.
  60919.     ENDTRY
  60920.     * If the dynamics does not return a logical value, then treat it as false
  60921.     m.llTrue = IIF(VARTYPE(m.llTrue)="L", m.llTrue, .F.)
  60922.     DO CASE
  60923.     CASE m.lcDynType = "ROTATE"
  60924.     CASE m.lcDynType = "EVALUATECONTENTS" AND ;
  60925.             (NOT EMPTY(m.lcExecWhen)) AND ;
  60926.             (m.llTrue)
  60927.         m.lcNewContents = STREXTRACT(m.lcStyle, [ script="], ["], m.N)
  60928.         IF NOT EMPTY(m.lcNewContents)
  60929.             TRY
  60930.                 m.lcNewContents = THIS.GetStringFromXML(m.lcNewContents)
  60931.                 m.lcNewContents = EVALUATE(m.lcNewContents)
  60932.             CATCH TO m.loExc
  60933.                 SET STEP ON
  60934.             ENDTRY
  60935.         ENDIF
  60936.         EXIT
  60937.     OTHERWISE
  60938.     ENDCASE
  60939.     m.N = m.N + 1
  60940. ENDDO
  60941. m.tcNewContents = m.lcNewContents
  60942. RETURN m.N
  60943. *!*    * Dynamic formatting sample
  60944. *!*    <VFPData>
  60945. *!*        <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"/>
  60946. *!*    </VFPData>
  60947. *!*    * Rotation
  60948. *!*    <VFPData>
  60949. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.Rotate" type="R" script="" execute="313" execwhen="" class="" classlib="" declass="" declasslib=""/>
  60950. *!*    </VFPData>
  60951. ENDPROC
  60952. PROCEDURE getprinterinfo
  60953. * See PRTINFO() in Help
  60954. *!*    nPrtOrientation
  60955. *!* ----------------------------------------------------
  60956. *!*    Numeric data type. The following tables list values returned when specifying particular values for nPrinterSetting.
  60957. *!*    If nPrinterSetting is 1, PRTINFO( ) returns the paper orientation as the following:
  60958. *!*    Values  Paper orientation  
  60959. *!*      
  60960. 1    Information not available
  60961. *!*       0    Portrait
  60962. *!*       1    Landscape
  60963. *!*    nPrtPaperSize
  60964. *!* ----------------------------------------------------
  60965. *!*    See complete list in Help
  60966. *!*    Values  Paper size  
  60967. *!*      
  60968. 1      Information not available. Use nPrinterSetting = 3 and nPrinterSetting = 4 to return the paper size. 
  60969. *!*     
  60970. *!*      1       Letter, 8 1/2 x 11 in
  60971. *!*      2       Letter Small, 8 1/2 x 11 in
  60972. *!*      3       Tabloid, 11 x 17 in
  60973. *!*      4       Ledger, 17 x 11 in
  60974. *!*      5       Legal, 8 1/2 x 14 in
  60975. *!*      6       Statement, 5 1/2 x 8 1/2 in
  60976. *!*      7       Executive, 7 1/4 x 10 1/2 in
  60977. *!*      8       A3, 297 x 420 mm
  60978. *!*      9       A4, 210 x 297 mm
  60979. *!*      10      A4, Small 210 x 297 mm
  60980. LOCAL lnSettings, lnOrientation, lcPrinterName, lnOrientationLine, lnPaperSize, lnPaperSizeLine, lcPrinterNameLine
  60981. SELECT FRX
  60982. LOCATE FOR ObjType = 1 and ObjCode = 53
  60983. * make an array out of the settings in the expr field
  60984. m.lnSettings = ALines( laSettings, EXPR )
  60985. * Find the ORIENTATION element and get the value
  60986. m.lnOrientationLine = Ascan( laSettings, "ORIENTATION",1,0,0,4)
  60987. IF m.lnOrientationLine > 0
  60988.     m.lnOrientation = VAL(SUBSTR(laSettings(m.lnOrientationLine), 13))
  60989.     This.nPrtOrientation = m.lnOrientation
  60990. ENDIF
  60991. * Find the PAPERSIZE element and get the value
  60992. m.lnPaperSizeLine = Ascan( laSettings, "PAPERSIZE",1,0,0,4)
  60993. IF m.lnPaperSizeLine > 0
  60994.     m.lnPaperSize = VAL(SUBSTR(laSettings(m.lnPaperSizeLine), 11))
  60995.     This.nPrtPaperSize = m.lnPaperSize
  60996. ENDIF
  60997. * Find the DEVICE element and get the value
  60998. m.lnPrinterNameLine = Ascan( laSettings, "DEVICE",1,0,0,4)
  60999. IF m.lnPrinterNameLine > 0
  61000.     m.lcPrinterName = SUBSTR(m.laSettings(m.lnPrinterNameLine), 8)
  61001.     This.cPrtPrinterName = m.lcPrinterName
  61002. ENDIF
  61003. ENDPROC
  61004. PROCEDURE getstringfromxml
  61005. LPARAMETERS tcText
  61006. * Adjust Html special chars
  61007. m.tcText = STRTRAN(m.tcText, [&] , [&]) && first!
  61008. m.tcText = STRTRAN(m.tcText, [ ], [ ])
  61009. m.tcText = STRTRAN(m.tcText, [<]  , [<])
  61010. m.tcText = STRTRAN(m.tcText, [>]  , [>])
  61011. m.tcText = STRTRAN(m.tcText, ["], ["])
  61012. RETURN m.tcText
  61013. ENDPROC
  61014. PROCEDURE processdynamics
  61015. #Define OBJ_COMMENT                  0
  61016. #Define OBJ_LABEL                    5
  61017. #Define OBJ_LINE                     6
  61018. #Define OBJ_RECTANGLE                7
  61019. #Define OBJ_FIELD                    8
  61020. #Define OBJ_PICTURE                 17
  61021. #Define OBJ_VARIABLE                18
  61022. *!* Code to handle the Dynamic Options added in SP2
  61023. LOCAL lcStyle
  61024. LOCAL lcDynamicString, loExc
  61025. m.lcStyle   = Style
  61026. IF EMPTY(m.lcStyle)
  61027.     RETURN
  61028. ENDIF
  61029. *!* LOCAL lcDynType
  61030. *!*    lcDynType = UPPER(STREXTRACT(lcStyle, [name="Microsoft.VFP.Reporting.Builder.], ["], 1))
  61031. *!*        && Possible results: ROTATE, EVALUATECONTENTS
  61032. *!*    DO CASE
  61033. *!*    CASE lcDynType = "ROTATE"
  61034. *!*    CASE lcDynType = "EVALUATECONTENTS"
  61035. *!*    OTHERWISE
  61036. *!*    ENDCASE
  61037. m.lcDynamicString = STREXTRACT(Style, [<reportdata name="Microsoft.VFP.Reporting.Builder.], [/>], N)
  61038. Local lbReturn As Boolean, lnSelect, lnRecs, lnRecDyn
  61039. m.lnSelect = Select()
  61040. m.lnRecs   = 0
  61041. m.lnRecDyn = Dynamics
  61042.     m.lnRecs = XMLToCursor(m.lcStyle, "_TempDynamics")
  61043. Catch
  61044.     m.lbReturn = .F.
  61045. EndTry
  61046. IF m.lnRecs = 0
  61047.     RETURN
  61048. ENDIF 
  61049. IF USED("_TempDynamics") AND RECCOUNT("_TempDynamics") > 0 THEN
  61050.     SELECT _TempDynamics
  61051.     TRY 
  61052.         GO m.lnRecDyn
  61053.     CATCH TO m.loExc
  61054.         SET STEP ON 
  61055.     ENDTRY
  61056.         TRY
  61057.             SELECT (THIS.cFullOutputAlias)
  61058.             DO CASE
  61059.             CASE ObjType = OBJ_FIELD
  61060. *!*                    IF (VARTYPE(_TempDynamics.Script) = "C") AND (NOT EMPTY(_TempDynamics.Script))
  61061. *!*                        REPLACE Contents WITH _TempDynamics.Script, ;
  61062. *!*                            UNContents WITH STRCONV(_TempDynamics.Script, 5) IN (THIS.cFullOutputAlias)
  61063. *!*                    ENDIF
  61064.                 *    AddProperty(loDynamics, "cValue", _TempDynamics.Script)      && the Replace Expression With
  61065.                 *    AddProperty(loDynamics, "cExecWhen", _TempDynamics.ExecWhen) && the expresion to be evaluate it
  61066.                 IF VARTYPE(_TempDynamics.FName) = "C"
  61067.                     REPLACE FontFace WITH _TempDynamics.FName IN (THIS.cFullOutputAlias)
  61068.                 ENDIF
  61069.                 IF VARTYPE(_TempDynamics.FSIZE) = "N"
  61070.                     REPLACE FONTSIZE WITH _TempDynamics.FSIZE IN (THIS.cFullOutputAlias)
  61071.                 ENDIF
  61072.                 IF VARTYPE(_TempDynamics.FStyle) = "N"
  61073.                     REPLACE FontStyle WITH _TempDynamics.FStyle IN (THIS.cFullOutputAlias)
  61074.                 ENDIF
  61075.                 *!*    <VFPData>
  61076.                 *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.EvaluateContents" type="R" script="Novo texto"
  61077.                 *!*         execute="in_stock > 50" execwhen="in_stock > 50" class="" classlib="" declass="" declasslib=""
  61078.                 *!*         penrgb="0" fillrgb="-1" pena="255" filla="0" fname="Arial" fsize="12" fstyle="0"/>
  61079.                 *!*    </VFPData>
  61080.                 LOCAL lnPenRGB, lnPenR, lnPenG, lnPenB
  61081.                 m.lnPenRGB = _TempDynamics.PenRgb
  61082.                 IF VARTYPE(m.lnPenRgb) <> "N"
  61083.                     m.lnPenRGB = VAL(ALLTRIM(m.lnPenRGB))
  61084.                 ENDIF
  61085.                 IF m.lnPenRgb = -1
  61086.                     STORE 0 TO m.lnPenR, m.lnPenG, m.lnPenB
  61087.                 ELSE
  61088.                     m.lnPenR = BITRSHIFT(BITAND(m.lnPenRGB, 0x0000FF),0)
  61089.                     m.lnPenG = BITRSHIFT(BITAND(m.lnPenRGB, 0x00FF00),8)
  61090.                     m.lnPenB = BITRSHIFT(BITAND(m.lnPenRGB, 0xFF0000),16)
  61091.                 ENDIF
  61092.                 REPLACE PenRed WITH m.lnPenR, ;
  61093.                     PenGreen WITH m.lnPenG, ;
  61094.                     PenBlue WITH m.lnPenB IN (THIS.cFullOutputAlias)
  61095.                 LOCAL lnFillRGB, lnFillR, lnFillG, lnFillB
  61096.                 m.lnFillRGB = _TempDynamics.FillRgb 
  61097.                 IF VARTYPE(m.lnFillRGB) <> "N"
  61098.                     m.lnFillRGB = VAL(ALLTRIM(m.lnFillRGB))
  61099.                 ENDIF
  61100.                 IF m.lnFillRgb = -1
  61101.                     STORE 255 TO m.lnFillR, m.lnFillG, m.lnFillB
  61102.                 ELSE
  61103.                     m.lnFillR = BITRSHIFT(BITAND(m.lnFillRGB, 0x0000FF),0)
  61104.                     m.lnFillG = BITRSHIFT(BITAND(m.lnFillRGB, 0x00FF00),8)
  61105.                     m.lnFillB = BITRSHIFT(BITAND(m.lnFillRGB, 0xFF0000),16)
  61106.                 ENDIF
  61107.                 REPLACE FillRed WITH m.lnFillR, ;
  61108.                         FillGreen WITH m.lnFillG, ;
  61109.                         FillBlue WITH m.lnFillB IN (THIS.cFullOutputAlias)
  61110.                 * New option, allowing opaque backgrounds
  61111.                 * Mode: 0 = Opaque background; 1 = Transparent
  61112.                 IF (VARTYPE(_TempDynamics.FillA) = "N") AND (_TempDynamics.FillA > 0)
  61113.                     REPLACE Mode WITH 0 IN (THIS.cFullOutputAlias)&& Opaque
  61114.                 ELSE
  61115.                     REPLACE Mode WITH 1 IN (THIS.cFullOutputAlias)&& Transparent
  61116.                 ENDIF
  61117.                 m.lbReturn = .T.
  61118.             CASE INLIST(ObjType, OBJ_RECTANGLE, OBJ_IMAGE)
  61119.                 *!*                    AddProperty(loDynamics, "cExecWhen", _TempDynamics.ExecWhen) &&Corresponds to the expresion to be evaluate it
  61120.                 *!*                    AddProperty(loDynamics, "nWidth", Iif(Vartype(_TempDynamics.Width)="C", Int(Val(_TempDynamics.Width)), _TempDynamics.Width)) &&Corresponds to the width assigned
  61121.                 *!*                    AddProperty(loDynamics, "nHeight", Iif(Vartype(_TempDynamics.Height)="C", Int(Val(_TempDynamics.Height)), _TempDynamics.Height)) &&Corresponds to the width assigned
  61122.                 m.lbReturn = .T.
  61123.             ENDCASE
  61124.         CATCH TO m.loExc
  61125.             SET STEP ON 
  61126.             m.lbReturn = .F.
  61127.         ENDTRY
  61128.         SELECT _TempDynamics
  61129. *!*        *!* No check for Rotation Values
  61130. *!*        SCAN FOR _TempDynamics.NAME="Microsoft.VFP.Reporting.Builder.Rotate"
  61131. *!*            ADDPROPERTY(loDynamics, "nRotationDegree", IIF(VARTYPE(_TempDynamics.Execute)="C", INT(VAL(_TempDynamics.Execute)), _TempDynamics.Execute))
  61132. *!*            lbReturn = .T.
  61133. *!*        ENDSCAN
  61134.     SELECT (m.lnSelect)
  61135.     RETURN m.lbReturn
  61136.     m.lbReturn = .F.
  61137. ENDIF
  61138. SELECT (m.lnSelect)
  61139. RETURN m.lbReturn
  61140. *!*    * Dynamic formatting sample
  61141. *!*    <VFPData>
  61142. *!*        <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"/>
  61143. *!*    </VFPData>
  61144. *!*    * Rotation
  61145. *!*    <VFPData>
  61146. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.Rotate" type="R" script="" execute="313" execwhen="" class="" classlib="" declass="" declasslib=""/>
  61147. *!*    </VFPData>
  61148. *!*    <VFPData>
  61149. *!*        <reportdata name="Microsoft.VFP.Reporting.Builder.EvaluateContents" type="R" script="Novo texto" 
  61150. *!*         execute="in_stock > 50" execwhen="in_stock > 50" class="" classlib="" declass="" declasslib="" 
  61151. *!*         penrgb="0" fillrgb="-1" pena="255" filla="0" fname="Arial" fsize="12" fstyle="0"/>
  61152. *!*    </VFPData> 
  61153. ENDPROC
  61154. PROCEDURE onpreviewclose_bind
  61155. LPARAMETERS lPrint
  61156. This.EraseTempFiles()
  61157. This.nFrxIndex = 0
  61158. ENDPROC
  61159. PROCEDURE addtolog
  61160. LPARAMETERS tcInfo, tcMethod
  61161. LOCAL lnSelect, lcAlias, lnDataSession, lcText, CRLF
  61162. m.lnSelect = SELECT()
  61163. m.lcAlias = ALIAS()
  61164. m.lnDataSession = SET("Datasession")
  61165. m.CRLF = CHR(13) + CHR(10)
  61166. m.lcText = m.tcInfo + m.CRLF + ;
  61167.         m.tcMethod + m.CRLF + ;
  61168.         "Select: " + TRANSFORM(m.lnSelect) + " - " + ;
  61169.         "Alias: " + m.lcAlias + " - " + ;
  61170.         "Session: " + TRANSFORM(m.lnDataSession) + m.CRLF + m.CRLF
  61171. STRTOFILE(m.lcText, "c:\FoxyPreviewer_Log.txt", .T.)
  61172. ENDPROC
  61173. PROCEDURE LoadReport
  61174. This.UpdateProperties()
  61175. * If ListenerType hasn't already been set, set it based on whether the report
  61176. * is being printed or previewed.
  61177. WITH This
  61178.     DO CASE 
  61179.     CASE .ListenerType <> -1
  61180.     CASE .CommandClauses.Preview
  61181.         .ListenerType = 3 && 1
  61182.     CASE .CommandClauses.OutputTo = 1
  61183.         .ListenerType = 0
  61184.     ENDCASE 
  61185.     IF .ListenerType = 0
  61186.         .lStoreData = .F.  && There's no need to store the report info when direct printing
  61187.     ENDIF
  61188. ENDWITH 
  61189. DODEFAULT()
  61190. ENDPROC
  61191. PROCEDURE Init
  61192. *!*    IF FILE("c:\FoxyPreviewer_Log.txt")
  61193. *!*        DELETE FILE ("c:\FoxyPreviewer_Log.txt")
  61194. *!*    ENDIF
  61195. This.AddProperty("cOutputAlias"        , '')     && The alias for the cursor to output to
  61196. This.AddProperty("cAuxFullOutputAlias" , '')     && The AUXILIAR alias for the cursor to output to - used by the <TF> feature
  61197. This.AddProperty("lDeleteOnDestroy"    , .T.)     && .T. to delete the table when this object is destroyed
  61198. This.AddProperty("cMainAlias"          , '')
  61199. This.AddProperty("nStartingSession"    , 1)
  61200. This.AddProperty("nStartingRecNo"      , 1)
  61201. This.AddProperty("cStartingAlias"      , "")
  61202. This.AddProperty("lStoreData"          , .T.)   && .T. to store the info from the report in a table
  61203. This.AddProperty("cFullOutputAlias"    , '')    && The name of the cursor that will contain the FULL 
  61204.                                             && report info to regenerate the report in a different format
  61205. This.AddProperty("cFRXDBF"             , '')     && The name of the FRX table to output to
  61206. This.AddProperty("cFRXAlias"           , '')     && The name of the FRX table to output to
  61207. This.AddProperty("aFRXTables[1]"       , '')     && Array of FRX tables
  61208. This.AddProperty("nFRXIndex"           , 0)     && The FRX index
  61209. This.AddProperty("nPrtOrientation"     , 0)
  61210. This.AddProperty("nPrtPaperSize"       , 0)
  61211. This.AddProperty("cPrtPrinterName"     , "")
  61212. IF VARTYPE(_goHelper) = "O"
  61213.     This.QuietMode  = _goHelper.lQuietMode
  61214.     This.lStoreData = .T. && (_goHelper.lExtended = .F.) OR (_goHelper.lShowSearch)
  61215. ENDIF
  61216. DODEFAULT()
  61217. BINDEVENT(This, "OnPreviewClose", This, "OnPreviewClose_Bind", 1)
  61218. ENDPROC
  61219. PROCEDURE BeforeReport
  61220. IF NOT This.lStoreData
  61221.     DODEFAULT()
  61222.     RETURN
  61223. ENDIF
  61224. LOCAL lcTable, lcAlias, llHelper, lnSelect, lnSession, lnIndex
  61225. m.lnSession    = SET("Datasession")
  61226. m.lnSelect    = SELECT()
  61227. m.llHelper    = VARTYPE(_goHelper) = "O"
  61228. This.nFrxIndex = This.nFrxIndex + 1
  61229. IF m.llHelper
  61230.     _goHelper._cOutputAlias = This.cOutputAlias
  61231.         m.lcAlias = _goHelper._oAliases(_goHelper._nIndex)
  61232.     CATCH
  61233.     ENDTRY
  61234. ENDIF
  61235. m.lnIndex = This.nFrxIndex
  61236. m.lcAlias = EVL(UPPER(ALIAS()), "")
  61237. IF EMPTY(m.lcAlias)
  61238.     m.lcAlias = UPPER(ALIAS())
  61239. ENDIF
  61240. This.cMainAlias = m.lcAlias
  61241. * Get the original Alias information
  61242. This.setCurrentDataSession()
  61243. LOCAL lcStartingAlias
  61244. m.lcStartingAlias      = UPPER(ALIAS())
  61245. This.cStartingAlias      = m.lcStartingAlias
  61246. This.nStartingSession = SET("Datasession")
  61247. This.nStartingRecNo      = RECNO()
  61248. WITH This
  61249.     * Store the table info 
  61250.     .SetFRXDataSession()
  61251.     .GetPrinterInfo()
  61252.     LOCAL lcFRXDBF0, lcFRXAlias, lcFRXAlias0
  61253.     m.lcFRXDBF0      = ADDBS(GETENV("TEMP")) + FORCEEXT(SYS(2015), "DBF")
  61254.     m.lcFRXAlias0 = STRTRAN(JUSTSTEM(m.lcFRXDBF0), ' ', '_')
  61255.     m.lcFRXAlias  = STRTRAN(SYS(2015), ' ', '_')
  61256.     * Create a copy of the FRX to be available to export
  61257.     SELECT FRX
  61258.     COPY TO (m.lcFRXDBF0)
  61259.     .ResetDataSession()
  61260.     IF NOT FILE(m.lcFRXDBF0)
  61261.         MESSAGEBOX("Error creating temporary FRX table")
  61262.     ELSE
  61263.         * Load the FRX table as a cursor
  61264.         USE (m.lcFRXDBF0) AGAIN IN 0 ALIAS (m.lcFRXAlias0)
  61265.         * Convert the table to a cursor and delete the local table
  61266.         SELECT * FROM (m.lcFRXAlias0) INTO CURSOR (m.lcFRXAlias) READWRITE
  61267.         USE IN SELECT(m.lcFRXAlias0)
  61268.         ERASE (m.lcFRXDBF0)
  61269.         ERASE FORCEEXT(m.lcFRXDBF0, "FPT")
  61270.         .cFRXAlias = m.lcFRXAlias
  61271.         DIMENSION This.aFRXTables(m.lnIndex)
  61272.         This.aFRXTables(m.lnIndex) = m.lcFRXAlias
  61273.         IF m.lnIndex < 2 && Merged reports, no need to close the cursor
  61274.             * Prepare the Render data cursor
  61275.             .cOutputAlias = STRTRAN(SYS(2015), " ", "_")
  61276.             CREATE CURSOR (.cOutputAlias) (FRXRECNO I, DBFRECNO I, LEFT I, TOP I, ;
  61277.                 WIDTH I, HEIGHT I, CONTTYPE I, CONTENTS M NOCPTRANS, ;
  61278.                 UNCONTENTS M NOCPTRANS, PAGE I, FRXINDEX I, DYNAMICS I, ROTATE I)
  61279.             INDEX ON PAGE     TAG PAGE
  61280.             INDEX ON FRXINDEX TAG FRXINDEX
  61281.         ENDIF
  61282.     ENDIF
  61283. ENDWITH
  61284. * Make sure to select the right DataSession
  61285. SET DATASESSION TO (m.lnSession)
  61286. * Do the usual behavior.
  61287. DODEFAULT()
  61288. * Make sure to select the right DataSession
  61289. SET DATASESSION TO (m.lnSession)
  61290. * In some cases, FoxyPreviewer wants to force the report to select a certain ALIAS, so 
  61291. * here we give it a chance to try to make it
  61292. IF NOT EMPTY(m.lcAlias)
  61293.     SELECT (m.lcAlias)
  61294.     SELECT (m.lnSelect)
  61295. ENDIF
  61296. RETURN
  61297. ENDPROC
  61298. PROCEDURE Render
  61299. LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage
  61300. IF This.lStoreData
  61301.     This.StoreFRXData(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  61302.         m.tcContentsToBeRendered, m.tiGDIPlusImage)
  61303. ENDIF 
  61304. DODEFAULT(m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  61305.     m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage)
  61306. ENDPROC
  61307. PROCEDURE applyfx
  61308. LPARAMETERS m.toListener, m.tcMethodToken,;
  61309.             m.tP1, m.tP2, m.tP3, m.tP4, m.tP5, m.tP6, ;
  61310.             m.tP7, m.tP8, m.tP9, m.tP10, m.tP11, m.tP12
  61311. This.Movable = .T. 
  61312. LOCAL m.liSession            
  61313. IF VARTYPE(m.toListener) = "O" && AND ;
  61314.    (NOT m.toListener.IsSuccessor)
  61315.    DO CASE
  61316.    CASE m.tcMethodToken == "DOSTATUS"
  61317.       THIS.DoStatus(m.toListener, m.tP1)
  61318.    CASE m.tcMethodToken == "UPDATESTATUS"
  61319.       THIS.UpdateStatus(m.toListener)    
  61320.    CASE m.tcMethodToken == "CLEARSTATUS"
  61321.       THIS.ClearStatus(m.toListener)
  61322.    CASE m.tcMethodToken == "AFTERBAND"
  61323.        THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  61324.    CASE m.tcMethodToken == "AFTERREPORT"
  61325.       IF SYS(2024) # "Y" 
  61326.          IF THIS.isRunning AND TYPE("m.toListener.CommandClauses.RecordTotal") = "N"
  61327.             THIS.CurrentRecord = m.toListener.CommandClauses.RecordTotal
  61328.          ENDIF   
  61329.          THIS.UpdateStatus(m.toListener) 
  61330.       ENDIF
  61331.       THIS.designatedDriver = ""
  61332.       THIS.drivingAlias = ""
  61333.       THIS.successorSys2024 = "N"
  61334.       THIS.Visible = .F.
  61335.       THIS.ReportStopRunDateTime = DATETIME()
  61336.       THIS.popUserFeedbackGlobalSets()
  61337.       THIS.ClearStatus(m.toListener)       
  61338.    CASE m.tcMethodToken == "BEFOREBAND"
  61339.       IF THIS.successorSys2024 = "Y" AND ;
  61340.          m.toListener.CurrentPass = LISTENER_FULLPASS
  61341.          * user cancelled during the prepass,
  61342.          * we need to re-cancel.
  61343.          m.liSession = SET("DATASESSION")
  61344.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  61345.          IF USED(THIS.designatedDriver)
  61346.             GO BOTTOM IN (THIS.designatedDriver)
  61347.          ENDIF   
  61348.          SET DATASESSION TO (m.liSession)
  61349.       ENDIF   
  61350.       THIS.synchStatus(m.toListener,m.tP1,m.tP2)
  61351.   CASE m.tcMethodToken == "BEFOREREPORT"
  61352.       THIS.setupReport(m.toListener)
  61353.    CASE m.tcMethodToken == "CANCELREPORT"
  61354.       IF THIS.isRunning AND ;
  61355.          (m.toListener.QuietMode OR ;
  61356.          (m.toListener.pageLimit > 0 AND m.toListener.PageNo > m.toListener.pageLimit) OR ;
  61357.           (NOT m.toListener.AllowModalMessages) OR ;
  61358.           m.toListener.DoMessage(This.CancelQueryText,;  && OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  61359.                                  MB_ICONQUESTION+MB_YESNO, This.AttentionText) =  IDYES )
  61360.           m.toListener.cancelRequested = .T.
  61361.           IF m.toListener.isSuccessor AND NOT EMPTY(THIS.designatedDriver)
  61362.              * NB: FX should ordinarily not be used in a successor,
  61363.              * but this won't hurt and will take care of the exception
  61364.              THIS.successorSys2024 = "Y"
  61365.              m.liSession = SET("DATASESSION")
  61366.              SET DATASESSION TO (m.toListener.CurrentDataSession)
  61367.              IF USED(THIS.designatedDriver)
  61368.                 GO BOTTOM IN (THIS.designatedDriver)
  61369.              ENDIF   
  61370.              SET DATASESSION TO (m.liSession)
  61371.           ENDIF
  61372.           IF SYS(2024) = "Y"  OR m.toListener.IsSuccessor
  61373.              THIS.Visible = .F.
  61374.              IF (m.toListener.pageLimit = -1 OR m.toListener.PageNo <= m.toListener.pageLimit)
  61375.                 m.toListener.DoMessage(;
  61376.                         This.ReportIncompleteText, ; && OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  61377.                         MB_ICONEXCLAMATION, This.AttentionText)
  61378.              ENDIF
  61379.           ENDIF
  61380.           RETURN .F.
  61381.        ELSE
  61382.           RETURN .T. && did not handle, use default behavior          
  61383.        ENDIF          
  61384.    CASE m.tcMethodToken == "LOADREPORT"
  61385.       THIS.ResetUserFeedback(.T.)
  61386.       m.toListener.AddProperty("reportStartRunDatetime",THIS.reportStartRunDatetime)
  61387.       IF NOT (m.toListener.QuietMode OR ;
  61388.            (TYPE("m.toListener.CommandClauses.NoDialog") = "L" AND ;
  61389.            m.toListener.CommandClauses.NoDialog) )
  61390.            THIS.DoStatus(m.toListener,THIS.initStatusText) 
  61391.           * NB: a user can call LoadReport manually,
  61392.           * hence the need for a TYPE() check here.
  61393.       ENDIF   
  61394.       THIS.pushUserFeedbackGlobalSets(m.toListener) 
  61395.    CASE m.tcMethodToken == "UNLOADREPORT"
  61396.       THIS.ReportStopRunDateTime = DATETIME()
  61397.       m.toListener.AddProperty("reportStopRunDatetime",THIS.reportStopRunDatetime)      
  61398.       THIS.IsRunning = .F.
  61399.       THIS.ClearStatus()       
  61400.       IF NOT THIS.persistBetweenRuns 
  61401.          SET DATASESSION TO (m.toListener.ListenerDataSession)      
  61402.          THIS.Release()
  61403.       ENDIF            
  61404.    ENDCASE
  61405.    SET DATASESSION TO (m.toListener.ListenerDataSession)
  61406. ENDIF
  61407. ENDPROC
  61408. PROCEDURE includeseconds_assign
  61409. LPARAMETERS m.vNewVal
  61410. IF VARTYPE(m.vNewVal) = "L"
  61411.    THIS.includeSeconds = m.vNewVal
  61412. ENDIF   
  61413. ENDPROC
  61414. PROCEDURE initstatustext_assign
  61415. LPARAMETERS m.vNewVal
  61416. IF VARTYPE(m.vNewVal) = "C"
  61417.    THIS.initStatusText = m.vNewVal
  61418. ENDIF   
  61419. ENDPROC
  61420. PROCEDURE prepassstatustext_assign
  61421. LPARAMETERS m.vNewVal
  61422. IF VARTYPE(m.vNewVal) = "C"
  61423.    THIS.prepassStatusText = m.vNewVal
  61424. ENDIF   
  61425. ENDPROC
  61426. PROCEDURE runstatustext_assign
  61427. LPARAMETERS vNewVal
  61428. *To do: Modify this routine for the Assign method
  61429. THIS.runStatusText = m.vNewVal
  61430. ENDPROC
  61431. PROCEDURE secondstext_assign
  61432. LPARAMETERS vNewVal
  61433. *To do: Modify this routine for the Assign method
  61434. THIS.secondsText = m.vNewVal
  61435. ENDPROC
  61436. PROCEDURE thermcaption_assign
  61437. LPARAMETERS m.vNewVal
  61438. IF VARTYPE(m.vNewVal) = "C"
  61439.    LOCAL m.lcType, m.cMessage
  61440.    m.cMessage = ""
  61441.    TRY 
  61442.     m.lcType = VARTYPE(EVALUATE(m.vNewVal))
  61443.       IF m.lcType = "C"
  61444.         THIS.thermCaption = m.vNewVal
  61445.     ENDIF
  61446.    CATCH 
  61447.    ENDTRY     
  61448. ENDIF   
  61449. ENDPROC
  61450. PROCEDURE thermformcaption_assign
  61451. LPARAMETERS m.vNewVal
  61452. IF VARTYPE(m.vNewVal) = "C"
  61453.    THIS.thermFormCaption = m.vNewVal
  61454.    THIS.setThermFormCaption()
  61455. ENDIF   
  61456. ENDPROC
  61457. PROCEDURE thermformheight_assign
  61458. LPARAMETERS m.vNewVal
  61459. IF  VARTYPE(m.vNewVal) = "N" AND ;
  61460.    BETWEEN(m.vNewVal,30,SYSMETRIC(SYSMETRIC_SCREENHEIGHT )-30)  AND ;
  61461.    INT(m.vNewVal) # THIS.thermFormHeight
  61462.    THIS.thermFormHeight = INT(m.vNewVal)
  61463.    IF THIS.thermMargin > THIS.thermFormHeight/4
  61464.       THIS.thermMargin = THIS.thermFormHeight/4
  61465.    ENDIF   
  61466.    THIS.synchUserInterface() 
  61467. ENDIF   
  61468. ENDPROC
  61469. PROCEDURE thermformwidth_assign
  61470. LPARAMETERS m.vNewVal
  61471. IF VARTYPE(m.vNewVal) = "N" AND ;
  61472.    BETWEEN(m.vNewVal,100,SYSMETRIC( SYSMETRIC_SCREENWIDTH  )-100) AND ;
  61473.    INT(m.vNewVal) # THIS.ThermFormWidth 
  61474.    THIS.thermFormWidth = INT(m.vNewVal)
  61475.    IF THIS.thermMargin > THIS.thermFormWidth/4
  61476.       THIS.thermMargin = THIS.thermFormWidth/4
  61477.    ENDIF   
  61478.    THIS.synchUserInterface() 
  61479. ENDIF   
  61480. ENDPROC
  61481. PROCEDURE thermmargin_assign
  61482. LPARAMETERS m.vNewVal
  61483. IF VARTYPE(m.vNewVal) = "N" AND ;
  61484.    BETWEEN(m.vNewVal,1,MIN(THIS.ThermFormHeight/4,THIS.ThermFormWidth/4)) AND ;
  61485.    INT(m.vNewVal) # THIS.thermMargin
  61486.    THIS.thermMargin = INT(m.vNewVal)
  61487.    THIS.synchUserInterface() 
  61488. ENDIF   
  61489. ENDPROC
  61490. PROCEDURE getparentwindowref
  61491. LOCAL m.loForm, m.loTopForm, m.lcInWindow
  61492. * first top form in the list
  61493. * will be the current top form.
  61494. ASSERT TYPE("_SCREEN.ActiveForm") # "O"  OR ;
  61495.        INLIST(_SCREEN.ActiveForm.ShowWindow, 0,1,2)
  61496. m.loTopForm = NULL
  61497. IF TYPE("THIS.CommandClauses.InWindow") = "C"
  61498.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.InWindow))
  61499. ENDIF   
  61500. IF EMPTY(lcInWindow) AND TYPE("THIS.CommandClauses.Window") = "C"
  61501.    m.lcInWindow = UPPER(ALLTRIM(THIS.CommandClauses.Window))
  61502. ENDIF   
  61503. IF NOT EMPTY(m.lcInWindow) 
  61504.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  61505.         IF m.loForm.ShowWindow = 2  AND ;
  61506.            UPPER(m.loForm.Name) == m.lcInWindow
  61507.            m.loTopForm = m.loForm
  61508.            EXIT
  61509.         ENDIF
  61510.      ENDFOR
  61511.      
  61512. ENDIF
  61513. DO CASE
  61514. CASE VARTYPE(m.loTopForm) = "O"
  61515.     * already found
  61516. CASE _SCREEN.FormCount = 0 OR ;
  61517.      (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  61518.      _SCREEN.ActiveForm.ShowWindow = 0 )     && ShowWindow In Screen
  61519.              
  61520.      m.loTopForm = _SCREEN
  61521. CASE (TYPE("_SCREEN.ActiveForm") = "O" AND ;
  61522.       _SCREEN.ActiveForm.ShowWindow = 2 )    && ShowWindow As Top Form
  61523.      m.loTopForm = _SCREEN.ActiveForm
  61524.              
  61525. OTHERWISE 
  61526.                                                
  61527.      FOR EACH m.loForm IN _SCREEN.Forms  FOXOBJECT
  61528.         IF m.loForm.ShowWindow = 2 
  61529.            m.loTopForm = m.loForm
  61530.            EXIT
  61531.         ENDIF
  61532.      ENDFOR
  61533.              
  61534.      IF VARTYPE(m.loTopForm) # "O"
  61535.         m.loTopForm = _SCREEN
  61536.      ENDIF
  61537.                   
  61538. ENDCASE
  61539. IF VARTYPE(m.loTopForm) # "O" OR ;
  61540.    EMPTY(m.loTopForm.Name)
  61541.    m.loTopForm = NULL
  61542. ENDIF
  61543. RETURN m.loTopForm
  61544. ENDPROC
  61545. PROCEDURE getreportscopedriver
  61546. LPARAMETERS m.toListener
  61547. LOCAL m.liSelect, m.lcAlias, ;
  61548.       m.liSkips,  laSkips[1]
  61549. IF m.toListener.FRXDataSession > 0
  61550.    SET DATASESSION TO (m.toListener.FRXDataSession)
  61551.    RETURN .F.
  61552. ENDIF   
  61553. THIS.designatedDriver = THIS.drivingAlias
  61554. * used later if we have to cancel report as
  61555. * a Successor
  61556. IF USED("frx")
  61557.    m.liSelect = SELECT(0)
  61558.    m.lcAlias = ""
  61559.    SELECT FRX
  61560.    * first look for any target alias that
  61561.    * is the same as the driver
  61562.    SCAN ALL FOR ObjType = FRX_OBJTYP_BAND AND ;
  61563.            Objcode = FRX_OBJCOD_DETAIL AND ;
  61564.            TYPE(Expr) = "C" AND ;
  61565.            NOT (EMPTY(Expr)  OR DELETED())
  61566.        m.lcAlias = ALLTRIM(Expr)
  61567.        SET DATASESSION TO (m.toListener.CurrentDataSession)   
  61568.        m.lcAlias = UPPER(EVALUATE(m.lcAlias)) 
  61569.        SET DATASESSION TO (m.toListener.FRXDataSession)              
  61570.        IF m.lcAlias == UPPER(THIS.drivingAlias)
  61571.           EXIT
  61572.        ENDIF
  61573.    ENDSCAN
  61574.    IF m.lcAlias == UPPER(THIS.drivingAlias)
  61575.       SELECT (m.liSelect)
  61576.       * if the driver is also a target alias,
  61577.       * don't touch.
  61578.       * otherwise:
  61579.    ELSE 
  61580.       LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  61581.               Objcode = FRX_OBJCOD_DETAIL AND ;
  61582.               Platform = FRX_PLATFORM_WINDOWS AND ;
  61583.               NOT (EMPTY(Expr) OR DELETED())
  61584.       IF FOUND()
  61585.          * use the first detail band, on the theory
  61586.          * that people are going to put pre-processing 
  61587.          * calculations before other bands, 
  61588.          * so an early band has the best chance to be
  61589.          * the right driver.
  61590.          m.lcAlias = ALLTRIM(Expr)
  61591.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  61592.          THIS.drivingAlias = UPPER(EVALUATE(m.lcAlias))
  61593.          SET DATASESSION TO (m.toListener.FrxDataSession)
  61594.          SELECT (m.liSelect)
  61595.       ELSE   
  61596.          * adjust the driver based on any
  61597.          * one to many relationships we can find.
  61598.          SELECT (m.liSelect)
  61599.          SET DATASESSION TO (m.toListener.CurrentDataSession)
  61600.          m.lcAlias = THIS.drivingAlias
  61601.          m.liSelect = SELECT(0)
  61602.          DO WHILE NOT EMPTY(m.lcAlias)
  61603.             SELECT (m.lcAlias)
  61604.             m.liSkips = ALINES(laSkips,SET("SKIP"),",")
  61605.             IF m.liSkips = 0 OR EMPTY(laSkips[1])
  61606.                THIS.drivingAlias = m.lcAlias
  61607.                m.lcAlias = ""
  61608.             ELSE
  61609.                m.lcAlias = laSkips[1]
  61610.                * it doesn't really matter how many lines there
  61611.                * are in the array; this is not going to be perfect
  61612.                * but we can't predict which child 
  61613.                * has the most records.
  61614.             ENDIF
  61615.          ENDDO
  61616.          SELECT (m.liSelect)
  61617.       ENDIF   
  61618.    ENDIF  
  61619.    RETURN .F.    
  61620. ENDIF
  61621. ENDPROC
  61622. PROCEDURE resetuserfeedback
  61623. LPARAMETERS m.tlResetTimes
  61624. THIS.CurrentRecord = 0
  61625. THIS.PercentDone = 0
  61626. IF m.tlResetTimes
  61627.    THIS.ReportStartRunDateTime= DATETIME()
  61628.    THIS.ReportStopRunDateTime= DTOT({})
  61629.    THIS.thermFormCaption = ""
  61630.    THIS.synchUserInterface()
  61631. ENDIF
  61632. ENDPROC
  61633. PROCEDURE setthermformcaption
  61634. LPARAMETERS tcCommandClausesFile, tcPrintJobName
  61635. IF EMPTY(THIS.ThermFormCaption)
  61636.    IF VARTYPE(tcCommandClausesFile) = "C"
  61637.       LOCAL m.cName, loFP
  61638.         loFP = _Screen.oFoxyPreviewer
  61639.         DO CASE
  61640.         CASE VARTYPE(loFp) = "O" AND NOT EMPTY(NVL(_Screen.oFoxyPreviewer.cTitle, ""))
  61641.             m.cName = _Screen.oFoxyPreviewer.cTitle
  61642.         CASE EMPTY(tcPrintJobName) OR VARTYPE(tcPrintJobName) # "C"
  61643.             m.cName = PROPER(JUSTFNAME(tcCommandClausesFile))
  61644.         OTHERWISE
  61645.             m.cName =  tcPrintJobName
  61646.         ENDCASE
  61647.       THIS.thermFormCaption = ;
  61648.          m.cName + ": " + This.CancelInstrText && OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  61649.    ELSE
  61650.       THIS.thermFormCaption = ""
  61651.    ENDIF
  61652. ENDIF
  61653. This.Caption = THIS.thermFormCaption
  61654. ENDPROC
  61655. PROCEDURE synchstatus
  61656. LPARAMETERS m.toListener, m.nBandObjCode, m.nFRXRecNo
  61657. IF THIS.isRunning AND ;
  61658.    THIS.frxBandRecno = m.nFRXRecNo
  61659.    WITH m.toListener
  61660.       TRY
  61661.          SET DATASESSION TO (.CurrentDataSession)
  61662.          IF THIS.drivingAliasCurrentRecno  # RECNO(THIS.drivingAlias)
  61663.             THIS.currentRecord = THIS.CurrentRecord + 1
  61664.             THIS.drivingAliasCurrentRecno = RECNO(THIS.drivingAlias)
  61665.          ENDIF   
  61666.          IF THIS.currentRecord >= .CommandClauses.RecordTotal
  61667.             IF .CurrentPass = 0 AND .TwoPassProcess
  61668.                THIS.resetUserFeedback() 
  61669.             ELSE
  61670.                THIS.currentRecord = .CommandClauses.RecordTotal
  61671.             ENDIF
  61672.          ENDIF
  61673.          THIS.updateStatus(m.toListener)
  61674.        CATCH TO err
  61675.           #IF OUTPUTCLASS_DEBUGGING 
  61676.               SUSPEND
  61677.           #ENDIF
  61678.        ENDTRY         
  61679.        SET DATASESSION TO (.ListenerDataSession)       
  61680.    ENDWITH      
  61681. ENDIF  
  61682. ENDPROC
  61683. PROCEDURE dostatus
  61684. LPARAMETERS m.toListener, m.cMessage
  61685. LOCAL m.loParentForm, m.lcCaption, m.lcParentFormName
  61686. IF (VARTYPE(m.toListener) # "O") OR (NOT (m.toListener.QuietMode OR ;
  61687.         (THIS.isRunning AND m.toListener.CommandClauses.NoDialog)))
  61688.     IF (This.nLastPercent > 0 AND ;
  61689.                 This.percentDone - This.nLastPercent < This.nDelay  AND ;
  61690.                 This.percentDone <> 100)
  61691.         RETURN
  61692.     ELSE 
  61693.         this.nlastpercent = CEILING(This.percentDone)
  61694.     ENDIF 
  61695.     IF EMPTY(m.cMessage) OR ISNULL(m.cMessage)
  61696.         m.cMessage = ""
  61697.     ENDIF
  61698.     m.lcCaption = EVALUATE(THIS.ThermCaption)
  61699.     WITH This
  61700.         IF THIS.isRunning
  61701.             THIS.Closable = .F.
  61702.             * THIS.Movable = .F.
  61703.         ENDIF
  61704.         .Therm.Value = CEILING(This.percentDone)
  61705.         .ThermLabel.Caption = lcCaption
  61706.         * .Paint()
  61707.         .Draw()  && To ensure the label text will be updated
  61708.         IF NOT .Visible
  61709.             m.loParentForm = THIS.GetParentWindowRef()
  61710.             DO CASE
  61711.             CASE VARTYPE(m.loParentForm) # "O" AND (NOT _SCREEN.Visible)
  61712.                 m.lcParentFormName = "MACDESKTOP"
  61713.             CASE VARTYPE(m.loParentForm) # "O"
  61714.                 m.lcParentFormName = "SCREEN"
  61715.             CASE (NOT m.loParentForm.Visible) AND ;
  61716.                 (m.loParentForm.DeskTop OR NOT EMPTY(m.loParentForm.MacDesktop) OR ;
  61717.                     m.loParentForm.ShowWindow = 2 OR (NOT _SCREEN.Visible))
  61718.                 * in many cases,
  61719.                 * they've probably made a programming error,
  61720.                 * the parent should be visible according to
  61721.                 * the requirements of REPORT FORM ... IN WINDOW
  61722.                 * if it's a WINDOW clause they
  61723.                 * have no need to show it, might not be an error
  61724.                 * Either way, they should see the therm
  61725.                 * to know that the report is progressing
  61726.                 m.lcParentFormName = "MACDESKTOP"
  61727.             CASE (NOT m.loParentForm.Visible)
  61728.                 * same comment as above
  61729.                 m.lcParentFormName = "SCREEN"
  61730.             OTHERWISE
  61731.                 m.lcParentFormName = m.loParentForm.Name
  61732.             ENDCASE
  61733.             SHOW WINDOW (.Name) IN WINDOW (m.lcParentFormName)
  61734.             .AlwaysOnTop = .T.
  61735.             .AutoCenter = .T.
  61736. *            .Visible = .T.
  61737.         ENDIF
  61738.     ENDWITH
  61739.     m.loParentForm = NULL
  61740. ENDIF
  61741. ENDPROC
  61742. PROCEDURE clearstatus
  61743. LPARAMETERS m.toListener
  61744. IF THIS.Visible 
  61745.    THIS.Visible = .F.
  61746. ENDIF
  61747. ENDPROC
  61748. PROCEDURE updatestatus
  61749. LPARAMETERS m.toListener
  61750. IF VARTYPE(m.toListener) = "O" AND THIS.isRunning
  61751.    LOCAL m.liRecTotal, m.lnNewPercent, m.llShow
  61752.    m.liRecTotal = m.toListener.CommandClauses.RecordTotal 
  61753.    IF m.liRecTotal > 0 
  61754.       m.lnNewPercent = ROUND(THIS.CurrentRecord/m.liRecTotal,(THIS.ThermPrecision + 2) ) * 100
  61755.       IF (THIS.PercentDone # m.lnNewPercent)
  61756.          THIS.PercentDone = m.lnNewPercent
  61757.          m.llShow = .T.
  61758.          #IF OUTPUTCLASS_DEBUGGING 
  61759.              ? THIS.PercentDone, THIS.CurrentRecord, m.liRecTotal, m.toListener.PageTotal
  61760.              ? REPL(OUTPUTCLASS_STATUSCHAR_PCT_DONE,INT(THIS.PercentDone/100* OUTPUTCLASS_ONE_HUNDRED_PCT_MARK))+ ;
  61761.                REPL(OUTPUTCLASS_STATUSCHAR_PCT_NOT_DONE,MAX(FLOOR(OUTPUTCLASS_ONE_HUNDRED_PCT_MARK - ;
  61762.                                                             (OUTPUTCLASS_ONE_HUNDRED_PCT_MARK *THIS.PercentDone/100)),0) ) 
  61763.          #ENDIF                
  61764.       ENDIF
  61765.    ELSE
  61766.       m.llShow = .T.         
  61767.    ENDIF   
  61768.    IF m.llShow
  61769.       THIS.DoStatus(m.toListener, ;
  61770.                     IIF(m.toListener.CurrentPass = LISTENER_PREPASS  AND m.toListener.TwoPassProcess,;
  61771.                      THIS.PrepassStatusText, ;
  61772.                      THIS.RunStatusText) )
  61773.    ENDIF
  61774. ENDIF
  61775. ENDPROC
  61776. PROCEDURE pushuserfeedbackglobalsets
  61777. LPARAMETERS m.toListener
  61778. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  61779.    PUSH KEY CLEAR
  61780.    LOCAL m.lcRef
  61781.    SET MESSAGE TO ""
  61782.    THIS.SetNotifyCursor = (SET("Notify",2) = "ON")
  61783.    IF THIS.SetNotifyCursor
  61784.       SET NOTIFY CURSOR OFF
  61785.    ENDIF   
  61786.    THIS.OnEscapeCommand = ON("ESCAPE")   
  61787.    m.lcRef = SYS(2015)   
  61788.    PUBLIC &lcRef.   
  61789.    STORE m.toListener TO (m.lcRef)
  61790.    ON ESCAPE &lcRef..CancelReport()      
  61791.    THIS.EscapeReference = m.lcRef   
  61792.    THIS.SetEscape = (SET("ESCAPE")="OFF") 
  61793.    IF THIS.SetEscape
  61794.       SET ESCAPE ON
  61795.    ENDIF   
  61796. ENDIF   
  61797. ENDPROC
  61798. PROCEDURE popuserfeedbackglobalsets
  61799. IF (NOT INLIST(_VFP.StartMode,2,3,5))
  61800.    LOCAL m.lcRef
  61801.    m.lcRef = THIS.EscapeReference
  61802.    IF (NOT EMPTY(m.lcRef)) AND ;
  61803.        TYPE(m.lcRef) = "O"
  61804.       * push occurred earlier
  61805.       STORE NULL TO (m.lcRef)
  61806.       RELEASE &lcRef.
  61807.       THIS.escapeReference = ""
  61808.       m.lcRef = THIS.OnEscapeCommand
  61809.       ON ESCAPE &lcRef
  61810.       POP KEY
  61811.       IF THIS.SetNotifyCursor
  61812.          SET NOTIFY CURSOR ON
  61813.       ENDIF   
  61814.       IF THIS.SetEscape 
  61815.          SET ESCAPE OFF
  61816.       ENDIF   
  61817.    ENDIF   
  61818. ENDIF   
  61819. ENDPROC
  61820. PROCEDURE setupreport
  61821. LPARAMETERS m.toListener
  61822. LOCAL m.llFRXAvailable, m.lcAlias
  61823. THIS.isRunning = .T.
  61824. WITH m.toListener
  61825.    SET DATASESSION TO (.CurrentDataSession)
  61826.    THIS.DrivingAlias = UPPER(ALIAS())
  61827.    IF .FRXDataSession > 0
  61828.       SET DATASESSION TO (.FRXDataSession)   
  61829.    ENDIF
  61830.    m.llFRXAvailable = THIS.getReportScopeDriver(m.toListener) 
  61831.    IF m.llFRXAvailable
  61832.       THIS.setThermformCaption(m.toListener.CommandClauses.File, m.toListener.PrintJobName)
  61833.       IF TYPE("m.toListener.CommandClauses.Summary") # "L"
  61834.          ADDPROPERTY(.CommandClauses,"Summary",.F.)
  61835.       ENDIF   
  61836.       IF TYPE("m.toListener.CommandClauses.RecordTotal") # "N"
  61837.          ADDPROPERTY(.CommandClauses,"RecordTotal",0)
  61838.       ENDIF   
  61839.       IF TYPE("m.toListener.CommandClauses.NoDialog") # "L"
  61840.         ADDPROPERTY(.CommandClauses,"NoDialog",.F.)
  61841.       ENDIF      
  61842.       SET DATASESSION TO (.FRXDataSession)   
  61843.       THIS.FRXBandRecno = 0
  61844.       SELECT FRX
  61845.       IF .CommandClauses.Summary
  61846.          * don't use groups unless
  61847.          * we're forced to by Summary.
  61848.          * Group usage will not work if
  61849.          * there's a group on .T. or some
  61850.          * other nonsensical expression that
  61851.          * doesn't change.
  61852.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  61853.              Objcode = FRX_OBJCOD_GROUPHEADER AND ;
  61854.              Platform = FRX_PLATFORM_WINDOWS AND ;
  61855.              NOT DELETED()
  61856.          DO WHILE NOT EOF()
  61857.             * find the innermost group
  61858.             THIS.FRXBandRecno = RECNO()
  61859.             CONTINUE
  61860.          ENDDO        
  61861.       
  61862.          IF THIS.frxBandRecno = 0
  61863.             * no groups in a Summary report
  61864.             * doesn't make a lot of sense, but
  61865.             * can happen.
  61866.              LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  61867.                 Platform = FRX_PLATFORM_WINDOWS AND ;
  61868.                 Objcode = FRX_OBJCOD_PAGEHEADER AND ;
  61869.                 NOT DELETED()
  61870.              IF NOT EOF()
  61871.                 THIS.FRXBandRecno = RECNO()
  61872.              ENDIF     
  61873.          ENDIF
  61874.       ENDIF
  61875.       IF THIS.FRXBandRecno = 0
  61876.          * not a Summary report.
  61877.          * look for the appropriate detail
  61878.          * using the report driver
  61879.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  61880.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  61881.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  61882.                     TYPE(Expr) = "C" AND ; 
  61883.                     NOT (EMPTY(Expr) OR DELETED())
  61884.          DO WHILE NOT EOF()
  61885.              m.lcAlias = ALLTRIM(Expr)
  61886.              SET DATASESSION TO (.CurrentDataSession)             
  61887.              m.lcAlias = UPPER(EVALUATE(m.lcAlias))
  61888.              SET DATASESSION TO (.FRXDataSession)                          
  61889.              IF m.lcAlias == UPPER(THIS.DrivingAlias)             
  61890.                 THIS.FRXBandRecno = RECNO()
  61891.              ENDIF   
  61892.              CONTINUE && try not to use the first detail band
  61893.          ENDDO
  61894.       ENDIF   
  61895.       IF THIS.frxBandRecno = 0
  61896.          * couldn't match up a band with
  61897.          * the known driver
  61898.          LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  61899.               Objcode = FRX_OBJCOD_DETAIL AND ;
  61900.               Platform = FRX_PLATFORM_WINDOWS AND ;
  61901.               EMPTY(Expr) AND NOT DELETED()
  61902.          IF NOT EOF()
  61903.             THIS.FRXBandRecno = RECNO()      
  61904.          ELSE
  61905.             IF THIS.FRXBandRecno = 0 
  61906.                LOCATE FOR ObjType = FRX_OBJTYP_BAND AND ;
  61907.                     Platform = FRX_PLATFORM_WINDOWS AND ;
  61908.                     Objcode = FRX_OBJCOD_DETAIL AND ;
  61909.                     NOT DELETED()
  61910.                IF NOT EOF()
  61911.                   THIS.FRXBandRecno = RECNO()
  61912.                ENDIF  
  61913.             ENDIF               
  61914.          ENDIF        
  61915.       ENDIF   
  61916.    ENDIF
  61917.    THIS.DrivingAliasCurrentRecno = 0
  61918.    SET DATASESSION TO (.ListenerDataSession)   
  61919. ENDWITH
  61920. ENDPROC
  61921. PROCEDURE thermprecision_assign
  61922. LPARAMETERS m.vNewVal
  61923. IF VARTYPE(m.vNewVal) = "N" 
  61924.    THIS.thermPrecision  = ABS(INT(m.vNewVal))
  61925. ENDIF 
  61926. ENDPROC
  61927. PROCEDURE persistbetweenruns_assign
  61928. LPARAMETERS vNewVal
  61929. IF VARTYPE(m.vNewVal) = "L"
  61930.    THIS.persistBetweenRuns = m.vNewVal
  61931. ENDIF   
  61932. ENDPROC
  61933. PROCEDURE createtherm
  61934. LPARAMETERS toListener
  61935. *modified to use Carlos Alloatti progress bar 
  61936. #DEFINE SCALEMODE_PIXELS          3       && 3 - Pixel
  61937. #DEFINE BORDER_DOUBLE   2
  61938. * #DEFINE OUTPUTCLASS_RUNSTATUS_LOC            "Creating output... "
  61939.   DECLARE INTEGER GetSysColor IN Win32API INTEGER  
  61940.   LOCAL liThermTop, liThermLeft, liThermWidth, liThermHeight, liSession
  61941.   IF TYPE("toListener.CommandClauses.StartDataSession") = "N"
  61942.      liSession = SET("DATASESSION")
  61943.      TRY
  61944.         SET DATASESSION TO (toListener.CommandClauses.StartDataSession)
  61945.      CATCH WHEN .T.
  61946.         toListener.resetDataSession()
  61947.      ENDTRY
  61948.   ENDIF
  61949.   liThermTop = THIS.ThermMargin + 20
  61950.   liThermLeft = THIS.ThermMargin  
  61951.     WITH This
  61952.      .ScaleMode = SCALEMODE_PIXELS   
  61953.      .Height = THIS.ThermFormHeight
  61954.      .HalfHeightCaption = .T.
  61955.      .Width = THIS.ThermFormWidth
  61956.      .AutoCenter = .T.
  61957.      .BorderStyle = BORDER_DOUBLE  && fixed dialog
  61958.      .ControlBox = .F.
  61959.      .Closable = (NOT THIS.IsRunning)
  61960.      .MaxButton = .F.
  61961.      .MinButton = .F.
  61962.      * .Movable = (NOT THIS.IsRunning)
  61963.      .AlwaysOnTop = .T.
  61964.      .AllowOutput = .F.
  61965.      .ThermLabel.Visible = .T.
  61966.      .ThermLabel.FontBold = .T.
  61967.      .ThermLabel.Left = liThermLeft
  61968.      .ThermLabel.Top = 4
  61969.      .ThermLabel.Width = .Width - (THIS.ThermMargin*2)
  61970.      .ThermLabel.Alignment = 2
  61971.      liThermHeight = .Height - (THIS.ThermMargin* 2) - .ThermLabel.Height
  61972.      liThermWidth =  .Width - (THIS.ThermMargin*2)
  61973.   ENDWITH
  61974.   THIS.SetThermFormCaption()
  61975.   WITH THIS.Therm
  61976.      .Top = liThermTop     
  61977.      .Left = liThermLeft
  61978.      .Height = liThermHeight
  61979.      .Width = liThermWidth
  61980.      .Visible = .T.
  61981.      .Caption = This.RunStatusText && OUTPUTCLASS_RUNSTATUS_LOC 
  61982.   ENDWITH
  61983.   IF NOT EMPTY(liSession)
  61984.      SET DATASESSION TO (liSession)
  61985.   ENDIF
  61986. RETURN NOT ISNULL(THIS.Therm)
  61987. ENDPROC
  61988. PROCEDURE bringwindowtofront
  61989. * Craig Boyd
  61990. * http://fox.wikis.com/wc.dll?Wiki~ForceWindowtoFrontNotJustBlink
  61991.     DECLARE Long BringWindowToTop In Win32API Long
  61992.     DECLARE Long ShowWindow In Win32API Long, Long
  61993.     DECLARE INTEGER GetCurrentThreadId;
  61994.         IN kernel32
  61995.     DECLARE INTEGER GetWindowThreadProcessId IN user32;
  61996.         INTEGER   hWnd,;
  61997.         INTEGER @ lpdwProcId
  61998.     DECLARE INTEGER GetCurrentThreadId;
  61999.         IN kernel32
  62000.     DECLARE INTEGER AttachThreadInput IN user32 ;
  62001.         INTEGER idAttach, ;
  62002.         INTEGER idAttachTo, ;
  62003.         INTEGER fAttach
  62004.     DECLARE INTEGER GetForegroundWindow IN user32
  62005.     DECLARE Long FindWindow In Win32API String, String
  62006. Local lnHWND
  62007. lnHWND = FindWindow(NULL, _Screen.Caption) && we could have just used _screen.hwnd, but this will work for other non-VFP windows as well
  62008. If lnHWND >0
  62009.     LOCAL lnForeThread, lnAppThread
  62010.     lnForeThread = GetWindowThreadProcessId(GetForegroundWindow(), 0) && what process owns foreground window?
  62011.     lnAppThread = GetCurrentThreadId() && what process is our window owned by?
  62012.     IF lnForeThread != lnAppThread && our process doesn't own the foreground window currently
  62013.         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
  62014.         BringWindowToTop(lnHWND)
  62015.         ShowWindow(lnHWND, 3)
  62016.         AttachThreadInput(lnForeThread, lnAppThread, .F.) && ok, we're done bringing our window to the front so let's detach now
  62017.     ELSE && our process owns foreground window so proceed as we always would have
  62018.         BringWindowToTop(lnHWND)
  62019.         ShowWindow(lnHWND, 3)
  62020.     ENDIF
  62021. ENDIF
  62022. ENDPROC
  62023. PROCEDURE Init
  62024. *!*            Declare Long SetParent in User32 Long hWndChild, Long hWndNewParent
  62025. *!*            SetParent(This.HWnd, lnParentWindowHWND)
  62026. This.AddProperty("nLastPercent", 0)
  62027. This.AddProperty("CancelInstrText", "")
  62028. This.AddProperty("CancelQueryText", "")
  62029. This.AddProperty("ReportIncompleteText", "")
  62030. This.AddProperty("AttentionText", "")
  62031. THIS.Name = "X"+SYS(2015)
  62032. WITH THIS
  62033. .Visible = .F.
  62034. *!*    #DEFINE OUTPUTCLASS_INITSTATUS_LOC           "Initializing... "
  62035. *!*    #DEFINE OUTPUTCLASS_PREPSTATUS_LOC           "Running calculation prepass... "
  62036. *!*    #DEFINE OUTPUTCLASS_RUNSTATUS_LOC            "Creating output... "
  62037. *!*    #DEFINE OUTPUTCLASS_TIME_SECONDS_LOC         "sec(s)"
  62038. *!*    #DEFINE OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC  "Press Esc to cancel... "
  62039. *!*    #DEFINE OUTPUTCLASS_REPORT_CANCELQUERY_LOC   "Stop report execution? (If you press 'No', report execution will continue.)"
  62040. *!*    #DEFINE OUTPUTCLASS_REPORT_INCOMPLETE_LOC    "Report execution was cancelled." + CHR(13) + ;
  62041.                                              "Your results are not complete."
  62042. #DEFINE OUTPUTCLASS_THERMCAPTION_LOC2        [m.cMessage+ " "+ ] + ;
  62043.             [TRANSFORM(THIS.PercentDone,"999"+ ] + ;
  62044.             [IIF(THIS.ThermPrecision=0,"","."+REPL("9",THIS.ThermPrecision))) + "%" ] + ;
  62045.             [+ IIF(NOT THIS.IncludeSeconds, "" , "   "+] + ;
  62046.             [TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-] + ;
  62047.             [THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)]
  62048.      .Createtherm()
  62049.     DO CASE
  62050.     CASE VARTYPE(_goHelper) = "O"
  62051.         .InitStatusText       = _goHelper.GetLoc("INITSTATUS") + SPACE(1)
  62052.         .PrepassStatusText    = _goHelper.GetLoc("PREPSTATUS") + SPACE(1) 
  62053.         .RunStatusText        = _goHelper.GetLoc("RUNSTATUS")  + SPACE(1) 
  62054.         .SecondsText          = _goHelper.GetLoc("SECONDS")    + SPACE(1)
  62055.         .CancelInstrText      = _goHelper.GetLoc("CANCELINST") + SPACE(1)
  62056.         .CancelQueryText      = _goHelper.GetLoc("CANCELQUER")
  62057.         .ReportIncompleteText = _goHelper.GetLoc("REPINCOMPL")
  62058.         .AttentionText        = _goHelper.GetLoc("ATTENTION")
  62059.     CASE VARTYPE(_Screen.oFoxyPreviewer) = "O"
  62060. *!*            IF NOT EMPTY(_Screen.oFoxyPreviewer._oDestScreen)
  62061. *!*                LOCAL lcTitle, lnDestHwnd
  62062. *!*                lcTitle = WTITLE(_Screen.oFoxyPreviewer._oDestScreen)
  62063. *!*                DECLARE INTEGER FindWindow IN user32 STRING lpClassName, STRING lpWindowName
  62064. *!*                lnDestHwnd = FindWindow(NULL, lcTitle)
  62065. *!*                IF lnDestHwnd <> 0
  62066. *!*                    Declare Long SetParent in User32 Long hWndChild, Long hWndNewParent
  62067. *!*                    = SetParent(This.HWnd, lnDestHWND)
  62068. *!*                    * SetParent(This.HWnd, lnParentWindowHWND)
  62069. *!*                    * ACTIVATE WINDOW (lcTitle)
  62070. *!*                    * DECLARE INTEGER ShowWindow IN user32 AS ShowWindowA INTEGER hWindow, INTEGER nCmdShow
  62071. *!*                    * = ShowWindowA(lnDestHWND, 1)
  62072. *!*                ENDIF
  62073. *!*            ENDIF 
  62074. *!*            LOCAL lcLanguage
  62075. *!*            lcLanguage = NVL(_Screen.oFoxyPreviewer.cLanguage, _Screen.oFoxyPreviewer._cLanguageFromDBF)
  62076. *!*            =PR_SetLanguage(lcLanguage)
  62077. *!*            
  62078. *!*            .InitStatusText       = PR_GetLoc("INITSTATUS") + SPACE(1)
  62079. *!*            .PrepassStatusText    = PR_GetLoc("PREPSTATUS") + SPACE(1) 
  62080. *!*            .RunStatusText        = PR_GetLoc("RUNSTATUS")  + SPACE(1) 
  62081. *!*            .SecondsText          = PR_GetLoc("SECONDS")    + SPACE(1)
  62082. *!*            .CancelInstrText      = PR_GetLoc("CANCELINST") + SPACE(1)
  62083. *!*            .CancelQueryText      = PR_GetLoc("CANCELQUER")
  62084. *!*            .ReportIncompleteText = PR_GetLoc("REPINCOMPL")
  62085. *!*            .AttentionText        = PR_GetLoc("ATTENTION")
  62086.         .InitStatusText       = _Screen.oFoxyPreviewer._InitStatusText
  62087.         .PrepassStatusText    = _Screen.oFoxyPreviewer._PrepassStatusText
  62088.         .RunStatusText        = _Screen.oFoxyPreviewer._RunStatusText
  62089.         .SecondsText          = _Screen.oFoxyPreviewer._SecondsText
  62090.         .CancelInstrText      = _Screen.oFoxyPreviewer._CancelInstrText
  62091.         .CancelQueryText      = _Screen.oFoxyPreviewer._CancelQueryText
  62092.         .ReportIncompleteText = _Screen.oFoxyPreviewer._ReportIncompleteText
  62093.         .AttentionText        = _Screen.oFoxyPreviewer._AttentionText
  62094.         * This.BringWindowToFront()
  62095.     OTHERWISE
  62096.         .InitStatusText       = OUTPUTCLASS_INITSTATUS_LOC
  62097.         .PrepassStatusText    = OUTPUTCLASS_PREPSTATUS_LOC
  62098.         .RunStatusText        = OUTPUTCLASS_RUNSTATUS_LOC
  62099.         .SecondsText          = OUTPUTCLASS_TIME_SECONDS_LOC
  62100.         .CancelInstrText      = OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC
  62101.         .CancelQueryText      = OUTPUTCLASS_REPORT_CANCELQUERY_LOC
  62102.         .ReportIncompleteText = OUTPUTCLASS_REPORT_INCOMPLETE_LOC
  62103.         .AttentionText        = "Attention"
  62104.      ENDCASE
  62105.     IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  62106.         IF NOT EMPTY(_Screen.oFoxyPreviewer._oDestScreen)
  62107.             This.Visible = .T.
  62108.             LOCAL lcTitle, lnDestHwnd
  62109.             lcTitle = WTITLE(_Screen.oFoxyPreviewer._oDestScreen)
  62110.             DECLARE INTEGER FindWindow IN user32 STRING lpClassName, STRING lpWindowName
  62111.             lnDestHwnd = FindWindow(NULL, lcTitle)
  62112.             IF lnDestHwnd <> 0
  62113.                 DECLARE Long SetParent IN User32 Long hWndChild, Long hWndNewParent
  62114.                 = SetParent(This.HWnd, lnDestHWND)
  62115.                 * SetParent(This.HWnd, lnParentWindowHWND)
  62116.                 * ACTIVATE WINDOW (lcTitle)
  62117.                 * DECLARE INTEGER ShowWindow IN user32 AS ShowWindowA INTEGER hWindow, INTEGER nCmdShow
  62118.                 * = ShowWindowA(lnDestHWND, 1)
  62119.             ENDIF
  62120.         ENDIF
  62121.     ENDIF
  62122.     .thermCaption      = OUTPUTCLASS_THERMCAPTION_LOC2    && Keep original 
  62123.     .resetUserFeedback()
  62124. ENDWITH
  62125. ENDPROC
  62126. oPROCEDURE drawstringjustified
  62127. *************************************************************************************
  62128. ** Method: GpGraphics.DrawStringJustified
  62129. ** Draws the specified text string at the specified location with the specified Brush
  62130. ** and Font objects in a Full Justified format.
  62131. ** History:
  62132. **  2007/01/15: CChalom - Coded
  62133. **  2007/02/02: CChalom - Tweaked to work with ReportListener
  62134. **  2007/04/16: CChalom - Minor fixes for small sentences
  62135. **  2008/06/22: CChalom - Added some tweaks to allow better drawing on reports
  62136. **                        Added new flag - tlJustLast - that will forcely justify the last line
  62137. **  2010/09/22: CChalom - Adapted to include in the ReportListener and use the FFC _GdiPlus.vcx
  62138. *************************************************************************************
  62139. #DEFINE StringFormatFlagsDirectionRightToLeft 1 
  62140. #DEFINE StringFormatFlagsDirectionVertical  2 
  62141. #DEFINE StringFormatFlagsNoFitBlackBox   4 
  62142. #DEFINE StringFormatFlagsDisplayFormatControl 32 
  62143. #DEFINE StringFormatFlagsNoFontFallback   1024 
  62144. #DEFINE StringFormatFlagsMeasureTrailingSpaces 2048 
  62145. #DEFINE StringFormatFlagsNoWrap     4096 
  62146. #DEFINE StringFormatFlagsLineLimit    8192 
  62147. #DEFINE StringFormatFlagsNoClip     16384 
  62148. #DEFINE StringAlignmentNear 0 
  62149. #DEFINE StringAlignmentCenter 1 
  62150. #DEFINE StringAlignmentFar  2 
  62151. #DEFINE EMPTY_FLOAT            0h00000000
  62152. #DEFINE EMPTY_LONG            0h00000000
  62153. #DEFINE EMPTY_SHORT            0h0000
  62154. #DEFINE EMPTY_RECTANGLE        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  62155. #DEFINE EMPTY_RECTANGLEF    EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT
  62156. #DEFINE EMPTY_POINT            EMPTY_LONG+EMPTY_LONG
  62157. #DEFINE EMPTY_POINTF        EMPTY_FLOAT+EMPTY_FLOAT
  62158. #DEFINE EMPTY_SIZE            EMPTY_LONG+EMPTY_LONG
  62159. #DEFINE EMPTY_SIZEF            EMPTY_FLOAT+EMPTY_FLOAT
  62160. #DEFINE EMPTY_METAFILEHEADER  EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  62161.                                 EMPTY_FLOAT+EMPTY_FLOAT+;
  62162.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  62163.                                 EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  62164. #DEFINE EMPTY_ICONINFO        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  62165. #DEFINE EMPTY_BITMAP        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_SHORT+EMPTY_SHORT+EMPTY_LONG
  62166. LPARAMETERS tcString, ;
  62167.             toFont as GpFont of HOME() + "\ffc\_gdiplus.vcx", ;
  62168.             toBrush as GpSolidBrush of HOME() + "\ffc\_gdiplus.vcx", ;
  62169.             toRectangle as GpRectangle of HOME() + "\ffc\_gdiplus.vcx", ;
  62170.             tlJustLast as Boolean, ;
  62171.             toGfx as GpGraphics of HOME() + "\ffc\_gdiplus.vcx"
  62172. LOCAL lhFont, lhGraphics, lhBrush, lcRectF
  62173. LOCAL N, lnSpaceWidth, lnLineHeight, lcText
  62174. LOCAL wImg, hImg, x0, y0
  62175. LOCAL loGfxState AS xfcGraphicsState
  62176. LOCAL lhTempStrFormat, lhStringFormat
  62177. LOCAL lhLeftAlignHandle
  62178. LOCAL lhRightAlignHandle
  62179. LOCAL lnWords, lnWordWidth, lnChars, lcCurrWord, lcCutWord, lnReduce
  62180. LOCAL llEndOfSentence, lnWordsWidth, lnWordsinLine, lnCurrWord, lnCurrLine, lnX, lnY
  62181. LOCAL lnWidthofBetween, lnStringFormatHandle, llLast
  62182. #DEFINE TextRenderingHintAntiAlias        4
  62183. LOCAL loExc AS Exception
  62184.     m.X0   = m.toRectangle.x 
  62185.     m.Y0   = m.toRectangle.y
  62186.     m.wImg = m.toRectangle.w
  62187.     m.hImg = m.toRectangle.h
  62188.     * Save the current state of the graphics handle
  62189.     LOCAL lhGfxState
  62190.     m.lhGfxState = 0        
  62191.     m.toGfx.Save(@m.lhGfxState)
  62192.     * Store Gdi+ handles for MeasureString and DrawString
  62193.     m.lhFont     = m.toFont.GetHandle()
  62194.     m.lhGraphics = m.toGfx.GetHandle()
  62195.     m.lhBrush    = m.toBrush.GetHandle()
  62196.     * Obtain the Font Height to be used as Line Height
  62197.     m.lnLineHeight = FLOOR(m.toFont.GetHeight(m.toGfx))
  62198.     * Adjust the Text String to ease detection of Carriage Returns
  62199.     m.lcText = STRTRAN(m.tcString,CHR(13)+CHR(10), " <CR> ")
  62200.     m.lcText = STRTRAN(m.lcText,CHR(13), " <CR> ")
  62201.     m.lcText = STRTRAN(m.lcText,CHR(10), " <CR> ")
  62202.     m.lcText = m.lcText + " <LASTWORD> "
  62203.     * Ensure Measure String will bring the best measures possible
  62204.     * Set to AntiAlias
  62205.     =xfcGdipSetTextRenderingHint(m.lhGraphics, TextRenderingHintAntiAlias)
  62206.     * Create a String Format object with the Generic Typographic TO obtain
  62207.     *   the most accurate String measurements
  62208.     * Strange, but the recommended for this case is to use a "cloned" StringFormat
  62209.     STORE 0 TO m.lhTempStrFormat, m.lhStringFormat
  62210.     = xfcGdipStringFormatGetGenericTypographic(@m.lhTempStrFormat)
  62211.     = xfcGdipCloneStringFormat(m.lhTempStrFormat, @m.lhStringFormat)
  62212.     * Delete the Temporary StringFormat object created
  62213.     = xfcGdipDeleteStringFormat(m.lhTempStrFormat)
  62214.     * Allow the correct measuring of Spaces
  62215.     = xfcGdipSetStringFormatFlags(m.lhStringFormat, StringFormatFlagsMeasureTrailingSpaces)
  62216.     * Create a StringFormat for LeftAlignment
  62217.     m.lhLeftAlignHandle = 0
  62218.     = xfcGdipCreateStringFormat(0, 0, @m.lhLeftAlignHandle)
  62219.     = xfcGdipSetStringFormatAlign(m.lhLeftAlignHandle, StringAlignmentNear)
  62220.     * Create a StringFormat for RightAlignment
  62221.     m.lhRightAlignHandle = 0
  62222.     = xfcGdipCreateStringFormat(0, 0, @m.lhRightAlignHandle)
  62223.     = xfcGdipSetStringFormatAlign(m.lhRightAlignHandle, StringAlignmentFar)
  62224.     * Measure Space for the given font
  62225.     STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  62226.     = xfcGdipMeasureString( m.lhGraphics;
  62227.         , STRCONV(" " + 0h00,5)    ;
  62228.         , 1 ;
  62229.         , m.lhFont ;
  62230.         , m.lcRectF ;
  62231.         , m.lhStringFormat ;
  62232.         , @m.pcBoundingBox, 0, 0)
  62233.     m.lnSpaceWidth = CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N') + 1
  62234.     m.lnWords = GETWORDCOUNT(m.lcText)
  62235.     DIMENSION m.laWords(m.lnWords,2)
  62236.     * Measure each word
  62237.     m.n = 1
  62238.     DO WHILE .T.
  62239.         m.laWords(m.N,1) = GETWORDNUM(m.lcText, m.N)
  62240.         m.lcCurrWord = m.laWords(m.N,1)
  62241.         STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  62242.         = xfcGdipMeasureString(m.lhGraphics;
  62243.             , STRCONV(m.lcCurrWord + 0h00,5)    ;
  62244.             , LENC(m.lcCurrWord) ;
  62245.             , m.lhFont ;
  62246.             , m.lcRectF ;
  62247.             , m.lhStringFormat ;
  62248.             , @m.pcBoundingBox, 0, 0)
  62249.         m.lnWordWidth = CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N')
  62250.         IF m.lnWordWidth > m.wImg AND (NOT INLIST(m.lcCurrWord, "<CR>", "<LASTWORD>"))
  62251.             m.lnReduce = 1
  62252.             DO WHILE .T.
  62253.                 m.lnChars = ROUND((LENC(m.lcCurrWord) / (m.lnWordWidth / m.wImg)),0) - m.lnReduce
  62254.                 m.lcCutWord = SUBSTR(m.lcCurrWord, 1, m.lnChars)
  62255.                 STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  62256.                 = xfcGdipMeasureString(m.lhGraphics;
  62257.                     , STRCONV(m.lcCutWord + 0h00,5)    ;
  62258.                     , LENC(m.lcCutWord) ;
  62259.                     , m.lhFont ;
  62260.                     , m.lcRectF ;
  62261.                     , m.lhStringFormat ;
  62262.                     , @m.pcBoundingBox, 0, 0)
  62263.                 m.lnWordWidth = CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N')
  62264.                 m.laWords(m.N,1) = m.lcCutWord
  62265.                 IF m.lnWordWidth <= m.wImg
  62266.                     m.lnWords = m.lnWords + 1
  62267.                     DIMENSION m.laWords(m.lnWords,2)
  62268.                     m.laWords(m.lnWords,1) = ""
  62269.                     m.laWords(m.lnWords,2) = 0
  62270.                     
  62271.                     m.lcText = STRTRAN(m.lcText, m.lcCurrWord, ;
  62272.                         m.lcCutWord + SPACE(1) + SUBSTR(m.lcCurrWord, m.lnChars + 1), ;
  62273.                         1, 1)
  62274.                     EXIT
  62275.                 ENDIF
  62276.                 m.lnReduce = m.lnReduce + 1    
  62277.             ENDDO
  62278.         ENDIF
  62279.         m.laWords(m.N,2) = m.lnWordWidth
  62280.         m.N = m.N + 1
  62281.         IF m.N > m.lnWords
  62282.             EXIT
  62283.         ENDIF
  62284.     ENDDO
  62285.     * Before we start drawing, it's wise to restore our Graphics object to
  62286.     *    its original state.
  62287.     * Put back the state of the graphics handle
  62288.     m.toGfx.Restore(m.lhGfxState)            
  62289.     * Start Drawing word by word
  62290.     m.lnCurrWord = 1
  62291.     m.lnCurrLine = 0
  62292.     LOCAL llLastLine
  62293.     m.llLastLine = .F.
  62294.     FOR m.N = 1 TO m.lnWords
  62295.         m.llEndOfSentence   = .F.
  62296.         m.lnWordsWidth  = 0
  62297.         m.lnWordsinLine = 0
  62298.         FOR m.z = m.N TO m.lnWords
  62299.             m.lcChar = LOWER(m.laWords(m.z,1))
  62300.             IF m.laWords(m.z,1) = "<CR>"
  62301.                 m.llEndOfSentence = .T.
  62302.                 EXIT
  62303.             ENDIF
  62304.                     
  62305.             IF m.laWords(m.z,1) = "<LASTWORD>"
  62306.                 m.llLastLine = .T.
  62307.                 m.lnWordsWidth = m.lnWordsWidth - (m.lnSpaceWidth * m.lnWordsinLine) + m.lnSpaceWidth
  62308.                 EXIT
  62309.             ENDIF 
  62310.             m.lnWordsWidth = m.lnWordsWidth + m.laWords(m.z,2) + m.lnSpaceWidth
  62311.             IF m.lnWordsWidth > m.wImg AND m.z > m.N
  62312.                 m.lnWordsWidth = m.lnWordsWidth - m.laWords(m.z,2) - (m.lnSpaceWidth * m.lnWordsinLine)
  62313.                 EXIT
  62314.             ENDIF
  62315.             m.lnWordsinLine = m.lnWordsinLine + 1
  62316.         ENDFOR
  62317.         m.lnWordsWidth = m.lnWordsWidth - m.lnSpaceWidth
  62318.         IF m.z >= m.lnWords
  62319.             m.llEndOfSentence = .T.
  62320.             m.llLastLine = .T.
  62321.         ENDIF
  62322.         IF m.llLastLine
  62323.             IF m.tlJustLast
  62324.                 m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  62325.             ELSE 
  62326.                 m.lnWidthOfBetween = m.lnSpaceWidth
  62327.             ENDIF 
  62328.         ELSE 
  62329.             IF m.llEndOfSentence
  62330.                 m.lnWidthOfBetween = m.lnSpaceWidth
  62331.             ELSE
  62332.                 m.lnWidthOfBetween = (m.wImg - m.lnWordsWidth - m.lnSpaceWidth) / (m.lnWordsinLine - 1)
  62333.             ENDIF
  62334.                     
  62335.         ENDIF 
  62336.         m.lnY = m.Y0 + (m.lnCurrLine * m.lnLineHeight)
  62337.         IF m.lnY > (m.hImg + m.Y0 - m.lnLineHeight / 2)
  62338.             m.n = m.lnWords
  62339.             EXIT
  62340.         ENDIF
  62341.         m.lnX = m.X0
  62342.         FOR m.lnCurrWord = 1 TO m.lnWordsinLine
  62343.             m.llLast = .F.
  62344.             IF m.laWords(m.N,1) = "<CR>" && Ignore
  62345.                 m.N = m.N + 1
  62346.                 LOOP
  62347.             ENDIF
  62348.             IF m.lnCurrWord = m.lnWordsinLine AND NOT m.llEndOfSentence
  62349.                 m.llLast = .T.
  62350.             ENDIF
  62351.             IF m.lnCurrWord = m.lnWordsinLine AND m.llLastLine AND m.tlJustLast
  62352.                 m.llLast = .T.
  62353.             ENDIF
  62354.             IF m.lnWordsInLine = 1
  62355.                 m.lnX = m.X0
  62356.                 m.llLast = .F.
  62357.             ENDIF
  62358.             IF m.llLast
  62359.                 m.lcRectF = BINTOC(m.X0,'F') + BINTOC(m.lnY,'F') + ;
  62360.                     BINTOC(m.wImg,'F') + BINTOC(m.lnY + m.lnLineHeight,'F')
  62361.                 m.lnStringFormatHandle = m.lhRightAlignHandle
  62362.             ELSE
  62363.                 m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + REPLICATE(CHR(0),8)
  62364.                 m.lnStringFormatHandle = m.lhLeftAlignHandle
  62365.             ENDIF
  62366.             = xfcGdipDrawString(m.lhGraphics ;
  62367.                 , STRCONV(m.laWords(m.N,1) + 0h00,5) ;
  62368.                 , LEN(m.laWords(m.N,1)) ;
  62369.                 , m.lhFont ;
  62370.                 , m.lcRectF ;
  62371.                 , m.lnStringFormatHandle ;
  62372.                 , m.lhBrush)
  62373.             m.lnX = m.lnX + m.laWords(m.N,2) + m.lnWidthOfBetween
  62374.             m.N = m.N + 1 && Go to next word
  62375.         ENDFOR
  62376.         m.lnCurrLine = m.lnCurrLine + 1
  62377.         IF m.N >= m.lnWords
  62378.             EXIT
  62379.         ENDIF
  62380.         IF m.laWords(m.N,1) <> "<CR>"
  62381.             m.N = m.N - 1 && Compensate ENDFOR
  62382.         ENDIF
  62383.     ENDFOR
  62384.     * Finished Drawing, so erase the temp objects
  62385.     * Delete the StringFormat object created
  62386.     =xfcGdipDeleteStringFormat(m.lhStringFormat)
  62387.     =xfcGdipDeleteStringFormat(m.lhLeftAlignHandle)
  62388.     =xfcGdipDeleteStringFormat(m.lhRightAlignHandle)
  62389. CATCH TO m.loExc
  62390.     LOCAL loExc as Exception 
  62391.     MESSAGEBOX("Error drawing the justified string !" + CHR(13) + ;
  62392.         TRANSFORM(m.loExc.ERRORNO) + " - " + m.loExc.MESSAGE + CHR(13) + ;
  62393.         "Line: " + TRANSFORM(m.loExc.LINENO) + " - " + m.loExc.LINECONTENTS + CHR(13) + ;
  62394.         lcMsg)
  62395.     MESSAGEBOX(TRANSFORM(m.tcString), 16, "String that generated the error")
  62396.     SET STEP ON 
  62397. ENDTRY
  62398. RETURN NULL
  62399. ENDPROC
  62400. PROCEDURE drawstringintf
  62401. #UNDEF StringFormatFlagsDirectionRightToLeft
  62402. #UNDEF StringFormatFlagsDirectionVertical  
  62403. #UNDEF StringFormatFlagsNoFitBlackBox   
  62404. #UNDEF StringFormatFlagsDisplayFormatControl 
  62405. #UNDEF StringFormatFlagsNoFontFallback   
  62406. #UNDEF StringFormatFlagsMeasureTrailingSpaces 
  62407. #UNDEF StringFormatFlagsNoWrap     
  62408. #UNDEF StringFormatFlagsLineLimit    
  62409. #UNDEF StringFormatFlagsNoClip     
  62410. #UNDEF StringAlignmentNear 
  62411. #UNDEF StringAlignmentCenter 
  62412. #UNDEF StringAlignmentFar  
  62413. #DEFINE StringFormatFlagsDirectionRightToLeft 1
  62414. #DEFINE StringFormatFlagsDirectionVertical  2
  62415. #DEFINE StringFormatFlagsNoFitBlackBox   4
  62416. #DEFINE StringFormatFlagsDisplayFormatControl 32
  62417. #DEFINE StringFormatFlagsNoFontFallback   1024
  62418. #DEFINE StringFormatFlagsMeasureTrailingSpaces 2048
  62419. #DEFINE StringFormatFlagsNoWrap     4096
  62420. #DEFINE StringFormatFlagsLineLimit    8192
  62421. #DEFINE StringFormatFlagsNoClip     16384
  62422. #DEFINE StringAlignmentNear 0
  62423. #DEFINE StringAlignmentCenter 1
  62424. #DEFINE StringAlignmentFar  2
  62425. #DEFINE TextRenderingHintAntiAlias        4
  62426. #DEFINE EMPTY_FLOAT            0h00000000
  62427. #DEFINE EMPTY_LONG            0h00000000
  62428. #DEFINE EMPTY_SHORT            0h0000
  62429. #DEFINE EMPTY_RECTANGLE        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  62430. #DEFINE EMPTY_RECTANGLEF    EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT+EMPTY_FLOAT
  62431. #DEFINE EMPTY_POINT            EMPTY_LONG+EMPTY_LONG
  62432. #DEFINE EMPTY_POINTF        EMPTY_FLOAT+EMPTY_FLOAT
  62433. #DEFINE EMPTY_SIZE            EMPTY_LONG+EMPTY_LONG
  62434. #DEFINE EMPTY_SIZEF            EMPTY_FLOAT+EMPTY_FLOAT
  62435. #DEFINE EMPTY_METAFILEHEADER  EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  62436.     EMPTY_FLOAT+EMPTY_FLOAT+;
  62437.     EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+;
  62438.     EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  62439. #DEFINE EMPTY_ICONINFO        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG
  62440. #DEFINE EMPTY_BITMAP        EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_LONG+EMPTY_SHORT+EMPTY_SHORT+EMPTY_LONG
  62441. LPARAMETERS tnFRXRecNo, tnLeft, tnTop, tnWidth, tnHeight, tnObjectContinuationType, tcContentsToBeRendered, tiGDIPlusImage, ;
  62442.     tcFullText, ;
  62443.     tcFontName0, tnFontSize0 , tnFontStyle0, ;
  62444.     tnFillRed0 , tnFillGreen0, tnFillBlue0 , ;
  62445.     tnPenRed0  , tnPenGreen0 , tnPenBlue0
  62446. * Change the value of this variable to stop the execution when this word is being processed
  62447. LOCAL lcStep
  62448. m.lcStep = "ZZZZZZZZFOXYPREVIEWER"
  62449. LOCAL loFRXRecord, lnSelect
  62450. m.lnSelect = SELECT()
  62451. SELECT (This.cFRXAlias)
  62452. GO m.tnFRXRecNo
  62453. IF EOF()
  62454.      * SET STEP ON 
  62455.     RETURN
  62456. ENDIF
  62457. SCATTER NAME m.loFrxRec
  62458. SELECT (m.lnSelect)
  62459. LOCAL loExc AS Exception
  62460.     LOCAL lhTempStrFormat, lhStringFormat
  62461.     LOCAL lhLeftAlignHandle
  62462.     LOCAL lhRightAlignHandle
  62463.     LOCAL lcRectF, pcBoundingBox
  62464.     LOCAL loGfx as GpGraphics OF HOME() + "\FFC\_GdiPlus.vcx"
  62465.     m.loGfx = This.oGdiGraphics
  62466.     LOCAL lhGfx, lhFont
  62467.     m.lhGfx = m.loGfx.GetHandle()
  62468.     * Save the current state of the graphics handle
  62469.     LOCAL lhGfxState
  62470.     m.lhGfxState = 0
  62471.     m.loGfx.Save(@m.lhGfxState)
  62472.     * Ensure Measure String will bring the best measures possible
  62473.     * Set to AntiAlias
  62474.     =xfcGdipSetTextRenderingHint(m.lhGfx, TextRenderingHintAntiAlias)
  62475.     * Create a String Format object with the Generic Typographic TO obtain
  62476.     *   the most accurate String measurements
  62477.     * Strange, but the recommended for this case is to use a "cloned" StringFormat
  62478.     STORE 0 TO m.lhTempStrFormat, m.lhStringFormat
  62479.     = xfcGdipStringFormatGetGenericTypographic(@m.lhTempStrFormat)
  62480.     = xfcGdipCloneStringFormat(m.lhTempStrFormat, @m.lhStringFormat)
  62481.     * Delete the Temporary StringFormat object created
  62482.     = xfcGdipDeleteStringFormat(m.lhTempStrFormat)
  62483.     * Allow the correct measuring of Spaces
  62484.     = xfcGdipSetStringFormatFlags(m.lhStringFormat, StringFormatFlagsMeasureTrailingSpaces)
  62485.     * Create a StringFormat for LeftAlignment
  62486.     m.lhLeftAlignHandle = 0
  62487.     = xfcGdipCreateStringFormat(0, 0, @m.lhLeftAlignHandle)
  62488.     = xfcGdipSetStringFormatAlign(m.lhLeftAlignHandle, StringAlignmentNear)
  62489.     = xfcGdipSetStringFormatLineAlign(m.lhLeftAlignHandle, StringAlignmentFar)  && Force vertical alignment to bottom
  62490.     = xfcGdipSetStringFormatFlags(m.lhLeftAlignHandle, StringFormatFlagsMeasureTrailingSpaces)
  62491.     * Create a StringFormat for RightAlignment
  62492.     m.lhRightAlignHandle = 0
  62493.     = xfcGdipCreateStringFormat(0, 0, @m.lhRightAlignHandle)
  62494.     = xfcGdipSetStringFormatAlign(m.lhRightAlignHandle, StringAlignmentFar)
  62495.     * Generate the array of words
  62496.     This.TFProcess(m.tcFullText)
  62497.     LOCAL lnWords, lnMaxHeight
  62498.     m.lnWords     = ALEN(This.aTFWords, 1)
  62499.     m.lnMaxHeight = 0
  62500.     * Step 1:
  62501.     * Get the measures of all words according to the formatting
  62502.     LOCAL lcWord, lcFont, lnFontSize, lcFontStyle, lnRed, lnGreen, lnBlue, lnBackRed, lnBackGreen, lnBackBlue, n, lnStyle, lnLineHeight
  62503.     LOCAL lnWordWidth, lnWordHeight, lnFontHeight
  62504.     FOR m.n = 1 TO m.lnWords
  62505.         m.lcWord = This.aTFWords(m.n, 1)
  62506.         IF EMPTY(m.lcWord)
  62507.             This.aTFWords(m.n,  1) = ""
  62508.             This.aTFWords(m.n, 11) = 0
  62509.             This.aTFWords(m.n, 12) = 0
  62510.             LOOP
  62511.         ENDIF
  62512.         This.aTFWords(m.n, 1) = ALLTRIM(m.lcWord)
  62513.         m.lcFont      = This.aTFWords(m.n, 2)
  62514.         m.lnFontSize  = This.aTFWords(m.n, 3)
  62515.         m.lcFontStyle = EVL(This.aTFWords(m.n, 4), "")
  62516.         m.lnRed       = This.aTFWords(m.n, 5)
  62517.         m.lnGreen     = This.aTFWords(m.n, 6)
  62518.         m.lnBlue      = This.aTFWords(m.n, 7)
  62519.         IF m.lnRed    = -1
  62520.             This.aTFWords(m.n, 5) = MAX(0, m.tnPenRed0)
  62521.             This.aTFWords(m.n, 6) = MAX(0, m.tnPenGreen0)
  62522.             This.aTFWords(m.n, 7) = MAX(0, m.tnPenBlue0)
  62523.         ENDIF
  62524.         m.lnBackRed     = This.aTFWords(m.n, 8)
  62525.         m.lnBackGreen   = This.aTFWords(m.n, 9)
  62526.         m.lnBackBlue     = This.aTFWords(m.n, 10)
  62527.         IF m.lnBackRed = -1
  62528.             This.aTFWords(m.n, 8) = m.tnFillRed0
  62529.             This.aTFWords(m.n, 9) = m.tnFillGreen0
  62530.             This.aTFWords(m.n,10) = m.tnFillBlue0
  62531.         ENDIF
  62532.         * If the stored value is empty, then we'll use the default stored in the FRX field
  62533.         IF EMPTY(m.lcFont)
  62534.             m.lcFont = m.tcFontName0
  62535.             This.aTFWords(m.n, 2) = m.lcFont
  62536.         ENDIF
  62537.         IF (VARTYPE(m.lnFontSize) <> "N") OR (m.lnFontSize <= 0)
  62538.             m.lnFontSize = m.tnFontSize0
  62539.             This.aTFWords(m.n, 3) = m.lnFontSize
  62540.         ENDIF
  62541.         IF EMPTY(m.lcFontStyle) && If we have no formatting, then use the one determined originally
  62542.             *!*    1   = Bold            BITTEST(tnFontStyle0, 0)
  62543.             *!*    2   = Italic          BITTEST(tnFontStyle0, 1)
  62544.             *!*    4   = Underlined      BITTEST(tnFontStyle0, 2)
  62545.             *!*    128 = Strikethrough   BITTEST(tnFontStyle0, 7)
  62546.             m.lnStyle = 0
  62547.             IF BITTEST(tnFontStyle0, 0) && Bold
  62548.                 m.lnStyle = 1
  62549.             ENDIF
  62550.             IF BITTEST(tnFontStyle0, 1) && Italic
  62551.                 m.lnStyle = m.lnStyle + 2
  62552.             ENDIF
  62553.             IF BITTEST(tnFontStyle0, 2) && Underlined
  62554.                 m.lnStyle = m.lnStyle + 4
  62555.             ENDIF
  62556.             IF BITTEST(tnFontStyle0, 7) && Strikethrough
  62557.                 m.lnStyle = m.lnStyle + 8
  62558.             ENDIF
  62559.         ELSE && NOT EMPTY(m.lcFontStyle)
  62560.             m.lnStyle = 0
  62561.             IF "B" $ m.lcFontStyle
  62562.                 m.lnStyle = 1
  62563.             ENDIF
  62564.             IF "I" $ m.lcFontStyle
  62565.                 m.lnStyle = m.lnStyle + 2
  62566.             ENDIF
  62567.             IF "U" $ m.lcFontStyle
  62568.                 m.lnStyle = m.lnStyle + 4
  62569.             ENDIF
  62570.             IF "S" $ m.lcFontStyle
  62571.                 m.lnStyle = m.lnStyle + 8
  62572.             ENDIF
  62573.         ENDIF 
  62574.         This.aTFWords(m.n, 4) = m.lnStyle
  62575.         *            tnFillRed0 , tnFillGreen0, tnFillBlue0 , ;
  62576.         *            tnPenRed0  , tnPenGreen0 , tnPenBlue
  62577.         * Create a font object using the text object's settings.
  62578.         m.loFont = CREATEOBJECT("GPFont")
  62579.         m.loFont.Create(m.lcFont, m.lnFontSize, m.lnStyle, 3)
  62580.         m.lhFont = m.loFont.GetHandle()
  62581.         * Obtain the Font Height to be used as Line Height
  62582.         m.lnLineHeight = FLOOR(m.loFont.GetHeight(m.loGfx))
  62583.         STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  62584.         = xfcGdipMeasureString(m.lhGfx;
  62585.             , STRCONV(m.lcWord + " " + 0h00,5)    ;
  62586.             , LEN(m.lcWord) + 1 ;
  62587.             , m.lhFont ;
  62588.             , m.lcRectF ;
  62589.             , m.lhStringFormat ;
  62590.             , @m.pcBoundingBox, 0, 0)
  62591.         m.lnWordWidth  = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N'))
  62592.         m.lnWordHeight = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox,13, 4), 'N'))
  62593.         * Get the font height to compare with the height obtained from MeasureString
  62594.         m.lnFontHeight = CEILING(m.loFont.GetHeight(m.loGfx))
  62595.         IF m.lcWord = "[CR]"
  62596.             This.aTFWords(m.n, 11) = 0
  62597.         ELSE 
  62598.             This.aTFWords(m.n, 11) = m.lnWordWidth
  62599.         ENDIF
  62600.         This.aTFWords(m.n, 12) = MAX(m.lnWordHeight, m.lnFontHeight)
  62601.         m.loFont = NULL
  62602.     ENDFOR
  62603. CATCH TO m.loExc
  62604.      SET STEP ON
  62605. ENDTRY
  62606. LOCAL lcRectF, loColor, loBrush, lnX, lnY, lnXNext, lnCurrLine, lnWordHeight, lnY2
  62607. DIMENSION m.laLines(1, 3) && Line, Starting word, Line Height
  62608. m.lnCurrLine   = 1
  62609. m.lnX          = 0
  62610. m.lnY          = m.tnTop
  62611. m.lnWordHeight = 0
  62612. m.lnXNext      = 0
  62613. m.laLines(1,1) = 1  && Line
  62614. m.laLines(1,2) = 1  && Starting word
  62615. m.laLines(1,3) = 0  && Line Height
  62616. m.lnLineHeight = 0
  62617. FOR m.n = 1 TO m.lnWords
  62618.     m.lnWordHeight = This.aTFWords(m.n, 12)
  62619.     m.lnWordWidth  = This.aTFWords(m.n, 11)
  62620.     This.aTFWords(m.n, 13) = m.lnCurrLine
  62621.     * For debugging purposes
  62622.     IF UPPER(This.aTFWords(m.n,1)) = m.lcStep
  62623.         SET STEP ON
  62624.     ENDIF
  62625.     m.lcWord = ALLTRIM(This.aTFWords(m.n, 1))
  62626.     m.lnX = m.lnX + m.lnWordWidth
  62627.     IF (m.lnX > m.tnWidth) OR (m.lcWord = "[CR]")
  62628.         m.laLines(m.lnCurrLine,1) = m.lnCurrLine    && Line
  62629.         m.laLines(m.lnCurrLine,2) = m.n             && Starting word
  62630.         m.laLines(m.lnCurrLine,3) = m.lnLineHeight  && Line Height
  62631.         IF (m.lnCurrLine > 1) AND (m.lcWord = "[CR]")
  62632.             *    laLines(lnCurrLine,3) = laLines(lnCurrLine - 1, 3) && Line Height
  62633.             m.lnX = 0
  62634.         ELSE 
  62635.             m.lnX = m.lnWordWidth
  62636.         ENDIF 
  62637.         * Reset variables, to start a new line
  62638.         m.lnLineHeight = m.lnWordHeight
  62639.         m.lnCurrLine   = m.lnCurrLine + 1
  62640.         This.aTFWords(m.n, 13) = m.lnCurrLine
  62641.         DIMENSION m.laLines(m.lnCurrLine, 3)
  62642.         LOOP
  62643.     ENDIF
  62644.     m.lnLineHeight = MAX(m.lnLineHeight, m.lnWordHeight)
  62645. ENDFOR
  62646. m.laLines(m.lnCurrLine,1) = m.lnCurrLine    && Line
  62647. m.laLines(m.lnCurrLine,2) = m.n             && Starting word
  62648. m.laLines(m.lnCurrLine,3) = m.lnLineHeight  && Line Height
  62649. * Rebuild the words array joining words that have the exact same formatting to a same string.
  62650. * This helps to render a little faster, and improves the drawing of the words, specially for
  62651. * words that are underlined or have background colors
  62652. m.lcOldFormat  = ""
  62653. m.lcNextFormat = ""
  62654. m.lcOldWord    = ""
  62655. m.lcNextWord   = ""
  62656. m.lnCount      = 1
  62657. m.lcCurrWord   = This.aTFWords(1, 1)
  62658. m.lnCurrWidth  = 0
  62659. DIMENSION m.laNewWords(1, 14)
  62660. FOR m.n = 1 TO m.lnWords
  62661.     m.lcNextWord   = This.aTFWords(m.n, 1)
  62662.     IF EMPTY(m.lcNextWord)
  62663.         LOOP
  62664.     ENDIF
  62665.     * For debugging purposes
  62666.     IF UPPER(m.lcNextWord) = m.lcStep
  62667.         SET STEP ON
  62668.     ENDIF
  62669.     m.lcNextFormat = ""
  62670.     FOR m.i = 2 TO 10
  62671.         m.lcNextFormat = m.lcNextFormat + TRANSFORM(This.aTFWords(m.n, m.i))
  62672.     ENDFOR
  62673.     m.lnPrevLine = IIF(m.n = 1, 1, This.aTFWords(m.n-1, 13))
  62674.     m.lnCurrLine = This.aTFWords(m.n, 13)
  62675.     IF (m.lcOldFormat = m.lcNextFormat) AND (m.lnPrevLine = m.lnCurrLine) AND (m.lcNextWord <> "[CR]") AND (m.lcCurrWord <> "[CR]")
  62676.                             && We have a match, so we can join the words
  62677.         m.lcCurrWord  = ALLTRIM(m.lcCurrWord + " " + m.lcNextWord)
  62678.         m.lnCurrWidth = m.lnCurrWidth +  This.aTFWords(m.n, 11)
  62679.         m.laNewWords(m.lnCount - 1, 1)  = m.lcCurrWord
  62680.         m.laNewWords(m.lnCount - 1, 11) = m.lnCurrWidth
  62681.         m.laNewWords(m.lnCount - 1, 12) = This.aTFWords(m.n, 12)
  62682.         m.laNewWords(m.lnCount - 1, 14) = m.lnCurrWidth
  62683.     ELSE
  62684.         DIMENSION m.laNewWords(m.lnCount, 14)
  62685.         m.lcCurrWord = m.lcNextWord
  62686.         m.lnCurrWidth = This.aTFWords(m.n, 11)
  62687.         m.laNewWords(m.lnCount, 1)  = m.lcCurrWord
  62688.         m.laNewWords(m.lnCount, 11) = m.lnCurrWidth
  62689.         m.laNewWords(m.lnCount, 12) = This.aTFWords(m.n, 12)
  62690.         m.laNewWords(m.lnCount, 14) = m.lnCurrWidth
  62691.         FOR m.i = 2 TO 10
  62692.             m.laNewWords(m.lnCount, m.i) = This.aTFWords(m.n, m.i)
  62693.         ENDFOR
  62694.         IF (m.lcCurrWord = "[CR]") AND (m.n > 1)
  62695.             m.laNewWords(m.lnCount, 12) = This.aTFWords(m.n-1, 12)
  62696.         ENDIF
  62697.         m.lnCount = m.lnCount + 1
  62698.         m.lcOldFormat = m.lcNextFormat
  62699.     ENDIF
  62700. ENDFOR
  62701. m.loGfx.Restore(m.lhGfxState)            
  62702. * Measure the words again, in order to get more precision specially for merged words
  62703. FOR m.n = 1 TO ALEN(m.laNewWords, 1)
  62704.     m.lcWord = m.laNewWords(m.n, 1)
  62705.     m.lcWord = EVL(m.lcWord, "")  && by Pavel Celba
  62706.     IF NOT " " $ ALLTRIM(m.lcWord)  && No need to measure again, since it's a single word
  62707.         LOOP
  62708.     ENDIF 
  62709.     * For debugging purposes
  62710.     IF m.lcStep $ UPPER(m.lcWord)
  62711.         SET STEP ON
  62712.     ENDIF
  62713.     m.lcFont        = m.laNewWords(m.n, 2)
  62714.     m.lnFontSize   = m.laNewWords(m.n, 3)
  62715.     m.lcFontStyle  = m.laNewWords(m.n, 4)
  62716.     * Create a font object using the text object's settings.
  62717.     m.loFont = CREATEOBJECT("GPFont")
  62718.     m.loFont.Create(m.lcFont, m.lnFontSize, m.lnStyle, 3)
  62719.     m.lhFont = m.loFont.GetHandle()
  62720.     STORE EMPTY_RECTANGLE TO m.lcRectF, m.pcBoundingBox
  62721.     = xfcGdipMeasureString(m.lhGfx;
  62722.             , STRCONV(m.lcWord + "  " + 0h00,5)    ;
  62723.             , LEN(m.lcWord) + 2 ;
  62724.             , m.lhFont ;
  62725.             , m.lcRectF ;
  62726.             , m.lhStringFormat ;
  62727.             , @m.pcBoundingBox, 0, 0)
  62728.     m.lnWordWidth  = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox, 9, 4), 'N'))
  62729.     m.lnWordHeight = CEILING(CTOBIN(SUBSTR(m.pcBoundingBox,13, 4), 'N'))
  62730.     m.laNewWords(m.n, 11) = MAX(m.laNewWords(m.n, 14), m.lnWordWidth)
  62731.     m.laNewWords(m.n, 12) = m.lnWordHeight
  62732.     m.loFont = NULL
  62733. ENDFOR 
  62734. * Before we start drawing, it's wise to restore our Graphics object to
  62735. *    its original state.
  62736. * Put back the state of the graphics handle
  62737. m.loGfx.Restore(m.lhGfxState)            
  62738. LOCAL lnH2
  62739. m.lnX        = m.tnLeft
  62740. m.lnY        = m.tnTop
  62741. m.lnCurrLine = 1
  62742. m.lnY2       = 0
  62743. m.lnH2       = 0
  62744. FOR m.n = 1 TO ALEN(m.laNewWords, 1)
  62745.     m.lcWord = m.laNewWords(m.n, 1)
  62746.     IF EMPTY(m.lcWord)
  62747.         LOOP
  62748.     ENDIF
  62749.     * For debugging purposes
  62750.     IF m.lcStep $ UPPER(m.lcWord)
  62751.         SET STEP ON
  62752.     ENDIF
  62753. *    m.lnStringFormatHandle = lhStringFormat  && m.lhLeftAlignHandle
  62754.     m.lnStringFormatHandle = m.lhLeftAlignHandle
  62755.     * Create a font object using the text object's settings.
  62756.     m.loFont1 = CREATEOBJECT("GPFont")
  62757.     m.loFont1.Create(m.laNewWords(m.n, 2), ; && Font name
  62758.     m.laNewWords(m.n, 3), ;   && Font size
  62759.     m.laNewWords(m.n, 4), 3) && Font style
  62760.     m.lhFont1 = m.loFont1.GetHandle()
  62761.     m.loColor = CREATEOBJECT("gpColor", ;
  62762.         m.laNewWords(m.n, 5), ; && PenRed
  62763.     m.laNewWords(m.n, 6), ; && PenGreen
  62764.     m.laNewWords(m.n, 7), ; && PenBlue
  62765.     255)                   && Alpha
  62766.     m.loBrush = CREATEOBJECT("gpSolidBrush", m.loColor)
  62767.     *!*                * Add to the array of words
  62768.     *!*                This.aTFWords(lnI, 1)  = m.lcParamWord
  62769.     *!*                This.aTFWords(lnI, 2)  = m.lcParamFName
  62770.     *!*                This.aTFWords(lnI, 3)  = m.lnParamFSize
  62771.     *!*                This.aTFWords(lnI, 4)  = m.lcParamFStyle
  62772.     *!*                This.aTFWords(lnI, 5)  = m.lnParamCRed
  62773.     *!*                This.aTFWords(lnI, 6)  = m.lnParamCGreen
  62774.     *!*                This.aTFWords(lnI, 7)  = m.lnParamCBlue
  62775.     *!*                This.aTFWords(lnI, 8)  = m.lnParamHRed
  62776.     *!*                This.aTFWords(lnI, 9)  = m.lnParamHGreen
  62777.     *!*                This.aTFWords(lnI, 10) = m.lnParamHBlue
  62778.     *!*                This.aTFWords(lnI, 11) = WIDTH
  62779.     *!*                This.aTFWords(lnI, 12) = HEIGHT
  62780.     * Check if we have a <BR> - Line jump
  62781.     IF ALLTRIM(m.lcWord) = "[CR]"
  62782.         m.lnX = m.tnLeft
  62783.         m.lnY = m.lnY + m.lnMaxHeight && laNewWords(n, 12)
  62784.         m.lnCurrLine = m.lnCurrLine + 1
  62785.         LOOP
  62786.     ENDIF
  62787.     m.lnXNext = m.lnX + m.laNewWords(m.n, 11)
  62788.     IF m.lnXNext > (m.tnLeft + m.tnWidth) * 1.015
  62789.         m.lnX = m.tnLeft
  62790.         m.lnY = m.lnY + m.lnMaxHeight
  62791.         m.lnCurrLine = m.lnCurrLine + 1
  62792.     ENDIF
  62793.     *!*        laLines(lnCurrLine,1) = lnCurrLine    && Line
  62794.     *!*        laLines(lnCurrLine,2) = n             && Starting word
  62795.     *!*        laLines(lnCurrLine,3) = lnLineHeight  && Line Height
  62796.     TRY 
  62797.         m.lnMaxHeight = EVL(m.laLines(m.lnCurrLine,3), 0)
  62798.     CATCH TO m.loExc
  62799.         m.lnMaxHeight = EVL(m.laLines(m.lnCurrLine-1,3), 0)
  62800.     ENDTRY
  62801.     m.lnH2 = CEILING(m.lnMaxHeight * 1.15)
  62802. *    m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + BINTOC(4*CEILING(laNewWords(n, 11)),'F') + BINTOC(m.lnMaxHeight,'F')
  62803.     m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY,'F') + BINTOC(4*CEILING(m.laNewWords(m.n, 11)),'F') + BINTOC(m.lnH2,'F')
  62804. *    m.lcRectF = BINTOC(m.lnX,'F') + BINTOC(m.lnY2,'F') + BINTOC(4*CEILING(laNewWords(n, 11)),'F') + BINTOC(m.lnMaxHeight,'F')
  62805.     * Draw the background if needed
  62806.     IF m.laNewWords(m.n, 8) > -1
  62807.         m.loBackColor = CREATEOBJECT("gpColor", ;
  62808.                     m.laNewWords(m.n, 8), ; && loObject.FillRed
  62809.                     m.laNewWords(m.n, 9), ; && loObject.FillGreen
  62810.                     m.laNewWords(m.n, 10), ; && loObject.FillBlue
  62811.                     255 ) && Alpha
  62812.         m.loBackBrush = CREATEOBJECT("gpSolidBrush", m.loBackColor)
  62813.         This.oGDIGraphics.FillRectangle(m.loBackBrush, m.lnX, ;
  62814.                     m.lnY, m.laNewWords(m.n,11), m.lnH2) && laNewWords(n,12))
  62815.     ENDIF
  62816.     = xfcGdipDrawString(m.lhGfx ;
  62817.         , STRCONV(m.lcWord + 0h00,5) ;
  62818.         , LEN(m.lcWord) ;
  62819.         , m.lhFont1 ;
  62820.         , m.lcRectF ;
  62821.         , m.lnStringFormatHandle ;
  62822.         , m.loBrush.GetHandle())
  62823.     * Adjust the Y position manually, in order to provide an accurate position for the Alternative outputs
  62824.     * This coordinate will not be used for drawing now, because here GDI+ provides a better aproach to align the strings
  62825.     *     at the bottom
  62826.     m.lnY2 = m.lnY + m.lnMaxHeight - m.laNewWords(m.n, 12)
  62827. CATCH TO m.loexc
  62828.      * SET STEP ON
  62829. ENDTRY 
  62830.     This.TFAddToOutput(m.tnFRXRecNo, m.lnX, m.lnY, m.laNewWords(m.n, 11), m.lnMaxHeight, m.tnObjectContinuationType, m.lcWord, m.tiGDIPlusImage, ;
  62831.             m.laNewWords(m.n, 2),  ; && Font name
  62832.             m.laNewWords(m.n, 3),  ; && Font size
  62833.             m.laNewWords(m.n, 4),  ; && Font style
  62834.             m.laNewWords(m.n, 5),  ; && Pen red
  62835.             m.laNewWords(m.n, 6),  ; && Pen green
  62836.             m.laNewWords(m.n, 7),  ; && Pen blue
  62837.             m.laNewWords(m.n, 8),  ; && Fill red
  62838.             m.laNewWords(m.n, 9),  ; && Fill green
  62839.             m.laNewWords(m.n, 10), ; && Fill blue
  62840.             m.loFrxRec)              && FRX record
  62841.     m.lnX = m.lnX + m.laNewWords(m.n, 11)
  62842.     m.loFont1 = NULL
  62843.     m.loColor = NULL
  62844.     m.loBrush = NULL
  62845. ENDFOR
  62846. * Delete the StringFormat object created
  62847. =xfcGdipDeleteStringFormat(m.lhStringFormat)
  62848. =xfcGdipDeleteStringFormat(m.lhLeftAlignHandle)
  62849. =xfcGdipDeleteStringFormat(m.lhRightAlignHandle)
  62850. SELECT (lnSelect)
  62851. RETURN 
  62852. ENDPROC
  62853. PROCEDURE tfprocess
  62854. * by Eduard Shor (Romania)
  62855. * Preprocesses the tags found
  62856. *-- <b> </b>                                                    :: bold
  62857. *-- <i> </i>                                                    :: italic
  62858. *-- <u> </u>                                                    :: underline
  62859. *-- <s> </s>                                                    :: strikethru
  62860. *-- <color=rgb/ncolor> </color>            // <c=> </c>            :: forecolor
  62861. *-- <highlight=rgb/ncolor> </highlight>    // <h=> </h>            :: backcolor
  62862. *-- <fontname="name"> </fontname>        // <fname=> </fname>    :: font name
  62863. *-- <fontsize=0> </fontsize>            // <fsize=> </fsize>    :: font size
  62864. *-- <fontstyle="BIUS"> </fontstyle>        // <fstyle=> </ftyle>    :: font style string    // will alter <b><i><u><s> previous state
  62865. *?-- color could be save as a number with RGB()
  62866. *?-- could prevent transform if '</' not in string
  62867. * Function ProcessHTF_FoxyPreviewer( tcString )
  62868. LPARAMETERS tcString, tlReturnVanillaString
  62869.     Local ;
  62870.         lcResultString, lcColorStack, lcHighlightStack, lcFontNameStack, lcFontSizeStack, lcFontStyleStack         ,;
  62871.         llBold, llItalic, llUnderline, llStrikeThru, llColor, llHighlight, llFontName, llFontSize, llFontStyle, llWhiteStyled,;
  62872.         lcParamWord, lcParamFName, lnParamFSize, lcParamFStyle    ,;
  62873.         lnParamCRed, lnParamCGreen, lnParamCBlue    ,;
  62874.         lnParamHRed, lnParamHGreen, lnParamHBlue    ,;
  62875.         lcWhiteFName, lnWhiteFSize, lcWhiteFStyle    ,;
  62876.         lnWhiteCRed, lnWhiteCGreen, lnWhiteCBlue    ,;
  62877.         lnWhiteHRed, lnWhiteHGreen, lnWhiteHBlue    ,;
  62878.         lnWords, lnI, lcWord, lcWordLow, lcColorValue, lcTagValue, lcStyle,;
  62879.         lnKStart, lcKString, lcKChunk, lcKTagPre, lckTagValue
  62880.     * CChalom 2011-12-22
  62881.     * Deal with <CR>, adding a special TAG, [CR]
  62882.     m.tcString = STRTRAN(m.tcString, "<BR>", ' [CR] ')
  62883.     m.tcString = STRTRAN(m.tcString, "<br>", ' [CR] ')
  62884.     m.tcString = STRTRAN(m.tcString, CHR(13) + CHR(10), ' [CR] ')
  62885.     m.tcString = STRTRAN(m.tcString, CHR(10) + CHR(13), ' [CR] ')
  62886.     m.tcString = CHRTRAN(m.tcString, CHR(10), ' [CR] ')
  62887.     m.tcString = CHRTRAN(m.tcString, CHR(13), ' [CR] ')
  62888.     LOCAL lcTempString, lcNextChar
  62889.     m.lcTempString = "" 
  62890.     FOR m.n = 1 TO LEN(m.tcString)
  62891.         m.lcNextChar = SUBSTR(m.tcString, m.n, 1)
  62892.         IF m.lcNextChar = "<"
  62893.             m.lcNextChar = " <"
  62894.         ENDIF
  62895.         m.lcTempString = m.lcTempString + m.lcNextChar
  62896.     ENDFOR 
  62897.     m.tcString = m.lcTempString
  62898.     *Set Step On 
  62899.     *-- replace space in tag contents (font names) with a placeholder
  62900.     m.lcKString = ''
  62901.     m.lnKStart    = 1
  62902.     m.lnI        = 1
  62903.     *Set Step On 
  62904.     Do While m.lnI <= Len(m.tcString)
  62905.         *-- 
  62906.         If     Substr(m.tcString,m.lnI,1)='<' And ;
  62907.                 ( ;
  62908.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''), 3),    '<c=','<h='                        ) Or ;
  62909.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''), 7), '<color=','<fname=','<fsize='    ) Or ;
  62910.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''), 8), '<fstyle='                        ) Or ;
  62911.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''),10), '<fontname=','<fontsize='        ) Or ;
  62912.                 Inlist(Left( Strtran( Lower(Substr(m.tcString,m.lnI,30)) ,' ',''),11), '<highlight=','<fontstyle='        ) ;
  62913.                 ) Then 
  62914.               
  62915.             *-- copy to lcKString unprocessed part
  62916.             m.lcKString        = m.lcKString + Substr(m.tcString, m.lnKStart, m.lnI-m.lnKStart)
  62917.             *--             
  62918.             m.lcKChunk         = Substr(m.tcString, m.lnI, Atc('>',Substr(m.tcString,m.lnI)) )
  62919.             *-- lnI will continue with value after the closing tag
  62920.             m.lnI            = m.lnI + Len(m.lcKChunk)-1
  62921.             *-- assign the next starting point for unprocessed text
  62922.             m.lnKStart        = m.lnI + 1
  62923.             *-- remove spaces from tag name
  62924.             m.lcKTagPre        = Strtran(Substr(m.lcKChunk,1,Atc('=',m.lcKChunk)),' ','')
  62925.             *-- replace spaces in tag value with somthing else - chr(31) 
  62926.             m.lcKTagValue    = Substr(m.lcKChunk,Atc('=',m.lcKChunk)+1,Len(m.lcKChunk)-Atc('=',m.lcKChunk)-1)
  62927.             m.lcKTagValue    = Strtran( Alltrim(m.lcKTagValue), Chr(32), Chr(31) )    && '
  62928.             *-- add tag-name + tag-value + closing tag sign to lcKString
  62929.             m.lcKString        = m.lcKString + m.lcKTagPre + m.lckTagValue + '>'
  62930.             *-- 
  62931.         EndIf 
  62932.         *-- 
  62933.         m.lnI = m.lnI + 1 
  62934.         *-- 
  62935.     EndDo 
  62936.     *-- add the last unprocessed text
  62937.     m.lcKString = m.lcKString + Substr(m.tcString, m.lnKStart, Len(m.tcString)-m.lnKStart+1)
  62938.     *-- 
  62939.     *? lcKString
  62940.     Store '' To m.lcResultString, m.lcColorStack, m.lcHighlightStack, m.lcFontNameStack, m.lcFontSizeStack, m.lcFontStyleStack
  62941.     *Set Step On 
  62942.     m.lnWords = Getwordcount(m.lcKString)
  62943.     IF m.lnWords = 0 && Fix by Pavel Celba
  62944.         RETURN ""
  62945.     ENDIF
  62946.     This.aTFWords = .F.
  62947.     DIMENSION This.aTFWords(m.lnWords, 14)
  62948.     For m.lnI = 1 To m.lnWords
  62949.         *-- if it's not the first word // can be removed if you can't draw spaced with backcolor and/or underlined/strikethru
  62950.         *--    will call DrawInReport(' ', cFontName,nFontSize,'US', -1,-1,-1, nHRed,nHGreen,nHBlue)
  62951.         m.llWhiteStyled = (m.lnI>1) And (m.llUnderline Or m.llStrikeThru Or m.llHighlight)
  62952.         If m.llWhiteStyled Then 
  62953.             *-- style+backcolor ptr whitespace
  62954.             m.lcWhiteFName    = Iif( Not m.llFontName,      '',     Getwordnum(m.lcFontNameStack,Getwordcount(m.lcFontNameStack,'|'),'|')  )
  62955.             m.lnWhiteFSize    = Iif( Not m.llFontSize,      -1, Val(Getwordnum(m.lcFontSizeStack,Getwordcount(m.lcFontSizeStack,'|'),'|')) )
  62956.             *m.lcWhiteFStyle    = Iif( Not m.llFontStyle,     '', Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','') )
  62957.             m.lcWhiteFStyle    = Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','')
  62958.             *-- 
  62959.             m.lcColorValue    = Iif( Not m.llColor,        '', Getwordnum(m.lcColorStack,Getwordcount(m.lcColorStack,'|'),'|')  )
  62960.             m.lnWhiteCRed    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  62961.             m.lnWhiteCGreen    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  62962.             m.lnWhiteCBlue    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  62963.             *-- 
  62964.             m.lcColorValue    = Iif( Not m.llHighlight,    '', Getwordnum(m.lcHighlightStack,Getwordcount(m.lcHighlightStack,'|'),'|')  )
  62965.             m.lnWhiteHRed    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  62966.             m.lnWhiteHGreen    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  62967.             m.lnWhiteHBlue    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  62968.             *-- 
  62969.         EndIf 
  62970.         *--
  62971.         *m.lcWord    = Getwordnum(m.tcString,m.lnI)
  62972.         m.lcWord    = Getwordnum(m.lcKString,m.lnI)
  62973.         *Set Step On 
  62974.         *-- add spaces back
  62975.         m.lcWord    = Strtran(m.lcWord,Chr(31),Chr(32))    && '
  62976.         m.lcWordLow    = Lower(m.lcWord)
  62977.         *!*    If LEFT(m.lcWordLow,3)='<c=' Then 
  62978.         *!*        Set Step On 
  62979.         *!*    EndIf 
  62980.         *-- process in loop for consecutive tags: '</s><b><u>sometext</u><i>'
  62981.         Do while     Inlist( Left(m.lcWordLow,3), '<b>','<i>','<u>','<s>','<c=','<h=' )               ;
  62982.                 Or    Inlist( Left(m.lcWordLow,4), '</b>','</i>','</u>','</s>','</c>','</h>' )     ;
  62983.                 Or     Left(m.lcWordLow,7)    ='<color='         Or  Left(m.lcWordLow,8)    ='</color>'     ;
  62984.                 Or     Left(m.lcWordLow,11)='<highlight='     Or     Left(m.lcWordLow,12)='</highlight>'    ;
  62985.                 Or     Left(m.lcWordLow,10)='<fontname='    Or     Left(m.lcWordLow,11)='</fontname>'    ;
  62986.                 Or    Left(m.lcWordLow,10)='<fontsize='    Or    Left(m.lcWordLow,11)='</fontsize>'    ;
  62987.                 Or    Left(m.lcWordLow,11)='<fontstyle='    Or    Left(m.lcWordLow,12)='</fontstyle>'    ;
  62988.                 Or     Left(m.lcWordLow,7)    ='<fname='        Or     Left(m.lcWordLow,8)    ='</fname>'        ;
  62989.                 Or     Left(m.lcWordLow,7)    ='<fsize='        Or     Left(m.lcWordLow,8)    ='</fsize>'        ;
  62990.                 Or     Left(m.lcWordLow,8)    ='<fstyle='        Or     Left(m.lcWordLow,9)    ='</fstyle>'        
  62991.             *-- enable/disable style flags - individual html style tags // will be overwriten by <fontstyle='BUIS'>
  62992.             m.llBold         = (m.llBold         Or Left(m.lcWordLow,3)='<b>') And Left(m.lcWordLow,4)!='</b>'
  62993.             m.llItalic        = (m.llItalic         Or Left(m.lcWordLow,3)='<i>') And Left(m.lcWordLow,4)!='</i>'
  62994.             m.llUnderline    = (m.llUnderline    Or Left(m.lcWordLow,3)='<u>') And Left(m.lcWordLow,4)!='</u>'
  62995.             m.llStrikeThru    = (m.llStrikeThru    Or Left(m.lcWordLow,3)='<s>') And Left(m.lcWordLow,4)!='</s>'
  62996.             *--             
  62997.             *-- if colors, save in stack
  62998.             If Left(m.lcWordLow,3)='<c=' Or Left(m.lcWordLow,7)='<color=' Then 
  62999.                 *-- 
  63000.                 m.lcColorValue    = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  63001.                 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
  63002.                 *-- 
  63003.                 m.lcColorStack     = m.lcColorStack + Iif(Not Empty(m.lcColorStack),'|','') + m.lcColorValue
  63004.                 *? '  +colorstack: '+m.lcColorStack
  63005.             EndIf 
  63006.             *-- 
  63007.             If Left(m.lcWordLow,3)='<h=' Or Left(m.lcWordLow,11)='<highlight=' Then 
  63008.                 *-- 
  63009.                 m.lcColorValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  63010.                 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
  63011.                 *-- 
  63012.                 m.lcHighlightStack     = m.lcHighlightStack + Iif(Not Empty(m.lcHighlightStack),'|','') + m.lcColorValue
  63013.                 *? '  +highlightstack: '+m.lcHighlightStack
  63014.             EndIf 
  63015.             *-- 
  63016.             If Left(m.lcWordLow,7)='<fname=' Or Left(m.lcWordLow,10)='<fontname=' Then 
  63017.                 *-- 
  63018.                 m.lcTagValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  63019.                 m.lcTagValue        = Alltrim(Strtran(m.lcTagValue,["],''))
  63020.                 *-- 
  63021.                 m.lcFontNameStack    = m.lcFontNameStack    + Iif(Not Empty(m.lcFontNameStack),'|','') + m.lcTagValue
  63022.                 *? '  +fontnamestack: '+m.lcFontNameStack
  63023.             EndIf 
  63024.             *-- 
  63025.             If Left(m.lcWordLow,7)='<fsize=' Or Left(m.lcWordLow,10)='<fontsize=' Then 
  63026.                 *-- 
  63027.                 m.lcTagValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  63028.                 m.lcTagValue        = Strtran( Strtran(m.lcTagValue,["],'') ,' ','')
  63029.                 *-- 
  63030.                 m.lcFontSizeStack    = m.lcFontSizeStack    + Iif(Not Empty(m.lcFontSizeStack),'|','') + m.lcTagValue
  63031.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  63032.             EndIf 
  63033.             *-- 
  63034.             If Left(m.lcWordLow,8)='<fstyle=' Or Left(m.lcWordLow,11)='<fontstyle=' Then 
  63035.                 *-- 
  63036.                 m.lcTagValue        = Substr(m.lcWord, At('=',m.lcWord)+1, At('>',m.lcWord)-At('=',m.lcWord)-1 )
  63037.                 m.lcTagValue        = Upper( Strtran( Strtran(m.lcTagValue,["],'') ,' ','') )
  63038.                 *-- 
  63039.                 m.lcFontStyleStack    = m.lcFontStyleStack + Iif(Not Empty(m.lcFontStyleStack),'|','') + m.lcTagValue
  63040.                 *? '  +fontnamestack: '+m.lcFontNameStack
  63041.                 m.llBold            = ('B' $ m.lcTagValue)
  63042.                 m.llItalic            = ('I' $ m.lcTagValue)
  63043.                 m.llUnderline        = ('U' $ m.lcTagValue)
  63044.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  63045.             EndIf 
  63046.             *-- if end of color Then remove from stack
  63047.             If Left(m.lcWordLow,4)='</c>' Or Left(m.lcWordLow,8)='</color>' Then 
  63048.                 *--
  63049.                 m.lcColorStack     = ;
  63050.                     Iif( Empty(m.lcColorStack) Or Occurs('|',m.lcColorStack)=0, '',;
  63051.                     Left( m.lcColorStack, AT('|',m.lcColorStack,Occurs('|',m.lcColorStack))-1 ) )
  63052.                 *? '  -colorstack: '+m.lcColorStack
  63053.             EndIf 
  63054.             *-- 
  63055.             If Left(m.lcWordLow,4)='</h>' Or Left(m.lcWordLow,12)='</highlight>' Then 
  63056.                 *-- 
  63057.                 m.lcHighlightStack     = ;
  63058.                     Iif( Empty(m.lcHighlightStack) Or Occurs('|',m.lcHighlightStack)=0, '',;
  63059.                     Left( m.lcHighlightStack, AT('|',m.lcHighlightStack,Occurs('|',m.lcHighlightStack))-1 ) )
  63060.                 *? '  -highlightstack: '+m.lcHighlightStack
  63061.             EndIf 
  63062.             *-- 
  63063.             If Left(m.lcWordLow,8)='</fname>' Or Left(m.lcWordLow,11)='</fontname>' Then 
  63064.                 *-- 
  63065.                 m.lcFontNameStack    = ;
  63066.                     Iif( Empty(m.lcFontNameStack) Or Occurs('|',m.lcFontNameStack)=0, '',;
  63067.                     Left( m.lcFontNameStack, AT('|',m.lcFontNameStack,Occurs('|',m.lcFontNameStack))-1 ) )
  63068.                 *? '  +fontnamestack: '+m.lcFontNameStack
  63069.             EndIf 
  63070.             *-- 
  63071.             If Left(m.lcWordLow,8)='</fsize>' Or Left(m.lcWordLow,11)='</fontsize>' Then 
  63072.                 *-- 
  63073.                 m.lcFontSizeStack    = ;
  63074.                     Iif( Empty(m.lcFontSizeStack) Or Occurs('|',m.lcFontSizeStack)=0, '',;
  63075.                     Left( m.lcFontSizeStack, AT('|',m.lcFontSizeStack,Occurs('|',m.lcFontSizeStack))-1 ) )
  63076.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  63077.             EndIf 
  63078.             *-- 
  63079.             If Left(m.lcWordLow,9)='</fstyle>' Or Left(m.lcWordLow,12)='</fontstyle>' Then 
  63080.                 *-- 
  63081.                 m.lcFontStyleStack    = ;
  63082.                     Iif( Empty(m.lcFontStyleStack) Or Occurs('|',m.lcFontStyleStack)=0, '',;
  63083.                     Left( m.lcFontStyleStack, AT('|',m.lcFontStyleStack,Occurs('|',m.lcFontStyleStack))-1 ) )
  63084.                 *? '  +fontstylestack: '+m.lcFontStyleStack
  63085.                 *-- retrieve curent style in stack to setup flags
  63086.                 m.lcTagValue    = Getwordnum(m.lcFontStyleStack,Getwordcount(m.lcFontStyleStack,'|'),'|')
  63087.                 *-- 
  63088.                 m.llBold            = ('B' $ m.lcTagValue)
  63089.                 m.llItalic            = ('I' $ m.lcTagValue)
  63090.                 m.llUnderline        = ('U' $ m.lcTagValue)
  63091.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  63092.                 *-- 
  63093.             EndIf 
  63094.             *-- some flags are .T. if stack is not empty
  63095.             m.llColor        = Not Empty(m.lcColorStack)
  63096.             m.llHighlight    = Not Empty(m.lcHighlightStack)
  63097.             m.llFontName    = Not Empty(m.lcFontNameStack)
  63098.             m.llFontSize    = Not Empty(m.lcFontSizeStack)
  63099.             m.llFontStyle    = Not Empty(m.lcFontStyleStack)
  63100.             *-- remove procesed tag
  63101.             m.lcWord     = Substr(m.lcWord,AT('>',m.lcWord)+1)
  63102.             m.lcWordLow    = Lower(m.lcWord)
  63103.         EndDo 
  63104.         *-- setup parameters for DrawInReport
  63105.         m.lcParamFName    = Iif( Not m.llFontName,      '',     Getwordnum(m.lcFontNameStack,Getwordcount(m.lcFontNameStack,'|'),'|')  )
  63106.         m.lnParamFSize    = Iif( Not m.llFontSize,      -1, Val(Getwordnum(m.lcFontSizeStack,Getwordcount(m.lcFontSizeStack,'|'),'|')) )
  63107.         *m.lcParamFStyle    = Iif( Not m.llFontStyle,     '', Iif(m.llBold,'B','') + Iif(m.llItalic,'I','') + Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','') )
  63108.         m.lcParamFStyle    = Iif(m.llBold,'B','') + Iif(m.llItalic,'I','') + Iif(m.llUnderline,'U','') + Iif(m.llStrikeThru,'S','')
  63109.         m.lcColorValue    = Iif( Not m.llColor,        '', Getwordnum(m.lcColorStack,Getwordcount(m.lcColorStack,'|'),'|')  )
  63110.         m.lnParamCRed    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  63111.         m.lnParamCGreen    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  63112.         m.lnParamCBlue    = Iif( Not m.llColor,        -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  63113.         m.lcColorValue    = Iif( Not m.llHighlight,    '', Getwordnum(m.lcHighlightStack,Getwordcount(m.lcHighlightStack,'|'),'|')  )
  63114.         m.lnParamHRed    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,1,',')) )
  63115.         m.lnParamHGreen    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,2,',')) )
  63116.         m.lnParamHBlue    = Iif( Not m.llHighlight,    -1, Val(GetWordNum(m.lcColorValue,3,',')) )
  63117.         *-- proces trailing tags // same as before, in loop for consecutive tags: '</s><b><u>sometext</u><i>'
  63118.         Do while     Inlist( right(m.lcWordLow,3), '<b>','<i>','<u>','<s>','<c=','<h=')           ;
  63119.                 Or    Inlist( right(m.lcWordLow,4), '</b>','</i>','</u>','</s>','</c>','</h>');
  63120.                 ;
  63121.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,3) ='<c='             ;
  63122.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,3) ='<h='             ;
  63123.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7) ='<color='         ;
  63124.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<highlight='     ;
  63125.                 ;
  63126.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontname='     ;
  63127.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontsize='     ;
  63128.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<fontstyle='     ;
  63129.                 ;
  63130.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7) ='<fname='         ;
  63131.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7) ='<fsize='         ;
  63132.                 Or     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,8) ='<fstyle='         ;
  63133.                 ;
  63134.                 Or  Inlist( Substr(m.lcWordLow,Rat('<',m.lcWordLow)), '</color>', '</highlight>', ;
  63135.                         '</fontname>', '</fontsize>', '</fontstyle>', '</fname>', '</fsize>', '</fstyle>' )    ;
  63136.             *-- enable/disable style flags
  63137.             m.llBold         = (m.llBold         Or Right(m.lcWordLow,3)='<b>') And Right(m.lcWordLow,4)!='</b>'
  63138.             m.llItalic        = (m.llItalic         Or Right(m.lcWordLow,3)='<i>') And Right(m.lcWordLow,4)!='</i>'
  63139.             m.llUnderline    = (m.llUnderline    Or Right(m.lcWordLow,3)='<u>') And Right(m.lcWordLow,4)!='</u>'
  63140.             m.llStrikeThru    = (m.llStrikeThru    Or Right(m.lcWordLow,3)='<s>') And Right(m.lcWordLow,4)!='</s>'
  63141.             *--             
  63142.             *-- if colors, save in stack
  63143.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,3)='<c=' OR ;
  63144.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,7)='<color=' ;
  63145.                     Then 
  63146.                 *-- 
  63147.                 m.lcColorValue    = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  63148.                 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
  63149.                 *-- 
  63150.                 m.lcColorStack     = m.lcColorStack + Iif(Not Empty(m.lcColorStack),'|','') + m.lcColorValue
  63151.                 *? '  +colorstack: '+m.lcColorStack
  63152.             EndIf 
  63153.             *-- 
  63154.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 3)='<h=' OR ;
  63155.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<highlight=' ;
  63156.                     Then 
  63157.                 *-- 
  63158.                 m.lcColorValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  63159.                 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
  63160.                 *-- 
  63161.                 m.lcHighlightStack     = m.lcHighlightStack + Iif(Not Empty(m.lcHighlightStack),'|','') + m.lcColorValue
  63162.                 *? '  +highlightstack: '+m.lcHighlightStack
  63163.             EndIf 
  63164.             *-- 
  63165.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 7)='<fname=' OR ;
  63166.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontname=' ;
  63167.                     Then 
  63168.                 *-- 
  63169.                 m.lcTagValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  63170.                 m.lcTagValue        = Alltrim(Strtran(m.lcTagValue,["],''))
  63171.                 *-- 
  63172.                 m.lcFontNameStack    = m.lcFontNameStack    + Iif(Not Empty(m.lcFontNameStack),'|','') + m.lcTagValue
  63173.                 *? '  +fontnamestack: '+m.lcFontNameStack
  63174.             EndIf 
  63175.             *-- 
  63176.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 7)='<fsize=' OR ;
  63177.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,10)='<fontsize=' ;
  63178.                     Then 
  63179.                 *-- 
  63180.                 m.lcTagValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  63181.                 m.lcTagValue        = Strtran( Strtran(m.lcTagValue,["],'') ,' ','')
  63182.                 *-- 
  63183.                 m.lcFontSizeStack    = m.lcFontSizeStack    + Iif(Not Empty(m.lcFontSizeStack),'|','') + m.lcTagValue
  63184.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  63185.             EndIf 
  63186.             *-- 
  63187.             If        Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) , 8)='<fstyle=' OR ;
  63188.                     Left( Substr(m.lcWordLow,Rat('<',m.lcWordLow)) ,11)='<fontstyle=' ;
  63189.                     Then 
  63190.                 *-- 
  63191.                 m.lcTagValue        = Substr(m.lcWord, RAt('=',m.lcWord)+1, RAt('>',m.lcWord)-RAt('=',m.lcWord)-1 )
  63192.                 m.lcTagValue        = Upper( Strtran( Strtran(m.lcTagValue,["],'') ,' ','') )
  63193.                 *-- 
  63194.                 m.lcFontStyleStack    = m.lcFontStyleStack + Iif(Not Empty(m.lcFontStyleStack),'|','') + m.lcTagValue
  63195.                 *? '  +fontnamestack: '+m.lcFontNameStack
  63196.                 m.llBold            = ('B' $ m.lcTagValue)
  63197.                 m.llItalic            = ('I' $ m.lcTagValue)
  63198.                 m.llUnderline        = ('U' $ m.lcTagValue)
  63199.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  63200.                 *-- 
  63201.             EndIf 
  63202.             *-- if end of color Then remove from stack
  63203.             If Right(m.lcWordLow,4)='</c>' Or Right(m.lcWordLow,8)='</color>' Then 
  63204.                 *-- 
  63205.                 m.lcColorStack     = ;
  63206.                     Iif( Empty(m.lcColorStack) Or Occurs('|',m.lcColorStack)=0, '',;
  63207.                     Left( m.lcColorStack, AT('|',m.lcColorStack,Occurs('|',m.lcColorStack))-1 ) )
  63208.                 *? '  -colorstack: '+m.lcColorStack
  63209.             EndIf 
  63210.             *-- 
  63211.             If Right(m.lcWordLow,4)='</h>' Or Right(m.lcWordLow,12)='</highlight>' Then 
  63212.                 *-- 
  63213.                 m.lcHighlightStack     = ;
  63214.                     Iif( Empty(m.lcHighlightStack) Or Occurs('|',m.lcHighlightStack)=0, '',;
  63215.                     Left( m.lcHighlightStack, AT('|',m.lcHighlightStack,Occurs('|',m.lcHighlightStack))-1 ) )
  63216.                 *? '  -highlightstack: '+m.lcHighlightStack
  63217.             EndIf 
  63218.             *-- 
  63219.             If Right(m.lcWordLow,8)='</fname>' Or Right(m.lcWordLow,11)='</fontname>' Then 
  63220.                 *-- 
  63221.                 m.lcFontNameStack     = ;
  63222.                     Iif( Empty(m.lcFontNameStack) Or Occurs('|',m.lcFontNameStack)=0, '',;
  63223.                     Left( m.lcFontNameStack, AT('|',m.lcFontNameStack,Occurs('|',m.lcFontNameStack))-1 ) )
  63224.                 *? '  +fontnamestack: '+m.lcFontNameStack
  63225.             EndIf 
  63226.             *-- 
  63227.             If Right(m.lcWordLow,8)='</fsize>' Or Right(m.lcWordLow,11)='</fontsize>' Then 
  63228.                 *-- 
  63229.                 m.lcFontSizeStack    = ;
  63230.                     Iif( Empty(m.lcFontSizeStack) Or Occurs('|',m.lcFontSizeStack)=0, '',;
  63231.                     Left( m.lcFontSizeStack, AT('|',m.lcFontSizeStack,Occurs('|',m.lcFontSizeStack))-1 ) )
  63232.                 *? '  +fontsizestack: '+m.lcFontSizeStack
  63233.             EndIf 
  63234.             *-- 
  63235.             If Right(m.lcWordLow,9)='</fstyle>' Or Right(m.lcWordLow,12)='</fontstyle>' Then 
  63236.                 *-- 
  63237.                 m.lcFontStyleStack    = ;
  63238.                     Iif( Empty(m.lcFontStyleStack) Or Occurs('|',m.lcFontStyleStack)=0, '',;
  63239.                     Left( m.lcFontStyleStack, AT('|',m.lcFontStyleStack,Occurs('|',m.lcFontStyleStack))-1 ) )
  63240.                 *? '  +fontstylestack: '+m.lcFontStyleStack
  63241.                 *-- retrieve curent style in stack to setup flags
  63242.                 m.lcTagValue    = Getwordnum(m.lcFontStyleStack,Getwordcount(m.lcFontStyleStack,'|'),'|')
  63243.                 *-- 
  63244.                 m.llBold            = ('B' $ m.lcTagValue)
  63245.                 m.llItalic            = ('I' $ m.lcTagValue)
  63246.                 m.llUnderline        = ('U' $ m.lcTagValue)
  63247.                 m.llStrikeThru        = ('S' $ m.lcTagValue)
  63248.                 *-- 
  63249.             EndIf 
  63250.             *-- some flags are .T. if stack is not empty
  63251.             m.llColor        = Not Empty(m.lcColorStack)
  63252.             m.llHighlight    = Not Empty(m.lcHighlightStack)
  63253.             m.llFontName    = Not Empty(m.lcFontNameStack)
  63254.             m.llFontSize    = Not Empty(m.lcFontSizeStack)
  63255.             m.llFontStyle    = Not Empty(m.lcFontStyleStack)
  63256.             *-- remove procesed tag
  63257.             m.lcWord     = Left(m.lcWord,Rat('<',m.lcWord)-1)
  63258.             m.lcWordLow    = Lower(m.lcWord)
  63259.         EndDo         
  63260.         *-- the word to be sent as parameter
  63261.         m.lcParamWord     = Alltrim(m.lcWord)
  63262.         *-- we have a word
  63263.         If Not Empty(m.lcParamWord) Then 
  63264.             *-- 
  63265.             If Not m.tlReturnVanillaString AND NOT EMPTY(m.lcParamWord) Then 
  63266.                 *-- not first word, so previous whitespace might be styled
  63267. *!*                    If m.llWhiteStyled Then 
  63268. *!*                        *-- 
  63269. *!*                        DrawInReport(' ', ;
  63270. *!*                            m.lcWhiteFName, m.lnWhiteFSize, m.lcWhiteFStyle, ;
  63271. *!*                            m.lnWhiteCRed, m.lnWhiteCGreen, m.lnWhiteCBlue, ;
  63272. *!*                            m.lnWhiteHRed, m.lnWhiteHGreen, m.lnWhiteHBlue  )
  63273. *!*                        *-- 
  63274. *!*                    EndIf 
  63275.                 *-- draw the word
  63276. *                DrawInReport( m.lcParamWord, ;
  63277.                     m.lcParamFName,m.lnParamFSize, m.lcParamFStyle, ;
  63278.                     m.lnParamCRed, m.lnParamCGreen, m.lnParamCBlue, ;
  63279.                     m.lnParamHRed, m.lnParamHGreen, m.lnParamHBlue )
  63280.                 * Add to the array of words
  63281.                 This.aTFWords(m.lnI, 1)  = m.lcParamWord
  63282.                 This.aTFWords(m.lnI, 2)  = m.lcParamFName
  63283.                 This.aTFWords(m.lnI, 3)  = m.lnParamFSize
  63284.                 This.aTFWords(m.lnI, 4)  = m.lcParamFStyle
  63285.                 This.aTFWords(m.lnI, 5)  = m.lnParamCRed
  63286.                 This.aTFWords(m.lnI, 6)  = m.lnParamCGreen
  63287.                 This.aTFWords(m.lnI, 7)  = m.lnParamCBlue
  63288.                 This.aTFWords(m.lnI, 8)  = m.lnParamHRed 
  63289.                 This.aTFWords(m.lnI, 9)  = m.lnParamHGreen
  63290.                 This.aTFWords(m.lnI, 10) = m.lnParamHBlue
  63291.                 *-- 
  63292.     *!*            Else     &&-- this might be usefull to decorate with whitespace, hoever cesar will justify the text making the result unpredictible
  63293.     *!*                *-- before the first word, prefixed whitespace could be styled // mid-white-space style change
  63294.     *!*                DrawInReport(' ', ;
  63295.     *!*                    m.lcParamFName,m.lnParamFSize, m.lcParamFStyle, ;
  63296.     *!*                    -1, -1, -1, ;
  63297.     *!*                    m.lnParamHRed, m.lnParamHGreen, m.lnParamHBlue )
  63298.     *!*                *-- 
  63299.             Else 
  63300.                 *-- compose normal string, without tags
  63301.                 m.lcResultString = Evl(m.lcResultString+' ','') + m.lcParamWord 
  63302.             EndIf 
  63303.             *-- 
  63304.         EndIf 
  63305.     EndFor 
  63306.     *-- if vanillastring is requested
  63307.     If m.tlReturnVanillaString Then 
  63308.         Return m.lcResultString
  63309.     EndIf 
  63310. ENDPROC
  63311. PROCEDURE tfaddtooutput
  63312. LPARAMETERS tnRecNo, tnX, tnY, tnW, tnH, tnObjectContinuationType, ;
  63313.     tcWord, tiGDIPlusImage, ;
  63314.     tcFont, ; && Font name
  63315.     m.tnFontSize, ; && Font size
  63316.     m.tnFontStyle, ; && Font style
  63317.     m.tnPenRed, ; && Pen red
  63318.     m.tnPenGreen, ; && Pen green
  63319.     m.tnPenBlue, ; && Pen blue
  63320.     m.tnFillRed, ; && Fill red
  63321.     m.tnFillGreen, ; && Fill green
  63322.     m.tnFillBlue, ; && Fill blue
  63323.     m.toFRX
  63324. LOCAL lnSelect, lnRecno
  63325. m.lnSelect = SELECT()
  63326. m.lnRecno  = RECNO()
  63327. IF EMPTY(This.cAuxFullOutputAlias)
  63328.     This.cAuxFullOutputAlias = STRTRAN(SYS(2015), " ", "_")
  63329.     SELECT 0000 as nRecNo, ;
  63330.         CAST(0 AS N(9, 3)) as FRXWidth, ;
  63331.         CAST(0 AS N(9, 3)) as FRXHeight, ;
  63332.         CAST(0 AS N(9, 3)) as FRXTop, ;
  63333.         CAST(0 AS I) AS    Left, ;
  63334.         CAST(0 AS I) AS    FRXRECNO, ;
  63335.         CAST(0 AS I) AS    DBFRECNO, ;
  63336.         CAST(0 AS I) AS    CONTTYPE, ;
  63337.         CAST("" AS M) AS CONTENTS, ;
  63338.         CAST("" AS M) AS UNCONTENTS, ;
  63339.         CAST(0 AS I) AS    PAGE, ;
  63340.         CAST(0 AS I) AS    FRXINDEX, ;
  63341.         CAST(0 AS I) AS    DYNAMICS, ;
  63342.         CAST(0 AS I) AS    ROTATE, * FROM (This.cFrxAlias) WHERE .F. INTO CURSOR (This.cAuxFullOutputAlias) READWRITE
  63343.     SELECT (This.cAuxFullOutputAlias)
  63344.     ALTER TABLE (This.cAuxFullOutputAlias) ALTER COLUMN Top Integer
  63345. ENDIF
  63346. * Add the information to be used by the Search engine
  63347. INSERT INTO (This.cOutputAlias) ;
  63348.     VALUES (0, 0, m.tnX, m.tnY, m.tnW, m.tnH, ;
  63349.       m.tnObjectContinuationType, m.tcWord, STRCONV(m.tcWord, 5), ;
  63350.       This.PageNo, 0, 0, 0)
  63351. * Add the information to be used to generate the outputs
  63352. * The width was enhanced in 30% to make sure that all words will be inserted in the outputs
  63353. SELECT (This.cAuxFullOutputAlias)
  63354. APPEND BLANK
  63355. GATHER NAME m.toFRX
  63356. REPLACE    FontFace   WITH    m.tcFont, ;
  63357.         FontSize   WITH    m.tnFontSize, ;
  63358.         FontStyle  with    m.tnFontStyle, ;
  63359.         PenRed       with    m.tnPenRed, ;
  63360.         PenGreen   WITH    m.tnPenGreen, ;
  63361.         PenBlue       WITH    m.tnPenBlue, ;
  63362.         FillRed       WITH    m.tnFillRed, ;
  63363.         FillGreen  WITH    m.tnFillGreen, ;
  63364.         FillBlue   WITH    m.tnFillBlue, ;
  63365.         Mode       WITH    0, ;
  63366.         Left       WITH    m.tnX, ;
  63367.         Top           WITH    m.tnY, ;
  63368.         Width       WITH    INT(m.tnW * 1.15), ;
  63369.         Height       WITH    m.tnH, ;
  63370.         FRXRECNO   WITH    m.tnRecNo, ;
  63371.         CONTTYPE   WITH    m.tnObjectContinuationType, ;
  63372.         CONTENTS   WITH    m.tcWord, ;
  63373.         UNCONTENTS WITH    STRCONV(m.tcWord, 5), ;
  63374.         Page       WITH    This.PageNo, ;
  63375.         FRXINDEX   WITH    m.tnRecNo ;
  63376.     IN (This.cAuxFullOutputAlias)
  63377. SELECT (m.lnSelect)
  63378. GO m.lnRecno
  63379. RETURN
  63380. ENDPROC
  63381. PROCEDURE Destroy
  63382. * Clear the watermark bitmap object
  63383. IF VARTYPE(This.oWatermarkBmp) = "O"
  63384.     This.oWatermarkBmp.Destroy()
  63385.     This.oWatermarkBmp = NULL
  63386. ENDIF 
  63387. DODEFAULT()
  63388. ENDPROC
  63389. PROCEDURE EvaluateContents
  63390. LPARAMETERS m.nFRXRecno, m.oObjProperties
  63391. DO CASE
  63392. CASE ("*" $ m.oObjProperties.Text AND VARTYPE(m.oObjProperties.Value) = "N") OR ; && Adjust to fit size
  63393.           ("..." $ m.oObjProperties.Text AND VARTYPE(m.oObjProperties.Value) = "N")
  63394.     LOCAL lcFormat, lnValue
  63395.     m.lnValue = m.oObjProperties.Value
  63396.     TRY 
  63397.         IF This.aRecords[m.nFRXRecno + This.nAdj, 3] = .T. && Already been here
  63398.             m.lcFormat = This.aRecords[m.nFRXRecno + This.nAdj, 4]
  63399.         ELSE 
  63400.             LOCAL lnSession, lnSelect
  63401.             m.lnSession = SET("DataSession")
  63402.             m.lnSelect = SELECT()
  63403.             * Get the number format
  63404.             This.setFRXDataSession()
  63405.             SELECT FRX
  63406.             GO m.nFRXRecno
  63407.             m.lcFormat = FRX.Picture
  63408.             SET DATASESSION TO m.lnSession
  63409.             SELECT (m.lnSelect)
  63410.             This.aRecords[m.nFRXRecno + This.nAdj, 3] = .T.        && Already know that we need to stretch
  63411.             This.aRecords[m.nFRXRecno + This.nAdj, 4] = m.lcFormat && Save for future use
  63412.         ENDIF
  63413.         m.oObjProperties.Text = SPACE(1) + ALLTRIM(TRANSFORM(m.lnValue, &lcFormat.))
  63414.         m.oObjProperties.Reload = .T.
  63415.         This.aRecords[m.nFRXRecno + This.nAdj, 1] = m.oObjProperties
  63416.     CATCH TO m.loExc
  63417.         SET STEP ON 
  63418.     ENDTRY     
  63419. CASE This.aRecords[m.nFRXRecno + This.nAdj, 2] && <FJ> or <HF>
  63420.     This.aRecords[m.nFRXRecno + This.nAdj, 1] = m.oObjProperties
  63421. OTHERWISE
  63422.     DODEFAULT(m.nFRXRecno, m.oObjProperties)
  63423. ENDCASE
  63424. ENDPROC
  63425. PROCEDURE Init
  63426. WITH This
  63427.     .AddProperty("oGDIGraphics", NULL)
  63428.         && a reference to a GDIPlusX Graphics object
  63429.     .AddProperty("aRecords[1]")
  63430.         && an array of records in the FRX
  63431.     .AddProperty("lHasFJ", .F.)
  63432.     .AddProperty("nAdj", 0)
  63433.     .AddProperty("lNewPage", .F.)
  63434.     .AddProperty("lHasUserFld", .F.)
  63435.     * Watermarks
  63436.     .AddProperty("lUsingWatermark", .F.)
  63437.     .AddProperty("cWatermarkImage"       , "") && loFP.cWaterMarkImage
  63438.     .AddProperty("nWatermarkType"        , 1)  && 1 = colored ; 2 = greyscale  (1)
  63439.     .AddProperty("nWatermarkTransparency", 0)  && 0 = transparent ; 1 = opaque (.25)
  63440.     .AddProperty("nWatermarkWidthRatio"  , 0)  && 0 - 1 (.75)
  63441.     .AddProperty("nWatermarkHeightRatio" , 0)  && 0 - 1 (.75)
  63442.     .AddProperty("oWatermarkBmp"         , NULL)
  63443. ENDWITH
  63444. DODEFAULT()
  63445. ENDPROC
  63446. PROCEDURE BeforeReport
  63447. DODEFAULT()
  63448. WITH This
  63449.     TRY 
  63450.         .oGDIGraphics = CREATEOBJECT("GPGraphics")
  63451.     CATCH 
  63452.         .oGDIGraphics = NEWOBJECT("GPGraphics", "_GdiPlus.vcx")
  63453.     ENDTRY 
  63454.     * Switch to the FRX cursor's datasession and for every record with the "<FJ>"
  63455.     * directive in the USER memo, flag in This.aRecords that we need to process it.
  63456.     * Then restore the datasession.
  63457.     .SetFRXDataSession()
  63458.     * Detect if we have the USER field. In FP DOS, this field did not exist.
  63459.     * http://foxypreviewer.codeplex.com/workitem/9236
  63460.     This.lHasUserFld = NOT EMPTY(FIELD("USER"))
  63461.     LOCAL lnAdj, lnOldSize
  63462.     m.lnAdj     = 0
  63463.     m.lnOldSize = 0
  63464.     m.lnOldSize = ALEN(.aRecords, 1)
  63465.     IF m.lnOldSize > 1
  63466.         m.lnAdj = m.lnOldSize
  63467.         This.nAdj = m.lnAdj
  63468.     ENDIF 
  63469.     DIMENSION .aRecords[reccount() + m.lnAdj, 5]
  63470.     * Column 1 : Recno()
  63471.     * Column 2 : Has <FJ>
  63472.     * Column 3 : Stretched
  63473.     * Column 4 : Field Format (Picture)
  63474.     IF This.lHasUserFld
  63475.         SCAN FOR ('<FJ>' $ UPPER(USER)) OR ('<TF>' $ UPPER(USER))
  63476.             .aRecords[RECNO() + m.lnAdj, 2] = .T.
  63477.             .aRecords[RECNO() + m.lnAdj, 5] = UPPER(USER)
  63478.             .lHasFJ = .T.
  63479.         ENDSCAN FOR '<FJ>' $ UPPER(USER)
  63480.         .ResetDataSession()
  63481.     ENDIF
  63482.     * Watermarks
  63483.     IF VARTYPE(_Screen.oFoxyPreviewer) = "O"
  63484.         LOCAL loFP
  63485.         loFP = _Screen.oFoxyPreviewer
  63486.         .cWatermarkImage        = loFP.cWaterMarkImage
  63487.         .nWatermarkType         = loFP.nWatermarkType         && 1 = colored ; 2 = greyscale  (1)
  63488.         .nWatermarkTransparency = loFP.nWatermarkTransparency && 0 = transparent ; 1 = opaque (.25)
  63489.         .nWatermarkWidthRatio   = loFP.nWatermarkWidthRatio   && 0 - 1 (.75)
  63490.         .nWatermarkHeightRatio  = loFP.nWatermarkHeightRatio  && 0 - 1 (.75)
  63491.         IF (NOT FILE(.cWatermarkImage)) OR ;
  63492.             (.nWatermarkTransparency = 0) OR ;
  63493.             (.nWatermarkWidthRatio   = 0) OR ;
  63494.             (.nWatermarkHeightRatio  = 0)
  63495.             .lUsingWatermark = .F.
  63496.         ELSE 
  63497.             .lUsingWatermark = .T.
  63498.             LOCAL loBmp AS GpBitmap OF HOME() + "\ffc\_gdiplus.vcx"
  63499.             loBmp = CREATEOBJECT("GpBitmap")
  63500.             loBmp.CreateFromFile(This.cWatermarkImage)
  63501.             IF (This.nWatermarkTransparency < 1) OR ;
  63502.                 (This.nWatermarkType = 2) && 1 = colored ; 2 = greyscale
  63503.                 * Applying the effects if necessary
  63504.                 LOCAL loAtt   &&  AS GPATTRIB    OF "PR_GdiplusHelper.Prg"
  63505.                 LOCAL lcMatrix AS COLORMATRIX OF "PR_GdiplusHelper.Prg"
  63506.                 loAtt = NEWOBJECT("GpAttrib", "PR_GdiplusHelper.Prg")
  63507.                 IF This.nWatermarkType = 2 && 1 = colored ; 2 = greyscale
  63508.                     lcMatrix = loAtt.ColorMatrix(;
  63509.                          .30, .30, .30,  0,  0, ;
  63510.                          .59, .59, .59,  0,  0, ;
  63511.                          .11, .11, .11,  0,  0, ;
  63512.                            0,   0,   0,  This.nWatermarkTransparency,  0, ; 
  63513.                            0,   0,   0,  0,  1)
  63514.                 ELSE 
  63515.                     lcMatrix = loAtt.ColorMatrix(;
  63516.                            1,   0,   0,  0,  0, ;
  63517.                            0,   1,   0,  0,  0, ;
  63518.                            0,   0,   1,  0,  0, ;
  63519.                            0,   0,   0,  This.nWatermarkTransparency,  0, ; 
  63520.                            0,   0,   0,  0,  1)
  63521.                 ENDIF            
  63522.                 loAtt.ApplyColorMatrix(lcMatrix, loBmp, .F., 0xFFFFFF)
  63523.                 loAtt = NULL
  63524.             ENDIF
  63525.             * Clear the watermark bitmap object
  63526.             IF VARTYPE(This.oWatermarkBmp) = "O"
  63527.                 This.oWatermarkBmp.Destroy()
  63528.                 This.oWatermarkBmp = NULL
  63529.             ENDIF 
  63530.             .oWatermarkBmp = loBmp
  63531.         ENDIF        
  63532.     ENDIF
  63533. ENDWITH
  63534. ENDPROC
  63535. PROCEDURE BeforeBand
  63536. LPARAMETERS m.nBandObjCode, m.nFRXRecNo
  63537. IF THIS.lHasFJ = .T. OR THIS.lExpandFields
  63538.     THIS.CallEvaluateContents = 2
  63539. ENDIF
  63540. #DEFINE frx_objcod_pageheader 1
  63541. IF nBandObjCode==frx_objcod_pageheader
  63542.     THIS.lNewPage = .T.
  63543.     IF NOT THIS.IsSuccessor
  63544.         THIS.sharedGdiplusGraphics = THIS.GDIPLUSGRAPHICS
  63545.     ENDIF
  63546.     THIS.oGdiGraphics.SetHandle(This.SharedGdiplusGraphics)
  63547. ENDIF
  63548. DODEFAULT(m.nBandObjCode, m.nFRXRecNo)
  63549. ENDPROC
  63550. PROCEDURE Render
  63551. LPARAMETERS m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  63552.         m.tcContentsToBeRendered, m.tiGDIPlusImage
  63553. * DODEFAULT(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  63554.         m.tcContentsToBeRendered, m.tiGDIPlusImage)
  63555. * RETURN 
  63556. * Check if field enlargement is needed
  63557.     IF This.aRecords(m.tnFRXRecno, 3) = .T.  && Using Expand fields
  63558.         m.tnWidth = m.tnWidth + 500
  63559.         m.tnLeft  = m.tnLeft  - 500
  63560.         m.tcContentsToBeRendered = STRCONV(This.aRecords(m.tnFRXRecno, 1).Text, 5)  && Convert to unicode, to allow it to store in the cursor
  63561.     ENDIF
  63562. CATCH
  63563. ENDTRY
  63564. * Adding the Watermark
  63565. IF This.lNewPage AND This.lUsingWatermark = .T.
  63566.     This.oGDIGraphics.SetHandle(IIF(This.IsSuccessor, ;
  63567.             This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  63568.     LOCAL lnX, lnY, lnWidth, lnHeight
  63569.     lnX = (1 - This.nWatermarkWidthRatio) / 2
  63570.     lnY = (1 - This.nWatermarkHeightRatio) / 2
  63571.     lnWidth  = This.nWatermarkWidthRatio
  63572.     lnHeight = This.nWatermarkHeightRatio
  63573.     * create a rectangle of the size of 60% of the report page
  63574.     LOCAL loRect as GpRectangle
  63575.     * loRect = .rectangle.new(lnx * this.sharedpagewidth, ;
  63576.             lny * this.sharedpageheight, ;
  63577.             this.sharedpagewidth * lnwidth, ;
  63578.             this.sharedpageheight * lnheight)
  63579.     * Create a rectangle
  63580.     loRect = CREATEOBJECT("GPRectangle", lnx * This.SharedPageWidth, ;
  63581.             lnY * this.sharedPageHeight, ;
  63582.             This.SharedPageWidth * lnWidth, ;
  63583.             This.SharedPageHeight * lnHeight)
  63584.     * Load the image file to gdi+
  63585.     LOCAL loBmp as GpBitmap OF ADDBS(HOME()) + "FFC\_Gdiplus.vcx"
  63586.     IF VARTYPE(This.oWatermarkBmp) = "O"
  63587.         loBmp = This.oWatermarkBmp
  63588.     ELSE 
  63589.         loBmp = CREATEOBJECT("GpBitmap")
  63590.         loBmp.CreateFromFile(This.cWatermarkImage)
  63591.     ENDIF
  63592.     LOCAL loGfx as GpGraphics OF ADDBS(HOME()) + "FFC\_Gdiplus.vcx"
  63593.     loGfx = This.oGdiGraphics
  63594.     loGfx.DrawImageScaled(loBmp, loRect) 
  63595. *!*             local loClrMatrix as xfcColorMatrix
  63596. *!*             if this.WatermarkType = 2 && 1 = colored ; 2 = greyscale
  63597. *!*                loclrmatrix = .imaging.colormatrix.new( ; 
  63598. *!*                   .33, .33, .33, 0 , 0, ; 
  63599. *!*                   .33, .33, .33, 0 , 0, ; 
  63600. *!*                   .33, .33, .33, 0 , 0, ;
  63601. *!*                   0, 0, 0, this.watermarktransparency, 0, ; 
  63602. *!*                   0, 0, 0, 0, 0)
  63603. *!*             else
  63604. *!*                loclrmatrix = .imaging.colormatrix.new()
  63605. *!*                loclrmatrix.matrix33 = this.watermarktransparency
  63606. *!*             endif
  63607. *!*             local loattr as xfcimageattributes
  63608. *!*             loattr = .imaging.imageattributes.new() 
  63609. *!*             loattr.setcolormatrix(loclrmatrix)
  63610. *        This.oGdiGraphics.drawimage(loBmp, loRect, loBmp.GetBounds(), 2, loattr)
  63611.     This.lNewPage = .F.
  63612. ENDIF
  63613. *   dodefault(nfrxrecno,;
  63614.          nleft,ntop,nwidth,nheight,;
  63615.          nobjectcontinuationtype, ;
  63616.          ccontentstoberendered, gdiplusimage)
  63617. LOCAL loObject, ;
  63618.     lcText, ;
  63619.     llFJ, ;
  63620.     llTF, ;
  63621.     llFlag, ;
  63622.     loGfx   as GpGraphics   OF HOME() + "\FFC\_GdiPlus.vcx", ;
  63623.     loRect  as GpRectangle  OF HOME() + "\FFC\_GdiPlus.vcx", ;
  63624.     loFont  as GpFont       OF HOME() + "\FFC\_GdiPlus.vcx", ;
  63625.     loBrush    as GpSolidBrush OF HOME() + "\FFC\_GdiPlus.vcx", ;
  63626.     loColor    as GpColor      OF HOME() + "\FFC\_GdiPlus.vcx", ;
  63627.     lnAlpha, ;
  63628.     llStoreData
  63629. m.llStoreData = This.lStoreData
  63630. * Checking if the HTML formatting was chosen
  63631. IF VARTYPE(This.aRecords[m.tnFRXRecNo + This.nAdj, 5]) = "C"
  63632.     m.llTF = ('<TF>' $ This.aRecords[m.tnFRXRecNo + This.nAdj, 5]) AND (NOT EMPTY(STRCONV(m.tcContentsToBeRendered,6)))
  63633. ENDIF 
  63634.     && We'll store the data only if not <TF>
  63635.     && The TF routine has its own storing data
  63636.     IF This.lStoreData AND (NOT llTF)
  63637.         This.StoreFRXData(m.tnFRXRecno, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight,  m.tnObjectContinuationType, ;
  63638.             m.tcContentsToBeRendered, m.tiGDIPlusImage)
  63639.     ENDIF
  63640. * See if the current object is supposed to be fully-justified. If we're
  63641. * continuing to render a object from previous page because of text overflow,
  63642. * set a flag.
  63643. IF NOT This.lHasFJ && OR (_goHelper._nIndex > 1)
  63644.     This.lStoreData = .F.
  63645.     DODEFAULT(m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  63646.         m.tnObjectContinuationType, m.tcContentsToBeRendered, ;
  63647.         m.tiGDIPlusImage)
  63648.     This.lStoreData = m.llStoreData
  63649.     RETURN
  63650. ENDIF
  63651. m.loObject = This.aRecords[m.tnFRXRecNo + This.nAdj, 1]
  63652. IF VARTYPE(m.loObject) = 'O'
  63653.     m.lcText = m.loObject.Text
  63654.     m.llFJ   = (LEFT(m.lcText, 4) = '<FJ>' or This.aRecords[m.tnFRXRecNo + This.nAdj, 2]) AND  ;
  63655.         (NOT EMPTY(STRCONV(m.tcContentsToBeRendered,6)))
  63656. ENDIF VARTYPE(m.loObject) = 'O'
  63657. *!*    * Checking if the HTML formatting was chosen
  63658. *!*    IF VARTYPE(This.aRecords[tnFRXRecNo + This.nAdj, 5]) = "C"
  63659. *!*        llTF = ('<TF>' $ This.aRecords[tnFRXRecNo + This.nAdj, 5])
  63660. *!*    ENDIF
  63661. IF m.llTF
  63662.     This.oGDIGraphics.SetHandle(IIF(This.IsSuccessor, ;
  63663.             This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  63664.     This.DrawStringInTF( ;
  63665.         m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, m.tnObjectContinuationType, m.tcContentsToBeRendered, m.tiGDIPlusImage, ;
  63666.             m.lcText, ;
  63667.             m.loObject.FontName, m.loObject.FontSize, m.loObject.FontStyle, ;
  63668.             m.loObject.FillRed, m.loObject.FillGreen, m.loObject.FillBlue, ;
  63669.             m.loObject.PenRed, m.loObject.PenGreen, m.loObject.PenBlue)
  63670.     * Since we already drew the text, we don't want the default behavior to occur.
  63671.     NODEFAULT
  63672.     * Release the GDi+ objects used
  63673.     STORE "" TO m.loObject, m.loGfx, m.loRect, m.loFont, m.loBrush, m.loColor
  63674.     RETURN
  63675. ENDIF 
  63676. IF m.llFJ
  63677.     IF m.tnObjectContinuationType > 0
  63678.         m.lcText = strconv(m.tcContentsToBeRendered, 6)
  63679.         IF INLIST(m.tnObjectContinuationType, 1, 2)
  63680.             m.llFlag = .T.
  63681.         ENDIF INLIST(m.tnObjectContinuationType, 1, 2)
  63682.     ENDIF m.tnObjectContinuationType > 0
  63683.     IF UPPER(LEFT(m.lcText, 4)) = '<FJ>'
  63684.         m.lcText = SUBSTR(m.lcText, 5) && Remove the <FJ> tag from string
  63685.     ENDIF UPPER(LEFT(m.lcText, 4)) = '<FJ>'
  63686.     m.lcText = STRTRAN(m.lcText,CHR(9),REPLICATE(CHR(160),8)) && Replaces the <TAB> With a CHR(160) to keep paragraphs
  63687.     * Set the GDI+ handle for our graphics object to the same one the report uses
  63688.     * (the property to use depends on whether this is a successor or not).
  63689.     This.oGDIGraphics.SetHandle(IIF(This.IsSuccessor, ;
  63690.             This.SharedGDIPlusGraphics, This.GDIPlusGraphics))
  63691.     * Create a rectangle
  63692.     m.loRect = CREATEOBJECT("GPRectangle", m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight)
  63693.     * Create a font object using the text object's settings.
  63694.     m.loFont = CREATEOBJECT("GPFont")
  63695.     m.loFont.Create(m.loObject.FontName, m.loObject.FontSize, m.loObject.FontStyle, 3)
  63696.     * If the text uses an opaque background, draw a rectangle in the chosen
  63697.     * background color using a solid brush.
  63698.     m.lnAlpha = m.loObject.FillAlpha
  63699.     IF m.lnAlpha <> 0
  63700.         m.loColor = CREATEOBJECT("gpColor", ;
  63701.                 m.loObject.FillRed, ;
  63702.                 m.loObject.FillGreen, ;
  63703.                 m.loObject.FillBlue, ;
  63704.                 m.lnAlpha )
  63705.         m.loBrush = CREATEOBJECT("gpSolidBrush", m.loColor)
  63706.         This.oGDIGraphics.FillRectangle(m.loBrush, m.tnLeft, ;
  63707.                 m.tnTop, m.tnWidth, m.tnHeight)
  63708.     ENDIF m.lnAlpha <> 0
  63709.     m.loColor = CREATEOBJECT("gpColor", ;
  63710.                 m.loObject.PenRed, ;
  63711.                 m.loObject.PenGreen, ;
  63712.                 m.loObject.PenBlue, ;
  63713.                 m.loObject.PenAlpha)
  63714.     m.loBrush = CREATEOBJECT("gpSolidBrush", m.loColor)
  63715.     This.DrawStringJustified(m.lcText, m.loFont, ;
  63716.         m.loBrush, m.loRect, m.llFlag, This.oGDIGraphics)
  63717.     * If we're not drawing a full justified string, let VFP draw the text as usual.
  63718.     This.lStoreData = .F.
  63719.     DODEFAULT(m.tnFRXRecNo, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, ;
  63720.         m.tnObjectContinuationType, m.tcContentsToBeRendered, ;
  63721.         m.tiGDIPlusImage)
  63722.     This.lStoreData = m.llStoreData
  63723. ENDIF m.llFJ
  63724. * Since we already drew the text, we don't want the default behavior to occur.
  63725. NODEFAULT
  63726. * Release the GDi+ objects used
  63727. STORE "" TO m.loObject, m.loGfx, m.loRect, m.loFont, m.loBrush, loColor
  63728. ENDPROC
  63729. PROCEDURE AfterReport
  63730. This.oGDIGraphics.SetHandle(0)
  63731. This.oGdiGraphics = ""
  63732. DODEFAULT()
  63733. ENDPROC
  63734. BorderStyle = 2
  63735. Height = 25
  63736. Width = 356
  63737. ShowWindow = 1
  63738. ShowInTaskBar = .F.
  63739. DoCreate = .T.
  63740. AutoCenter = .T.
  63741. Caption = "ThermForm"
  63742. ControlBox = .F.
  63743. HalfHeightCaption = .T.
  63744. MaxButton = .F.
  63745. MinButton = .F.
  63746. Visible = .F.
  63747. AlwaysOnTop = .T.
  63748. AllowOutput = .F.
  63749. _memberdata = 
  63750.     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
  63751. successorsys2024 = ("N")
  63752. currentrecord = (0)
  63753. designateddriver = ("")
  63754. drivingaliascurrentrecno = (0)
  63755. escapereference = ("")
  63756. frxbandrecno = (0)
  63757. includeseconds = .T.
  63758. initstatustext = ("")
  63759. onescapecommand = ("")
  63760. percentdone = (0)
  63761. prepassstatustext = ("")
  63762. reportstartrundatetime = (DTOT({}))
  63763. reportstoprundatetime = (DTOT({}))
  63764. runstatustext = ("secs")
  63765. secondstext = ("")
  63766. thermcaption = 
  63767.      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)]
  63768. thermformcaption = ("")
  63769. thermformheight = (40)
  63770. thermformwidth = (356)
  63771. thermmargin = (5)
  63772. setescape = .F.
  63773. setnotifycursor = .F.
  63774. isrunning = .F.
  63775. drivingalias = ("")
  63776. thermprecision = (0)
  63777. persistbetweenruns = .F.
  63778. ndelay = 3
  63779. Name = "foxytherm"
  63780. PLATFORM
  63781. UNIQUEID
  63782. TIMESTAMP
  63783. CLASS
  63784. CLASSLOC
  63785. BASECLASS
  63786. OBJNAME
  63787. PARENT
  63788. PROPERTIES
  63789. PROTECTED
  63790. METHODS
  63791. OBJCODE
  63792. RESERVED1
  63793. RESERVED2
  63794. RESERVED3
  63795. RESERVED4
  63796. RESERVED5
  63797. RESERVED6
  63798. RESERVED7
  63799. RESERVED8
  63800.  COMMENT Screen              
  63801.  WINDOWS _2680QAT8H 948405551
  63802.  WINDOWS _2680QAT8I1079378683
  63803.  WINDOWS _2680QAT8J1044843360o9
  63804.  WINDOWS _2680QAT8H1048857546
  63805.  WINDOWS _2680V3CAX1044843360
  63806.  WINDOWS _2680QAT8H1050152054
  63807.  WINDOWS _26B10MAPD1050152054
  63808.  WINDOWS _26B10MAPE1050152054
  63809.  WINDOWS _2680QAT8H1061424468
  63810.  WINDOWS _32N028ZA11044843360
  63811.  WINDOWS _32N028ZA21044843360
  63812.  WINDOWS _32N028ZA31061424756]N
  63813.  WINDOWS _32N028ZA41050152054_M
  63814.  WINDOWS _35602IRQH1044843360
  63815.  COMMENT RESERVED            
  63816. VERSION =   3.00
  63817. dataenvironment
  63818. dataenvironment
  63819. Dataenvironment
  63820. aTop = 188
  63821. Left = 316
  63822. Width = 331
  63823. Height = 200
  63824. DataSource = .NULL.
  63825. Name = "Dataenvironment"
  63826. frmSendMail2
  63827. NDataSession = 1
  63828. BorderStyle = 3
  63829. Height = 492
  63830. Width = 690
  63831. Desktop = .T.
  63832. ShowWindow = 1
  63833. DoCreate = .T.
  63834. ShowTips = .T.
  63835. AutoCenter = .T.
  63836. Caption = "Send report to email"
  63837. Closable = .F.
  63838. MaxButton = .T.
  63839. MinHeight = 250
  63840. MinWidth = 580
  63841. WindowType = 1
  63842. AlwaysOnTop = .T.
  63843. AllowOutput = .F.
  63844. ctempfile = 
  63845. _memberdata = <VFPData><memberdata name="removeattachment" display="RemoveAttachment"/><memberdata name="_origautoyield" display="_OrigAutoYield"/><memberdata name="_origsys2333" display="_OrigSYS2333"/></VFPData>
  63846. _origautoyield = .F.
  63847. _origsys2333 = .F.
  63848. Name = "frmSendMail2"
  63849. PROCEDURE setlanguage
  63850. LOCAL loExc as Exception
  63851.     IF VARTYPE(_goHelper) = "O"
  63852.     WITH This
  63853.         .lblTo.Caption                        = _goHelper.GetLoc("TO")
  63854.         .lblSubject.Caption                   = _goHelper.GetLoc("SUBJECT")
  63855.         .cmdAttachment.ToolTipText            = _goHelper.GetLoc("ATTACHMENT")
  63856.         .cmbAttach.ToolTipText                = _goHelper.GetLoc("ATTACHMENT")
  63857.         .chkPriority.Caption    = _goHelper.GetLoc("PRIORITY")
  63858.         .chkReceipt.Caption     = _goHelper.GetLoc("RECEIPT")
  63859.         .chtmleditor1.tgBold.ToolTipText      = _goHelper.GetLoc("BOLD")
  63860.         .chtmleditor1.tgBold.Caption          = LEFT(_goHelper.GetLoc("BOLD"),1)
  63861.         .chtmleditor1.tgItalic.ToolTipText    = _goHelper.GetLoc("ITALIC")
  63862.         .chtmleditor1.tgItalic.Caption        = LEFT(_goHelper.GetLoc("ITALIC"),1)
  63863.         .chtmleditor1.tgUnderline.ToolTipText = _goHelper.GetLoc("UNDERLINE")
  63864.         .chtmleditor1.tgUnderline.Caption     = LEFT(_goHelper.GetLoc("UNDERLINE"),1)
  63865.         .chtmleditor1.tgLeft.ToolTipText      = _goHelper.GetLoc("ALIGNLEFT")
  63866.         .chtmleditor1.tgCenter.ToolTipText    = _goHelper.GetLoc("ALIGNCENTE")
  63867.         .chtmleditor1.tgRight.ToolTipText     = _goHelper.GetLoc("ALIGNRIGHT")
  63868.         .chtmleditor1.tgJustify.ToolTipText   = _goHelper.GetLoc("ALIGNJUSTI")
  63869.         .chtmleditor1.cmdHyperlink .ToolTipText = _goHelper.GetLoc("HYPERLINK")
  63870.         .chtmleditor1.cmdPicture.ToolTipText  = _goHelper.GetLoc("ADDPICTURE")
  63871.         .chtmleditor1.tgDecrease.ToolTipText  = _goHelper.GetLoc("INDENTREDU")
  63872.         .chtmleditor1.tgIncrease.ToolTipText  = _goHelper.GetLoc("INDENTINCR")
  63873.         .chtmleditor1.tgLine.ToolTipText      = _goHelper.GetLoc("HORIZBAR")
  63874.         .chtmleditor1.tgClean.ToolTipText     = _goHelper.GetLoc("CLEANFORMT")
  63875.         .chtmleditor1.tgBullet.ToolTipText    = _goHelper.GetLoc("LISTBULLET")
  63876.         .chtmleditor1.tgNumbers.ToolTipText   = _goHelper.GetLoc("LISTNUMBER")
  63877.         .chtmleditor1.cmdCopy.ToolTipText      = _goHelper.GetLoc("COPY")
  63878.         .chtmleditor1.cmdCut.ToolTipText       = _goHelper.GetLoc("CUT")
  63879.         .chtmleditor1.cmdPaste.ToolTipText     = _goHelper.GetLoc("PASTE")
  63880.         .chtmleditor1.cmdOpen.ToolTipText      = _goHelper.GetLoc("HTMLMODEL")
  63881.         .chtmleditor1.cmdSave.ToolTipText      = _goHelper.GetLoc("SAVEASHTML")
  63882.         .chtmleditor1.cmdNew.ToolTipText       = _goHelper.GetLoc("NEW")
  63883.         .chtmleditor1.cmdUndo.ToolTipText      = _goHelper.GetLoc("UNDO")
  63884.         .chtmleditor1.cmdRedo.ToolTipText      = _goHelper.GetLoc("REDO")
  63885.         .chtmleditor1.cmbFontName.ToolTipText = _goHelper.GetLoc("FONTNAME")
  63886.         .chtmleditor1.cmbFontSize.ToolTipText = _goHelper.GetLoc("FONTSIZE")
  63887.         .chtmleditor1.btnForeColor.ToolTipText = _goHelper.GetLoc("FONTCOLOR")
  63888.         .chtmleditor1.btnBackColor.ToolTipText = _goHelper.GetLoc("BACKCOLOR")
  63889.     ENDWITH
  63890.     ENDIF 
  63891. CATCH TO loExc
  63892.     SET STEP ON
  63893. ENDTRY
  63894. RETURN
  63895. ENDPROC
  63896. PROCEDURE removeattachment
  63897. LOCAL lnOption, lcCancel, lcRemove
  63898. lnOption = 0
  63899. IF VARTYPE(_goHelper) = "O"
  63900.     lcCancel = _goHelper.GetLoc("CANCEL")
  63901.     lcRemove = _goHelper.GetLoc("REMOVEFILE")
  63902.     lcCancel = "Cancel"
  63903.     lcRemove = "Remove file"
  63904. ENDIF 
  63905. LOCAL loList as ComboBox
  63906. loList = Thisform.CmbAttach 
  63907. DEFINE POPUP MyShortCut SHORTCUT RELATIVE FROM MROW(),MCOL()
  63908. DEFINE BAR 1 OF MyShortCut PROMPT lcRemove + ": " + ;
  63909.     loList.ListItem(loList.ListIndex)
  63910. DEFINE BAR 2 OF MyShortCut PROMPT lcCancel
  63911. ON SELECTION POPUP MyShortCut lnOption = BAR()
  63912. ACTIVATE POPUP MyShortCut
  63913. IF lnOption = 1 && Remove file
  63914.     loList.RemoveListItem(loList.ListItemId)
  63915.     loList.ListIndex = 1
  63916. ENDIF
  63917. ENDPROC
  63918. PROCEDURE Load
  63919. SET TALK OFF
  63920. SET CONSOLE OFF 
  63921. *!*    * Adjust some properties to make sure the WebBrowser active-X will work as desired
  63922. *!*    * http://www.tek-tips.com/viewthread.cfm?qid=1204873&page=168
  63923. *!*    This._OrigAutoYield = _VFP.AutoYield
  63924. *!*    This._OrigSYS2333   = VAL(SYS(2333, 2))
  63925. *!*    _VFP.AutoYield = .F.
  63926. *!*    SYS(2333, 1)
  63927. ENDPROC
  63928. PROCEDURE Unload
  63929. *!*    * Restore ActiveX settings
  63930. *!*    _VFP.AutoYield = This._OrigAutoYield
  63931. *!*    SYS(2333, This._OrigSYS2333)
  63932. IF NOT EMPTY(Thisform.cTempFile)
  63933.         DELETE FILE (Thisform.cTempFile)
  63934.     CATCH
  63935.     ENDTRY
  63936. ENDIF
  63937. RETURN Thisform.lCancelled
  63938. ENDPROC
  63939. PROCEDURE Activate
  63940. IF EMPTY(This.Comment)
  63941.     This.Width = This.Width + 1
  63942.     This.Comment = "Started"
  63943. ENDIF
  63944. ENDPROC
  63945. PROCEDURE Init
  63946. LPARAMETERS tcFile
  63947. * Thisform.lblAttachment.Caption = JUSTFNAME(tcFile)
  63948. IF NOT EMPTY(tcFile)
  63949.     WITH Thisform.CmbAttach as ComboBox 
  63950.         .AddItem(JUSTFNAME(tcFile))
  63951.         .List(.NewIndex, 2) = tcFile
  63952.         .ListIndex = 1
  63953.         .Refresh()
  63954.     ENDWITH
  63955. ENDIF
  63956. LOCAL lcAttach, n, lcFile
  63957. lcAttach = _goHelper.cAttachments
  63958. IF NOT EMPTY(lcAttach)
  63959.     lcAttach = CHRTRAN(lcAttach, ";", ",")
  63960.     FOR m.n = 1 TO GETWORDCOUNT(lcAttach, ",")
  63961.         lcFile = GETWORDNUM(lcAttach, m.n, ",")
  63962.         IF NOT FILE(lcFile)
  63963.             LOOP
  63964.         ENDIF 
  63965.                         
  63966.         WITH Thisform.CmbAttach as ComboBox 
  63967.             .AddItem(JUSTFNAME(lcFile))
  63968.             .List(.NewIndex, 2) = lcFile
  63969.             .ListIndex = 1
  63970.             .Refresh()
  63971.         ENDWITH
  63972.     ENDFOR
  63973. ENDIF 
  63974. Thisform.AddProperty("lCancelled", .F.)
  63975.     This.Icon = _goHelper.cFormIcon
  63976. CATCH
  63977. ENDTRY
  63978.     WITH _goHelper
  63979.         This.txtDestination.Value = .cEmailTo
  63980.         This.txtSubject.Value     = .cEmailSubject
  63981.         * This.edtBody.Value        =    .cEmailBody
  63982.         This.chkPriority.Value    = .lPriority
  63983.         This.chkReceipt.Value     = .lReadReceipt
  63984.         This.Caption              = .GetLoc("SENDEMAIL")
  63985.         This.CmdCancel.Caption    = .GetLoc("CANCEL")
  63986.         This.CmdSend.Caption      = .GetLoc("SEND")
  63987.         This.lblSubject.Caption   = .GetLoc("SUBJECT")
  63988.         This.lblTo.Caption        = .GetLoc("TO")
  63989.         TRY 
  63990.             IF NOT EMPTY(_goHelper.cEmailBody) OR NOT EMPTY(_goHelper.cEmailBodyFile)
  63991.                 LOCAL lcHTMLFile
  63992.                 IF NOT EMPTY(_goHelper.cEmailBody)
  63993.                     lcHTMLfile = FORCEEXT(ADDBS(SYS(2023))+SYS(2015),"htm")
  63994.                     STRTOFILE(_goHelper.cEmailBody, lcHTMLFile)
  63995.                     Thisform.cTempFile = lcHTMLFile
  63996.                     INKEY(.1)
  63997.                 ELSE 
  63998.                     lcHTMLfile = _goHelper.cEmailBodyFile
  63999.                 ENDIF 
  64000.                 IF FILE(lcHTMLfile)
  64001.                     WITH Thisform.Chtmleditor1.oIE
  64002.                         .Navigate(lcHTMLFile)
  64003.                         DO WHILE .ReadyState != 4
  64004.                             DOEVENTS
  64005.                         ENDDO
  64006.                         .Document.Body.contentEditable = .T.
  64007.                     ENDWITH
  64008.                     IF lcHTMLfile ==_goHelper.cEmailBodyFile && Whithout this the "cEmailBodyFile" will be always deleted!!... by Nick Porfyris [20101213]...
  64009.                     ELSE
  64010.                         DELETE FILE (lcHTMLFile)
  64011.                     ENDIF
  64012.                 ENDIF
  64013.             ENDIF
  64014.         CATCH
  64015.             MESSAGEBOX("Could not load the HTML body file", 48, "Error loading HTML")
  64016.         ENDTRY
  64017.     ENDWITH
  64018. CATCH
  64019. ENDTRY
  64020. This.SetLanguage()
  64021. RETURN
  64022. *!*    XP Style WebBrowser Control 
  64023. *!*    I'm sure there is more then me that been looking for a way to get the XP style in the WebBrowser Control.
  64024. *!*    To enable the XP style in your web pages that you load in your WebBrowser Control put the following line in your head tags:
  64025. *!*    Code:
  64026. *!*    <META HTTP-EQUIV='MSThemeCompatible' CONTENT='Yes'>
  64027. *!*    * Testing code
  64028. *!*    TEXT TO lcHTML NOSHOW 
  64029. *!*    <HTML><HEAD>
  64030. *!*    <STYLE></STYLE>
  64031. *!*    </HEAD>
  64032. *!*    <BODY bgColor=#ffffff>
  64033. *!*    <FONT face=Verdana size=2>
  64034. *!*    <<lcLogoImg>>
  64035. *!*    To<BR></FONT>
  64036. *!*    <<tcHTMLbody>>
  64037. *!*    <BR>
  64038. *!*    <BR>
  64039. *!*    <FONT face=Verdana size=2>Sincerely</FONT>
  64040. *!*    <P></P>
  64041. *!*    <BR>
  64042. *!*    <HR><STRONG>
  64043. *!*    <FONT face=Verdana size=1>FoxyPreviewer team.</FONT></STRONG>
  64044. *!*    <FONT face=Arial color=black size=1><BR>
  64045. *!*    <FONT face=Verdana>1818 Super Street  -  Your Home<BR>05432-030  -  Your City -  XX</FONT><BR>
  64046. *!*    <FONT face=Wingdings color=black size=2>(</FONT><STRONG> </STRONG>
  64047. *!*    <FONT face=Verdana>Phone: 1 11 - 3322.2233 <BR></FONT>
  64048. *!*    <FONT face=Wingdings color=black size=2>(</FONT> 
  64049. *!*    <FONT face=Verdana>Fax:   2 11 - 3366.6656<BR></FONT>
  64050. *!*    <FONT face=Wingdings color=black size=2>*</FONT>
  64051. *!*    <A href="mailto:contact@mycompany.com"><FONT face=Verdana>contact@mycompany.com</FONT></A> </FONT>
  64052. *!*    <BR>
  64053. *!*    </HTML>
  64054. *!*    ENDTEXT
  64055. *!*        SET TEXTMERGE ON
  64056. *!*        lcHTML = TEXTMERGE(lcHTML,.T.,"<<",">>")
  64057. *!*        
  64058. *!*        lcFile = FORCEEXT(ADDBS(SYS(2023))+SYS(2015),"htm")
  64059. *!*        Thisform.cTempFile = lcFile
  64060. *!*        STRTOFILE(lcHTML, lcFile)
  64061. *!*        WITH Thisform.Chtmleditor1.oIE
  64062. *!*            .Navigate(lcFile)
  64063. *!*            DO WHILE .ReadyState != 4
  64064. *!*                DOEVENTS
  64065. *!*            ENDDO
  64066. *!*            .Document.Body.contentEditable = .T.
  64067. *!*        ENDWITH
  64068. * Article with all the EXECWB commands available
  64069. * http://delphicikk.atw.hu/listaz.php?id=1391&oldal=41
  64070. ENDPROC
  64071. pr_AdressBook(
  64072. LCADRESS
  64073. LCORIGADRESS    
  64074. _GOHELPER
  64075. CADRESSTABLE
  64076. CADRESSSEARCH
  64077. PR_ADRESSBOOK
  64078. THISFORM
  64079. TXTDESTINATION
  64080. VALUE
  64081. SETFOCUS
  64082. THIS    
  64083. LOSTFOCUS
  64084. LOEXC
  64085. Click,
  64086. THISFORM
  64087. LCANCELLED
  64088. RELEASE
  64089. Click,
  64090. The email can't be sent because there is no FoxyPreviewer report active!
  64091. Error
  64092. <HTML>
  64093. </HTML>
  64094. contentEditable=true
  64095. COMBOBOX
  64096. THISFORM
  64097. CHTMLEDITOR1
  64098. LTOGGLEUPDATE
  64099. LCHTML
  64100. LCATTACH
  64101. _GOHELPER
  64102. CEMAILTO
  64103. TXTDESTINATION
  64104. VALUE
  64105. CEMAILSUBJECT
  64106. TXTSUBJECT
  64107. DOCUMENT
  64108. BODY    
  64109. OUTERHTML
  64110. CEMAILBODY    
  64111. CMBATTACH    
  64112. LISTCOUNT
  64113. _CATTACHMENT
  64114. LREADRECEIPT
  64115. CHKRECEIPT    
  64116. LPRIORITY
  64117. CHKPRIORITY
  64118. RELEASE
  64119. Click,
  64120. THISFORM
  64121. REMOVEATTACHMENT'
  64122. ATTACHFILE
  64123. COMBOBOX
  64124. LCFILE    
  64125. _GOHELPER
  64126. GETLOC
  64127. THISFORM    
  64128. CMBATTACH
  64129. ADDITEM
  64130. NEWINDEX
  64131. REFRESH
  64132. VALUE
  64133. LCTTIP    
  64134. LISTCOUNT
  64135. TOOLTIPTEXT
  64136. RightClick,
  64137. Click\
  64138. THISFORM
  64139. REMOVEATTACHMENT
  64140. RightClick,
  64141. WIDTH
  64142. PARENT
  64143. HEIGHT
  64144. SAVEASHTML
  64145. HTMLDEFA
  64146. Save as HTML
  64147. Make the saved file the default email body in the next sessions?
  64148. Htm;Html
  64149. <HTML>
  64150. </HTML>
  64151. contentEditable=true
  64152. FoxyPreviewer_Settings.dbf
  64153. CEMAILBODYFILE
  64154. cEmailBodyFile
  64155. Error updating the settings fileC
  64156. Line: 
  64157. Error
  64158. LCHTML
  64159. LCFILE    
  64160. LCLOCTEXT    
  64161. _GOHELPER
  64162. GETLOC
  64163. COUTPUTPATH
  64164. LCQUESTION
  64165. THISFORM
  64166. CHTMLEDITOR1
  64167. DOCUMENT
  64168. BODY    
  64169. OUTERHTML
  64170. LCALIAS
  64171. PROPERTY
  64172. CVALUE
  64173. LOEXC
  64174. ERRORNO
  64175. MESSAGE
  64176. LINENO
  64177. LINECONTENTS
  64178. Resize,
  64179. cmdSave.Click
  64180. Arial, 0, 9, 5, 15, 12, 32, 3, 0
  64181. Arial, 1, 12, 8, 20, 15, 42, 4, 1
  64182. Arial, 2, 12, 7, 20, 16, 30, 3, 1
  64183. Arial, 4, 12, 7, 19, 15, 43, 3, 1
  64184. Wingdings, 0, 12, 14, 17, 14, 22, 3, 0
  64185. Wingdings, 0, 10, 12, 15, 12, 18, 3, 0
  64186. Arial, 0, 10, 6, 16, 13, 35, 3, 0
  64187. Arial, 0, 8, 5, 14, 11, 29, 3, 0
  64188. frmSendMail2
  64189. Command1
  64190. commandbutton
  64191. commandbutton
  64192. IPROCEDURE Click
  64193. Thisform.lCancelled = .T.
  64194. Thisform.Release()
  64195. ENDPROC
  64196. ctempfile
  64197. _memberdata XML Metadata for customizable properties
  64198. _origautoyield
  64199. _origsys2333
  64200. *setlanguage 
  64201. *removeattachment 
  64202. chtmleditor
  64203. pr_htmledit.vcx
  64204.     container
  64205. Chtmleditor1
  64206. frmSendMail2
  64207. Anchor = 15
  64208. Top = 84
  64209. Left = 1
  64210. Width = 655
  64211. Height = 365
  64212. BorderWidth = 0
  64213. TabIndex = 3
  64214. Name = "Chtmleditor1"
  64215. oIE.Top = 48
  64216. oIE.Left = 0
  64217. oIE.Height = 120
  64218. oIE.Width = 132
  64219. oIE.TabIndex = 1
  64220. oIE.Name = "oIE"
  64221. tgBold.Alignment = 0
  64222. tgBold.TabIndex = 23
  64223. tgBold.Name = "tgBold"
  64224. tgItalic.Alignment = 0
  64225. tgItalic.TabIndex = 24
  64226. tgItalic.Name = "tgItalic"
  64227. tgUnderline.Alignment = 0
  64228. tgUnderline.TabIndex = 25
  64229. tgUnderline.Name = "tgUnderline"
  64230. tgLeft.Alignment = 0
  64231. tgLeft.TabIndex = 10
  64232. tgLeft.Name = "tgLeft"
  64233. tgCenter.Alignment = 0
  64234. tgCenter.TabIndex = 11
  64235. tgCenter.Name = "tgCenter"
  64236. tgRight.Alignment = 0
  64237. tgRight.TabIndex = 12
  64238. tgRight.Name = "tgRight"
  64239. btnForeColor.TabIndex = 26
  64240. btnForeColor.Name = "btnForeColor"
  64241. btnBackColor.TabIndex = 27
  64242. btnBackColor.Name = "btnBackColor"
  64243. cmbFontName.Height = 23
  64244. cmbFontName.Left = 0
  64245. cmbFontName.TabIndex = 21
  64246. cmbFontName.Top = 24
  64247. cmbFontName.Width = 154
  64248. cmbFontName.Name = "cmbFontName"
  64249. cmbFontSize.Alignment = 2
  64250. cmbFontSize.Height = 23
  64251. cmbFontSize.Left = 159
  64252. cmbFontSize.TabIndex = 22
  64253. cmbFontSize.Top = 24
  64254. cmbFontSize.Width = 47
  64255. cmbFontSize.Name = "cmbFontSize"
  64256. tgIncrease.Alignment = 0
  64257. tgIncrease.TabIndex = 16
  64258. tgIncrease.Name = "tgIncrease"
  64259. tgDecrease.Alignment = 0
  64260. tgDecrease.TabIndex = 15
  64261. tgDecrease.Name = "tgDecrease"
  64262. tgBullet.Alignment = 0
  64263. tgBullet.TabIndex = 14
  64264. tgBullet.Name = "tgBullet"
  64265. tgNumbers.Alignment = 0
  64266. tgNumbers.TabIndex = 29
  64267. tgNumbers.Name = "tgNumbers"
  64268. cmdHyperlink.TabIndex = 18
  64269. cmdHyperlink.Name = "cmdHyperlink"
  64270. cmdPicture.TabIndex = 19
  64271. cmdPicture.Name = "cmdPicture"
  64272. Label1.Left = 453
  64273. Label1.Top = 28
  64274. Label1.Visible = .F.
  64275. Label1.TabIndex = 28
  64276. Label1.Name = "Label1"
  64277. tgJustify.Alignment = 0
  64278. tgJustify.TabIndex = 13
  64279. tgJustify.Name = "tgJustify"
  64280. cmdOpen.Name = "cmdOpen"
  64281. cmdSave.cpropertyname = 
  64282. cmdSave.Name = "cmdSave"
  64283. cmdNew.Name = "cmdNew"
  64284. cmdCut.cpropertyname = Cut
  64285. cmdCut.Name = "cmdCut"
  64286. cmdCopy.cpropertyname = Copy
  64287. cmdCopy.Name = "cmdCopy"
  64288. cmdPaste.cpropertyname = Paste
  64289. cmdPaste.Name = "cmdPaste"
  64290. cmdUndo.cpropertyname = Undo
  64291. cmdUndo.Name = "cmdUndo"
  64292. cmdRedo.cpropertyname = Redo
  64293. cmdRedo.Name = "cmdRedo"
  64294. tgLine.TabIndex = 17
  64295. tgLine.Alignment = 0
  64296. tgLine.Name = "tgLine"
  64297. tgCLean.Top = 0
  64298. tgCLean.Left = 503
  64299. tgCLean.TabIndex = 20
  64300. tgCLean.Alignment = 0
  64301. tgCLean.Name = "tgCLean"
  64302. lPROCEDURE Resize
  64303. This.width=this.parent.width
  64304. This.height=this.parent.height - 115 &&  72
  64305. *!*    *this.top=0
  64306. *!*    *this.left=0
  64307. This.oIE.Width  = This.Width - 2
  64308. This.oIE.Height = This.Height - 60
  64309. ENDPROC
  64310. PROCEDURE cmdSave.Click
  64311. LOCAL lcHTML, lcFile, lcLocText
  64312. IF VARTYPE(_goHelper) = "O"
  64313.     lcLocText = _goHelper.GetLoc("SAVEASHTML")
  64314.     lcFile = IIF(EMPTY(_goHelper.cOutputPath), "", ADDBS(_goHelper.cOutputPath))
  64315.     lcQuestion = _goHelper.GetLoc("HTMLDEFA")
  64316.     lcLocText = "Save as HTML"
  64317.     lcFile = ""
  64318.     lcQuestion = "Make the saved file the default email body in the next sessions?"
  64319. ENDIF
  64320. lcFile = PUTFILE(lcLocText + "...", lcFile, "Htm;Html")
  64321. IF NOT EMPTY(lcFile)
  64322.     lcHTML = "<HTML>" + Thisform.Chtmleditor1.oIE.Document.Body.OuterHTML + "</HTML>"
  64323.     lcHTML = STRTRAN(lcHTML, "contentEditable=true", "")
  64324.     STRTOFILE(lcHTML, lcFile)
  64325.     IF MESSAGEBOX(lcQuestion, 32 + 4, lcLocText) = 6 && Yes
  64326.         LOCAL lcAlias
  64327.         lcAlias  = SYS(2015)
  64328.         TRY
  64329.             USE ("FoxyPreviewer_Settings.dbf") IN 0 AGAIN SHARED ALIAS (lcAlias) && FP_Settings
  64330.             SELECT(lcAlias)
  64331.             LOCATE FOR ALLTRIM(UPPER(property)) == "CEMAILBODYFILE"     
  64332.             IF EOF()
  64333.                 APPEND BLANK
  64334.                 REPLACE Property WITH "cEmailBodyFile", ;
  64335.                     cValue WITH lcFile ;
  64336.                     IN (lcAlias)
  64337.             ELSE 
  64338.                 REPLACE cValue WITH lcFile IN (lcAlias)
  64339.             ENDIF
  64340.         CATCH TO loExc
  64341.             MESSAGEBOX("Error updating the settings file" + CHR(13) + CHR(13) + ;
  64342.                 TRANSFORM(loExc.ERRORNO) + " - " + loExc.MESSAGE + CHR(13) + ;
  64343.                 "Line: " + TRANSFORM(loExc.LINENO) + " - " + loExc.LINECONTENTS, 16, "Error")
  64344.             SET STEP ON 
  64345.         ENDTRY
  64346.         USE IN SELECT(lcAlias)
  64347.     ENDIF
  64348. ENDIF
  64349. ENDPROC
  64350. PROCEDURE Click
  64351. LOCAL lcAdress, lcOrigAdress
  64352. lcAdress = ""
  64353.     IF NOT EMPTY(_goHelper.cAdressTable) AND NOT EMPTY(_goHelper.cAdressSearch)
  64354.         DO FORM pr_AdressBook ; 
  64355.             WITH _goHelper.cAdressTable, _goHelper.cAdressSearch ;
  64356.             TO lcAdress
  64357.         IF NOT EMPTY(lcAdress) AND VARTYPE(lcAdress) = "C"
  64358.             lcOrigAdress = ALLTRIM(Thisform.TxtDestination.Value)
  64359.             IF EMPTY(lcOrigAdress)
  64360.                 Thisform.TxtDestination.Value = lcAdress
  64361.             ELSE
  64362.                 Thisform.TxtDestination.Value = lcOrigAdress + ";" + lcAdress
  64363.             ENDIF 
  64364.             Thisform.TxtDestination.SetFocus()
  64365.         ELSE 
  64366.             This.LostFocus()
  64367.         ENDIF 
  64368.     ENDIF
  64369. CATCH TO loExc
  64370.     SET STEP ON
  64371. ENDTRY 
  64372. ENDPROC
  64373. Top = 12
  64374. Left = 5
  64375. Height = 23
  64376. Width = 23
  64377. Picture = images\pr_adress.bmp
  64378. Caption = ""
  64379. TabIndex = 6
  64380. TabStop = .F.
  64381. SpecialEffect = 2
  64382. Name = "Command1"
  64383. Top = 456
  64384. Left = 591
  64385. Height = 27
  64386. Width = 84
  64387. Anchor = 12
  64388. Cancel = .T.
  64389. Caption = "Cancel"
  64390. TabIndex = 5
  64391. Name = "cmdCancel"
  64392. frmSendMail2
  64393.     cmdCancel
  64394. commandbutton
  64395. commandbutton
  64396. Top = 456
  64397. Left = 495
  64398. Height = 27
  64399. Width = 84
  64400. Anchor = 12
  64401. Picture = images\pr_sendmessage.bmp
  64402. Caption = "Send"
  64403. TabIndex = 4
  64404. PicturePosition = 0
  64405. Name = "cmdSend"
  64406. frmSendMail2
  64407. cmdSend
  64408. commandbutton
  64409. commandbutton
  64410. AutoSize = .T.
  64411. BackStyle = 0
  64412. Caption = "Subject:"
  64413. Height = 17
  64414. Left = 8
  64415. Top = 50
  64416. Width = 46
  64417. TabIndex = 12
  64418. Name = "lblSubject"
  64419. frmSendMail2
  64420. textbox
  64421. textbox
  64422. txtDestination
  64423. frmSendMail2
  64424. Format = "K"
  64425. Height = 23
  64426. Left = 110
  64427. MaxLength = 255
  64428. TabIndex = 1
  64429. Top = 12
  64430. Width = 386
  64431. AutoComplete = 2
  64432. AutoCompTable = "FoxyPreviewer_Emails"
  64433. Name = "txtDestination"
  64434. textbox
  64435. textbox
  64436. TxtSubject
  64437. frmSendMail2
  64438. aFormat = "K"
  64439. Height = 23
  64440. Left = 110
  64441. TabIndex = 2
  64442. Top = 48
  64443. Width = 386
  64444. Name = "TxtSubject"
  64445. checkbox
  64446. checkbox
  64447. chkPriority
  64448. frmSendMail2
  64449. Top = 108
  64450. Left = 537
  64451. Height = 13
  64452. Width = 148
  64453. Alignment = 0
  64454. Caption = "Priority"
  64455. Value = .F.
  64456. TabIndex = 9
  64457. Visible = .T.
  64458. Name = "chkPriority"
  64459. checkbox
  64460. checkbox
  64461. chkReceipt
  64462. frmSendMail2
  64463. Top = 84
  64464. Left = 537
  64465. Height = 13
  64466. Width = 148
  64467. Alignment = 0
  64468. Caption = "Read receipt"
  64469. Value = .F.
  64470. TabIndex = 11
  64471. Visible = .T.
  64472. Name = "chkReceipt"
  64473. combobox
  64474. combobox
  64475.     cmbAttach
  64476. frmSendMail2
  64477. FontSize = 8
  64478. ColumnCount = 2
  64479. ColumnWidths = "160,0"
  64480. Height = 24
  64481. ColumnLines = .F.
  64482. Left = 537
  64483. Style = 2
  64484. TabIndex = 8
  64485. Top = 48
  64486. Width = 141
  64487. Name = "cmbAttach"
  64488. <PROCEDURE RightClick
  64489. Thisform.RemoveAttachment()
  64490. ENDPROC
  64491. lblSubject
  64492. label
  64493. label
  64494. }AutoSize = .T.
  64495. BackStyle = 0
  64496. Caption = "To:"
  64497. Height = 17
  64498. Left = 29
  64499. Top = 14
  64500. Width = 19
  64501. TabIndex = 10
  64502. Name = "lblTo"
  64503. frmSendMail2
  64504. lblTo
  64505. label
  64506. commandbutton
  64507. commandbutton
  64508. cmdAttachment
  64509. frmSendMail2
  64510. Top = 48
  64511. Left = 504
  64512. Height = 23
  64513. Width = 23
  64514. Picture = images\pr_attach.bmp
  64515. Caption = ""
  64516. TabIndex = 7
  64517. SpecialEffect = 2
  64518. Name = "cmdAttachment"
  64519. ~PROCEDURE RightClick
  64520. Thisform.RemoveAttachment()
  64521. ENDPROC
  64522. PROCEDURE Click
  64523. LOCAL lcFile
  64524. lcFile = GETFILE("", _goHelper.GetLoc("ATTACHFILE"))
  64525. * lcFile = GETFILE('', 'Anexar arquivo:', 'Anexar', 0, 'Anexar Arquivo')
  64526. IF NOT EMPTY(lcFile)
  64527.     WITH Thisform.CmbAttach as ComboBox 
  64528.         .AddItem(JUSTFNAME(lcFile))
  64529.         .List(.NewIndex, 2) = lcFile
  64530.         .Refresh()
  64531.     ENDWITH
  64532.     Thisform.CmbAttach.Value = JUSTFNAME(lcFile)
  64533.     LOCAL n, lcTTip
  64534.     lcTtip = ""
  64535.     FOR m.n = 1 TO Thisform.cmbAttach.ListCount 
  64536.         lcTTip = lcTTip + Thisform.CmbAttach.List(m.n,1) + CHR(13)
  64537.     ENDFOR
  64538.     Thisform.cmbAttach.ToolTipText = lcTTip
  64539. ENDIF
  64540. RETURN
  64541. ENDPROC
  64542. label
  64543. PROCEDURE Click
  64544. Thisform.cHtmleditor1.lToggleUpdate = .F.
  64545. LOCAL lcHTML, lcAttach, i
  64546. IF VARTYPE(_GoHelper) <> "O"
  64547.     MESSAGEBOX("The email can't be sent because there is no FoxyPreviewer report active!", 16, "Error")
  64548.     RETURN
  64549. ENDIF
  64550. WITH _goHelper
  64551.     .cEmailTo      = ALLTRIM(Thisform.txtDestination.Value)
  64552.     .cEmailSubject = ALLTRIM(Thisform.txtSubject.Value)
  64553.     lcHTML = "<HTML>" + Thisform.Chtmleditor1.oIE.Document.Body.OuterHTML + "</HTML>"
  64554.     lcHTML = STRTRAN(lcHTML, "contentEditable=true", "")
  64555.     .cEmailBody = lcHTML
  64556.     lcAttach = ""
  64557.     WITH Thisform.CmbAttach as ComboBox 
  64558.         FOR m.i = 1 TO .ListCount
  64559.             lcAttach = lcAttach + .List(m.i, 2) + ","
  64560.         ENDFOR
  64561.     ENDWITH
  64562.     lcAttach = LEFT(lcAttach, LEN(lcAttach) - 1)
  64563.     ._cAttachment   = lcAttach
  64564.     .lReadReceipt  = Thisform.chkReceipt.Value
  64565.     .lPriority     = Thisform.chkPriority.Value
  64566. ENDWITH 
  64567. Thisform.Release()
  64568. RETURN
  64569. ENDPROC
  64570. EXCEPTION
  64571. SUBJECT
  64572. ATTACHMENT
  64573. ATTACHMENT
  64574. PRIORITY
  64575. RECEIPT
  64576. ITALIC
  64577. ITALIC
  64578. UNDERLINE
  64579. UNDERLINE
  64580. ALIGNLEFT
  64581. ALIGNCENTE
  64582. ALIGNRIGHT
  64583. ALIGNJUSTI
  64584. HYPERLINK
  64585. ADDPICTURE
  64586. INDENTREDU
  64587. INDENTINCR
  64588. HORIZBAR
  64589. CLEANFORMT
  64590. LISTBULLET
  64591. LISTNUMBER
  64592. PASTE
  64593. HTMLMODEL
  64594. SAVEASHTML
  64595. FONTNAME
  64596. FONTSIZE
  64597. FONTCOLOR
  64598. BACKCOLOR
  64599. LOEXC    
  64600. _GOHELPER
  64601. LBLTO
  64602. CAPTION
  64603. GETLOC
  64604. LBLSUBJECT
  64605. CMDATTACHMENT
  64606. TOOLTIPTEXT    
  64607. CMBATTACH
  64608. CHKPRIORITY
  64609. CHKRECEIPT
  64610. CHTMLEDITOR1
  64611. TGBOLD
  64612. TGITALIC
  64613. TGUNDERLINE
  64614. TGLEFT
  64615. TGCENTER
  64616. TGRIGHT    
  64617. TGJUSTIFY
  64618. CMDHYPERLINK
  64619. CMDPICTURE
  64620. TGDECREASE
  64621. TGINCREASE
  64622. TGLINE
  64623. TGCLEAN
  64624. TGBULLET    
  64625. TGNUMBERS
  64626. CMDCOPY
  64627. CMDCUT
  64628. CMDPASTE
  64629. CMDOPEN
  64630. CMDSAVE
  64631. CMDNEW
  64632. CMDUNDO
  64633. CMDREDO
  64634. CMBFONTNAME
  64635. CMBFONTSIZE
  64636. BTNFORECOLOR
  64637. BTNBACKCOLORr
  64638. CANCEL
  64639. REMOVEFILE
  64640. Cancel
  64641. Remove file
  64642. COMBOBOX
  64643. lnOption = BAR()
  64644. LNOPTION
  64645. LCCANCEL
  64646. LCREMOVE    
  64647. _GOHELPER
  64648. GETLOC
  64649. LOLIST
  64650. THISFORM    
  64651. CMBATTACH
  64652. MYSHORTCUT
  64653. LISTITEM    
  64654. LISTINDEX
  64655. REMOVELISTITEM
  64656. LISTITEMID
  64657. THISFORM    
  64658. CTEMPFILE
  64659. LCANCELLEDG
  64660. Started
  64661. COMMENT
  64662. WIDTH|
  64663. COMBOBOX
  64664. COMBOBOX
  64665. lCancelled-
  64666. SENDEMAIL
  64667. CANCEL
  64668. SUBJECT
  64669. Could not load the HTML body file
  64670. Error loading HTML
  64671. TCFILE
  64672. THISFORM    
  64673. CMBATTACH
  64674. ADDITEM
  64675. NEWINDEX    
  64676. LISTINDEX
  64677. REFRESH
  64678. LCATTACH
  64679. LCFILE    
  64680. _GOHELPER
  64681. CATTACHMENTS
  64682. ADDPROPERTY
  64683. ICON    
  64684. CFORMICON
  64685. TXTDESTINATION
  64686. VALUE
  64687. CEMAILTO
  64688. TXTSUBJECT
  64689. CEMAILSUBJECT
  64690. CHKPRIORITY    
  64691. LPRIORITY
  64692. CHKRECEIPT
  64693. LREADRECEIPT
  64694. CAPTION
  64695. GETLOC    
  64696. CMDCANCEL
  64697. CMDSEND
  64698. LBLSUBJECT
  64699. LBLTO
  64700. CEMAILBODY
  64701. CEMAILBODYFILE
  64702. LCHTMLFILE    
  64703. CTEMPFILE
  64704. CHTMLEDITOR1
  64705. NAVIGATE
  64706. READYSTATE
  64707. DOCUMENT
  64708. CONTENTEDITABLE
  64709. SETLANGUAGE
  64710. setlanguage,
  64711. removeattachment
  64712. Unload&    
  64713. Activate
  64714. PLATFORM
  64715. UNIQUEID
  64716. TIMESTAMP
  64717. CLASS
  64718. CLASSLOC
  64719. BASECLASS
  64720. OBJNAME
  64721. PARENT
  64722. PROPERTIES
  64723. PROTECTED
  64724. METHODS
  64725. OBJCODE
  64726. RESERVED1
  64727. RESERVED2
  64728. RESERVED3
  64729. RESERVED4
  64730. RESERVED5
  64731. RESERVED6
  64732. RESERVED7
  64733. RESERVED8
  64734.  COMMENT Class               
  64735.  WINDOWS _1740W7OC6 813201933
  64736.  COMMENT RESERVED            
  64737.  WINDOWS _1740WXCG0 813202935
  64738.  COMMENT RESERVED            
  64739.  WINDOWS _1740QHB8J 827741504@F
  64740.  COMMENT RESERVED            
  64741.  WINDOWS _1740W78J0 922511065q
  64742.  COMMENT RESERVED            
  64743.  WINDOWS _1731BXUH2 925330000mF
  64744.  COMMENT RESERVED            
  64745.  WINDOWS _1740S4S5B1031176059
  64746.  COMMENT RESERVED            
  64747.  WINDOWS _1740QGBYD1033747498
  64748.  WINDOWS _1740RH5FM 925330789
  64749.  WINDOWS _1740S7WUJ1030405923qR
  64750.  WINDOWS _1740SF2VG1030405923
  64751.  WINDOWS _1740SF2W01030405923    Q
  64752.  WINDOWS _1740SNVJQ1030402864
  64753.  WINDOWS _1740SNVKA1030402864
  64754.  WINDOWS _1740W7OC61030402864
  64755.  WINDOWS _1740W7OC61030402864
  64756.  WINDOWS _1740W0P9C1033746905
  64757.  WINDOWS _1740WA4YL1030402864
  64758.  WINDOWS _1740X64WS1030402864
  64759.  WINDOWS _1740Y1B1R1030402864
  64760.  WINDOWS _1740Y1B2B1030402864f>
  64761.  WINDOWS _1740YB8XA1030402864D=
  64762.  WINDOWS _1740YB8XU1030402864!<
  64763.  WINDOWS _1740Z7TQJ1030402864
  64764.  WINDOWS _1740Z7TRD1030402864
  64765.  WINDOWS _1750K7E5L1030402132T8
  64766.  WINDOWS _32M1DWMRJ1030402864
  64767.  WINDOWS _3300XEAYB1031175409
  64768.  WINDOWS _3300XEAYC1031176583P1
  64769.  WINDOWS _3300XEAYD1031175409
  64770.  WINDOWS _3300XEAYE1031176033R.
  64771.  WINDOWS _3300XEAYR1031176285:-
  64772.  WINDOWS _3300XEAYS1031176285
  64773.  WINDOWS _3300XEAYT1031176285
  64774.  WINDOWS _3300XEAYU1031176285
  64775.  WINDOWS _3300YECRE1031176285
  64776.  WINDOWS _1740W7OC6 813201933
  64777.  COMMENT RESERVED            
  64778. VERSION =   3.00
  64779. !Arial, 0, 9, 5, 15, 12, 16, 3, 0
  64780. Pixels
  64781. Class
  64782. combobox
  64783. cpropertyname
  64784. _memberdata
  64785. combobox
  64786. about:blank
  64787. PARENT
  64788. NAVIGATE
  64789. READYSTATE
  64790. REFRESH
  64791. Click,
  64792. InsertImagea
  64793. PARENT
  64794. DOCUMENT
  64795. EXECCOMMAND
  64796. Click,
  64797. Pixels
  64798. pr_HtmlEdit.vcx
  64799. pr_HtmlEdit.vcx
  64800. LCFILE
  64801. PARENT
  64802. NAVIGATE
  64803. READYSTATE
  64804. DOCUMENT
  64805. CONTENTEDITABLE
  64806. REFRESH
  64807. SETFOCUS
  64808. Click,
  64809. Inner
  64810. Outer
  64811. Importar texto de arquivo TXT
  64812. Copiar HTML
  64813. Copiar Texto
  64814. MESSAGEBOX(oThis.oIE.Document.Body.InnerHTML)
  64815. MESSAGEBOX(oThis.oIE.Document.Body.OuterHTML)
  64816. oThis.oIE.Document.Body.innerHTML = GETFILE("txt")
  64817. _ClipText = oThis.oIE.Document.Body.innerHTML
  64818. _ClipText = oThis.oIE.Document.Body.innerTEXT
  64819. OTHIS
  64820. PARENT
  64821. Click,
  64822. CreateLinka
  64823. PARENT
  64824. DOCUMENT
  64825. EXECCOMMAND
  64826. Click,
  64827. FontSize-
  64828. PARENT
  64829. DOCUMENT
  64830. EXECCOMMAND
  64831. VALUE
  64832. InteractiveChange,
  64833. FontName-
  64834. PARENT
  64835. DOCUMENT
  64836. EXECCOMMAND
  64837. DISPLAYVALUE
  64838. InteractiveChange,
  64839. ForeColor-
  64840. LNCOLOR
  64841. LCCOLOR
  64842. PARENT
  64843. DOCUMENT
  64844. EXECCOMMAND
  64845. Click,
  64846. chtmleditor
  64847. combobox
  64848. HHeight = 23
  64849. Width = 177
  64850. cpropertyname = FontName
  64851. Name = "cfontname"
  64852. PROCEDURE Init
  64853. This.AddProperty("aNames[1]","")
  64854. =AFONT(This.aNames)
  64855. This.RowSource = "This.aNames"
  64856. This.RowSourceType = 5 
  64857. This.Value = "Arial"
  64858. ENDPROC
  64859.     cfontname
  64860. nHeight = 23
  64861. Style = 2
  64862. TabStop = .F.
  64863. Width = 100
  64864. _memberdata = 
  64865.      526<?xml version="1.0"     encoding="Windows-1252" standalone="yes" ?>     
  64866. <VFPData>
  64867. <memberdata name="foomethod" type="method"     display="fooMethod"     favorites="True"/>
  64868. <memberdata name="_cbo" type="property" display="_cbo" favorites="True"/>
  64869. <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  64870. <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  64871. <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  64872. </VFPData>
  64873. Name = "_cbo"
  64874. BackColor-
  64875. LNCOLOR
  64876. LCCOLOR
  64877. PARENT
  64878. DOCUMENT
  64879. EXECCOMMAND
  64880. BGCOLOR
  64881. Click,
  64882. COMMAND
  64883. ENABLE
  64884. PARENT
  64885. TOGGLESTATUS
  64886. PARENT
  64887. ACTIVATECOMMANDS
  64888. CommandStateChange,
  64889. DownloadComplete
  64890. CTOGGLE
  64891. OTOGGLE
  64892. OBJECTS
  64893. CLASS
  64894. DOCUMENT
  64895. QUERYCOMMANDENABLED
  64896. CPROPERTYNAME
  64897. CTOGGLE
  64898. LTOGGLEUPDATE
  64899. OTOGGLE
  64900. LOCATIONURL
  64901. OBJECTS
  64902. CLASS
  64903. VALUE
  64904. DOCUMENT
  64905. QUERYCOMMANDVALUE
  64906. CPROPERTYNAME
  64907. PARENTCLASS
  64908. JUSTIFYC
  64909. JustifyNone
  64910. TCPROPERTYNAME
  64911. DOCUMENT
  64912. QUERYCOMMANDVALUE
  64913. EXECCOMMAND
  64914. SETFOCUSg
  64915. WIDTH
  64916. PARENT
  64917. HEIGHT
  64918. RESIZE
  64919. DOCUMENT
  64920. BODY    
  64921. OUTERHTML
  64922. activatecommands,
  64923. togglestatus
  64924. toggle-
  64925. Resize
  64926. RightClick
  64927. CPROPERTYNAME
  64928. PARENT
  64929. TOGGLE
  64930. Click,
  64931. DOCUMENT
  64932. CONTENTEDITABLEz
  64933. about:blank
  64934. LNLOADTIMEOUT
  64935. OBJECT
  64936. NAVIGATE
  64937. LNSTARTSECONDS
  64938. READYSTATE=
  64939. LFIRSTREFRESH
  64940. DOCUMENT
  64941. CONTENTEDITABLE
  64942. DownloadComplete,
  64943. Initn
  64944. Refresh/
  64945. PARENT
  64946. TOGGLE
  64947. CPROPERTYNAME
  64948. Click,
  64949. DblClickn
  64950. RightClicky
  64951. ADDITEM
  64952. Init,
  64953. Class
  64954.     container
  64955. chtmleditor
  64956. aNames[1]
  64957. This.aNames
  64958. Arial
  64959. ADDPROPERTY
  64960. ANAMES    
  64961. ROWSOURCE
  64962. ROWSOURCETYPE
  64963. VALUE
  64964. Init,
  64965. Arial, 1, 12, 8, 20, 15, 42, 4, 1
  64966. Arial, 2, 12, 7, 20, 16, 30, 3, 1
  64967. Arial, 4, 12, 7, 19, 15, 43, 3, 1
  64968. Wingdings, 0, 12, 14, 17, 14, 22, 3, 0
  64969. Wingdings, 0, 10, 12, 15, 12, 18, 3, 0
  64970. Arial, 0, 9, 5, 15, 12, 32, 3, 0
  64971. Arial, 0, 10, 6, 16, 13, 35, 3, 0
  64972. Top = 24
  64973. Left = 428
  64974. Picture = images\pr_clean.bmp
  64975. Caption = ""
  64976. ToolTipText = "Remove formatting"
  64977. SpecialEffect = 2
  64978. Alignment = 0
  64979. cpropertyname = RemoveFormat
  64980. Name = "tgClean"
  64981. chtmleditor
  64982. tgClean
  64983. commandbutton
  64984. pr_htmledit.vcx
  64985. cbutton
  64986. Top = 0
  64987. Left = 428
  64988. FontName = "Arial"
  64989. Caption = "--"
  64990. ToolTipText = "Insert horizontal line"
  64991. SpecialEffect = 2
  64992. Alignment = 2
  64993. cpropertyname = InsertHorizontalRule
  64994. Name = "tgLine"
  64995. chtmleditor
  64996. tgLine
  64997. commandbutton
  64998. pr_htmledit.vcx
  64999. cbutton
  65000. Top = 0
  65001. Left = 183
  65002. Picture = images\pr_redo.bmp
  65003. Caption = ""
  65004. ToolTipText = "Redo"
  65005. SpecialEffect = 2
  65006. Alignment = 0
  65007. cpropertyname = Redo
  65008. Name = "cmdRedo"
  65009. chtmleditor
  65010. cmdRedo
  65011. commandbutton
  65012. pr_htmledit.vcx
  65013. cbutton
  65014. Top = 0
  65015. Left = 159
  65016. FontName = "Wingdings"
  65017. Picture = images\pr_undo.bmp
  65018. Caption = ""
  65019. ToolTipText = "Undo"
  65020. SpecialEffect = 2
  65021. Alignment = 0
  65022. cpropertyname = Undo
  65023. Name = "cmdUndo"
  65024. chtmleditor
  65025. cmdUndo
  65026. commandbutton
  65027. pr_htmledit.vcx
  65028. cbutton
  65029. Top = 0
  65030. Left = 131
  65031. FontName = "Wingdings"
  65032. Picture = images\pr_paste.bmp
  65033. Caption = ""
  65034. ToolTipText = "Paste"
  65035. SpecialEffect = 2
  65036. Alignment = 0
  65037. cpropertyname = Paste
  65038. Name = "cmdPaste"
  65039. chtmleditor
  65040. cmdPaste
  65041. commandbutton
  65042. pr_htmledit.vcx
  65043. cbutton
  65044. Top = 0
  65045. Left = 107
  65046. FontName = "Wingdings"
  65047. Picture = images\pr_copy.bmp
  65048. Caption = ""
  65049. ToolTipText = "Copy"
  65050. SpecialEffect = 2
  65051. Alignment = 0
  65052. cpropertyname = Copy
  65053. Name = "cmdCopy"
  65054. chtmleditor
  65055. cmdCopy
  65056. commandbutton
  65057. pr_htmledit.vcx
  65058. cbutton
  65059. Top = 0
  65060. Left = 83
  65061. FontName = "Wingdings"
  65062. Picture = images\pr_cut.bmp
  65063. Caption = ""
  65064. ToolTipText = "Cut"
  65065. SpecialEffect = 2
  65066. Alignment = 0
  65067. cpropertyname = Cut
  65068. Name = "cmdCut"
  65069. chtmleditor
  65070. cmdCut
  65071. commandbutton
  65072. pr_htmledit.vcx
  65073. cbutton
  65074. PROCEDURE Click
  65075. WITH this.Parent.OiE
  65076.     .navigate("about:blank")
  65077.     DO WHILE (.busy) OR (.ReadyState != 4)
  65078.         DOEVENTS
  65079.     ENDDO
  65080. ENDWITH
  65081. this.Parent.refresh
  65082. ENDPROC
  65083. Top = 0
  65084. Left = 50
  65085. FontName = "Wingdings"
  65086. Picture = images\pr_new.bmp
  65087. Caption = ""
  65088. Enabled = .T.
  65089. ToolTipText = "New..."
  65090. SpecialEffect = 2
  65091. Alignment = 0
  65092. Name = "cmdNew"
  65093. chtmleditor
  65094. cmdNew
  65095. commandbutton
  65096. pr_htmledit.vcx
  65097. cbutton
  65098. Top = 0
  65099. Left = 26
  65100. FontName = "Wingdings"
  65101. Picture = images\pr_save.bmp
  65102. Caption = ""
  65103. Enabled = .T.
  65104. ToolTipText = "Save as HTML..."
  65105. SpecialEffect = 2
  65106. Alignment = 0
  65107. cpropertyname = SaveAs
  65108. Name = "cmdSave"
  65109. chtmleditor
  65110. cmdSave
  65111. commandbutton
  65112. pr_htmledit.vcx
  65113. cbutton
  65114. PROCEDURE Click
  65115. NODEFAULT
  65116. LOCAL lcFile
  65117. lcFile=GETFILE("htm*")
  65118. IF !EMPTY(lcFile)
  65119.     WITH this.Parent.oIE
  65120.         .Navigate(lcFile)
  65121.         DO WHILE .ReadyState != 4
  65122.             DOEVENTS
  65123.         ENDDO
  65124.         .Document.Body.contentEditable = .T.
  65125.         .Refresh()
  65126.         .SetFocus()
  65127.     ENDWITH
  65128. ENDIF
  65129. ENDPROC
  65130. Top = 0
  65131. Left = 2
  65132. FontName = "Wingdings"
  65133. Picture = images\pr_open.bmp
  65134. Caption = ""
  65135. Enabled = .T.
  65136. ToolTipText = "Open HTML file..."
  65137. SpecialEffect = 2
  65138. Alignment = 0
  65139. Name = "cmdOpen"
  65140. chtmleditor
  65141. cmdOpen
  65142. commandbutton
  65143. pr_htmledit.vcx
  65144. cbutton
  65145. Top = 0
  65146. Left = 288
  65147. Picture = images\pr_align_justify.bmp
  65148. Alignment = 0
  65149. Caption = ""
  65150. SpecialEffect = 2
  65151. ToolTipText = "Justify"
  65152. cpropertyname = JustifyFull
  65153. Name = "tgJustify"
  65154. chtmleditor
  65155.     tgJustify
  65156. checkbox
  65157. pr_htmledit.vcx
  65158. ctoggle
  65159. PROCEDURE Click
  65160. define popup pop1 shortcut
  65161. define bar 1 of pop1 prompt "Inner"
  65162. define bar 2 of pop1 prompt "Outer"
  65163. define bar 3 of pop1 prompt "Importar texto de arquivo TXT"
  65164. define bar 4 of pop1 prompt "Copiar HTML"
  65165. define bar 5 of pop1 prompt "Copiar Texto"
  65166. private oThis
  65167. oThis = This.Parent
  65168. on selection bar 1 of pop1 MESSAGEBOX(oThis.oIE.Document.Body.InnerHTML)
  65169. on selection bar 2 of pop1 MESSAGEBOX(oThis.oIE.Document.Body.OuterHTML)
  65170. on selection bar 3 of pop1 oThis.oIE.Document.Body.innerHTML = GETFILE("txt")
  65171. on selection bar 4 of pop1 _ClipText = oThis.oIE.Document.Body.innerHTML
  65172. on selection bar 5 of pop1 _ClipText = oThis.oIE.Document.Body.innerTEXT
  65173. activate popup pop1 AT MROW(),MCOL()
  65174. ENDPROC
  65175. AutoSize = .F.
  65176. Alignment = 2
  65177. BorderStyle = 1
  65178. Caption = "More..."
  65179. Height = 19
  65180. Left = 374
  65181. Top = 27
  65182. Width = 44
  65183. Name = "Label1"
  65184. chtmleditor
  65185. Label1
  65186. label
  65187. label
  65188. SPROCEDURE Click
  65189. This.Parent.oIE.Document.execCommand("InsertImage",.T.)
  65190. ENDPROC
  65191. Top = 0
  65192. Left = 474
  65193. Picture = images\pr_getimage.bmp
  65194. Caption = ""
  65195. ToolTipText = "Insert picture"
  65196. SpecialEffect = 2
  65197. Name = "cmdPicture"
  65198. chtmleditor
  65199. cmdPicture
  65200. commandbutton
  65201. pr_htmledit.vcx
  65202. cbutton
  65203. SPROCEDURE Click
  65204. This.Parent.oIE.Document.execCommand("CreateLink", .T.)
  65205. ENDPROC
  65206. Top = 0
  65207. Left = 451
  65208. Picture = images\pr_hyperlink.bmp
  65209. Caption = ""
  65210. ToolTipText = "Create a hyperlink"
  65211. SpecialEffect = 2
  65212. Name = "cmdHyperlink"
  65213. chtmleditor
  65214. cmdHyperlink
  65215. commandbutton
  65216. pr_htmledit.vcx
  65217. cbutton
  65218. Top = 0
  65219. Left = 341
  65220. Picture = images\pr_listnumber.bmp
  65221. Alignment = 0
  65222. Caption = ""
  65223. SpecialEffect = 2
  65224. ToolTipText = "Formatting numbers"
  65225. cpropertyname = InsertOrderedList
  65226. Name = "tgNumbers"
  65227. chtmleditor
  65228.     tgNumbers
  65229. checkbox
  65230. pr_htmledit.vcx
  65231. ctoggle
  65232. Top = 0
  65233. Left = 317
  65234. Picture = images\pr_listdot.bmp
  65235. Alignment = 0
  65236. Caption = ""
  65237. SpecialEffect = 2
  65238. ToolTipText = "Formatting bullets"
  65239. cpropertyname = InsertUnOrderedList
  65240. Name = "tgBullet"
  65241. chtmleditor
  65242. tgBullet
  65243. checkbox
  65244. pr_htmledit.vcx
  65245. ctoggle
  65246. Top = 0
  65247. Left = 372
  65248. Picture = images\pr_textmoveleft.bmp
  65249. Alignment = 0
  65250. Caption = ""
  65251. SpecialEffect = 2
  65252. ToolTipText = "Decrease indentation"
  65253. cpropertyname = Outdent
  65254. Name = "tgDecrease"
  65255. chtmleditor
  65256. tgDecrease
  65257. checkbox
  65258. pr_htmledit.vcx
  65259. ctoggle
  65260. Top = 0
  65261. Left = 398
  65262. Picture = images\pr_textmoveright.bmp
  65263. Alignment = 0
  65264. Caption = ""
  65265. SpecialEffect = 2
  65266. ToolTipText = "Increase indentation"
  65267. cpropertyname = Indent
  65268. Name = "tgIncrease"
  65269. chtmleditor
  65270. tgIncrease
  65271. checkbox
  65272. pr_htmledit.vcx
  65273. ctoggle
  65274. iPROCEDURE InteractiveChange
  65275. This.Parent.oIE.Document.execCommand("FontSize",.F.,This.Value)
  65276. ENDPROC
  65277. `Height = 23
  65278. Left = 129
  65279. ToolTipText = "Font size"
  65280. Top = 24
  65281. Width = 54
  65282. Name = "cmbFontSize"
  65283. chtmleditor
  65284. cmbFontSize
  65285. combobox
  65286. pr_htmledit.vcx
  65287.     cfontsize
  65288. pPROCEDURE InteractiveChange
  65289. This.Parent.oIE.Document.execCommand("FontName",.F.,This.DisplayValue)
  65290. ENDPROC
  65291. _Height = 23
  65292. Left = 0
  65293. ToolTipText = "Font name"
  65294. Top = 24
  65295. Width = 127
  65296. Name = "cmbFontName"
  65297. chtmleditor
  65298. cmbFontName
  65299. combobox
  65300. pr_htmledit.vcx
  65301.     cfontname
  65302. Top = 24
  65303. Left = 341
  65304. Picture = images\pr_fontback.bmp
  65305. Caption = ""
  65306. ToolTipText = "Background color"
  65307. SpecialEffect = 2
  65308. ForeColor = 0,0,255
  65309. Name = "btnBackColor"
  65310. chtmleditor
  65311. btnBackColor
  65312. commandbutton
  65313. pr_htmledit.vcx
  65314. cbutton
  65315. Top = 24
  65316. Left = 317
  65317. Picture = images\pr_textcolor.bmp
  65318. Caption = ""
  65319. ToolTipText = "Cor do Texto"
  65320. SpecialEffect = 2
  65321. ForeColor = 0,0,255
  65322. Name = "btnForeColor"
  65323. chtmleditor
  65324. btnForeColor
  65325. commandbutton
  65326. pr_htmledit.vcx
  65327. cbutton
  65328. Acpropertyname The name of the property this command will toggle
  65329. 'Wingdings, 0, 12, 14, 17, 14, 22, 3, 0
  65330. Class
  65331. chtmleditor
  65332. tgRight
  65333. checkbox
  65334. pr_htmledit.vcx
  65335. ctoggle
  65336. ctoggle
  65337. chtmleditor
  65338. tgCenter
  65339. checkbox
  65340. Class
  65341. Pixels
  65342.     cfontsize
  65343. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  65344. +OLEObject = C:\WINNT\System32\shdocvw.dll
  65345. Elfirstrefresh
  65346. _memberdata XML Metadata for customizable properties
  65347. checkbox
  65348. checkbox
  65349. olecontrol
  65350. olecontrol
  65351. Class
  65352. Pixels
  65353. Class
  65354.     cfontsize
  65355. ctoggle
  65356. Pixels
  65357. Pixels
  65358.     cfontname
  65359. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  65360. *update 
  65361. combobox
  65362. TAlignment = 1
  65363. Value = 1
  65364. Width = 45
  65365. cpropertyname = FontSize
  65366. Name = "cfontsize"
  65367. PROCEDURE Click
  65368. This.Parent.Toggle(This.cPropertyName)
  65369. ENDPROC
  65370. PROCEDURE DblClick
  65371. NODEFAULT 
  65372. ENDPROC
  65373. PROCEDURE RightClick
  65374. NODEFAULT 
  65375. ENDPROC
  65376. Height = 23
  65377. Width = 23
  65378. FontName = "Wingdings"
  65379. FontSize = 12
  65380. Alignment = 0
  65381. Caption = "C"
  65382. Value = .F.
  65383. Style = 1
  65384. TabStop = .F.
  65385. Name = "ctoggle"
  65386. PROCEDURE Init
  65387. This.AddItem("8")
  65388. This.AddItem("10")
  65389. This.AddItem("12")
  65390. This.AddItem("14")
  65391. This.AddItem("18")
  65392. This.AddItem("24")
  65393. This.AddItem("36")
  65394. ENDPROC
  65395. xPROCEDURE Click
  65396. LOCAL lnColor, lcColor
  65397. lnColor = GETCOLOR()
  65398. IF lnColor > -1
  65399.    lcColor = RIGHT(TRANSFORM(lnColor,"@0"),6)
  65400.    lcColor = RIGHT(lcColor, 2)+ SUBSTR(lcColor,3,2)+ LEFT(lcColor,2)
  65401.    This.Parent.oIE.Document.execCommand("BackColor",.F.,lcColor)
  65402. ENDIF
  65403. RETURN
  65404. * Not used any more
  65405. * This converted the whole document BackColor instead of the current selection
  65406. LOCAL lnColor, lcColor
  65407. lnColor = GETCOLOR()
  65408. IF lnColor > -1
  65409.    lcColor = RIGHT(TRANSFORM(lnColor,"@0"),6)
  65410.    lcColor = RIGHT(lcColor, 2)+ SUBSTR(lcColor,3,2)+ LEFT(lcColor,2)
  65411.    This.Parent.oIE.Document.bgColor = lcColor
  65412. ENDIF
  65413. ENDPROC
  65414. PROCEDURE Click
  65415. LOCAL lnColor, lcColor
  65416. lnColor = GETCOLOR()
  65417. IF lnColor > -1
  65418.    lcColor = RIGHT(TRANSFORM(lnColor,"@0"),6)
  65419.    lcColor = RIGHT(lcColor, 2)+ SUBSTR(lcColor,3,2)+ LEFT(lcColor,2)
  65420.    This.Parent.oIE.Document.execCommand("ForeColor",.F.,lcColor)
  65421. ENDIF
  65422. ENDPROC
  65423. Top = 0
  65424. Left = 264
  65425. Picture = images\pr_align_right.bmp
  65426. Alignment = 0
  65427. Caption = ""
  65428. SpecialEffect = 2
  65429. ToolTipText = "Align right"
  65430. cpropertyname = JustifyRight
  65431. Name = "tgRight"
  65432. Top = 0
  65433. Left = 240
  65434. Picture = images\pr_align_center.bmp
  65435. Alignment = 0
  65436. Caption = ""
  65437. SpecialEffect = 2
  65438. ToolTipText = "Center"
  65439. cpropertyname = JustifyCenter
  65440. Name = "tgCenter"
  65441. pr_htmledit.vcx
  65442. ctoggle
  65443. Top = 0
  65444. Left = 216
  65445. Picture = images\pr_align_left.bmp
  65446. Alignment = 0
  65447. Caption = ""
  65448. SpecialEffect = 2
  65449. ToolTipText = "Align left"
  65450. cpropertyname = JustifyLeft
  65451. Name = "tgLeft"
  65452. chtmleditor
  65453. tgLeft
  65454. checkbox
  65455. pr_htmledit.vcx
  65456. ctoggle
  65457. Top = 24
  65458. Left = 264
  65459. FontName = "Arial"
  65460. FontUnderline = .T.
  65461. Alignment = 0
  65462. Caption = "U"
  65463. SpecialEffect = 2
  65464. ToolTipText = "Underline"
  65465. cpropertyname = Underline
  65466. Name = "tgUnderline"
  65467. chtmleditor
  65468. tgUnderline
  65469. checkbox
  65470. pr_htmledit.vcx
  65471. ctoggle
  65472. Top = 24
  65473. Left = 240
  65474. FontItalic = .T.
  65475. FontName = "Arial"
  65476. Alignment = 0
  65477. Caption = "I"
  65478. SpecialEffect = 2
  65479. ToolTipText = "Italic"
  65480. cpropertyname = Italic
  65481. Name = "tgItalic"
  65482. chtmleditor
  65483. tgItalic
  65484. checkbox
  65485. pr_htmledit.vcx
  65486. ctoggle
  65487. chtmleditor
  65488. tgBold
  65489. checkbox
  65490. pr_htmledit.vcx
  65491. ctoggle
  65492. chtmleditor
  65493. cbutton
  65494. gHeight = 100
  65495. Width = 100
  65496. lfirstrefresh = .T.
  65497. _memberdata = 
  65498.      524<?xml version="1.0"     encoding="Windows-1252" standalone="yes" ?>     
  65499. <VFPData>
  65500. <memberdata name="foomethod" type="method"     display="fooMethod"     favorites="True"/>
  65501. <memberdata name="cie" type="property" display="cie" favorites="True"/>
  65502. <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  65503. <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  65504. <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  65505. </VFPData>
  65506. Name = "cie"
  65507. PROCEDURE DownloadComplete
  65508. *** ActiveX Control Event ***
  65509. * Set the edit mode on
  65510. *THIS.Document.designMode = "On"  && This gives a different context menu
  65511. This.Document.Body.contentEditable = .T.  && This is a good context menu
  65512. ENDPROC
  65513. PROCEDURE Init
  65514. * Navigate to a blank page
  65515. *This.Navigate2("About:Blank")
  65516. * Prevent an OLE error, and wait until the object
  65517. * gets the blank page open before showing or accessing
  65518. LOCAL lnLoadTimeout
  65519. lnLoadTimeout = 3       && seconds
  65520. WITH This.OBJECT
  65521.     .Navigate("about:blank")
  65522.     * Wait for load completion
  65523.     lnStartSeconds = SECONDS()
  65524.     DO WHILE .ReadyState <> 4 ;
  65525.             AND (SECONDS()-lnStartSeconds <= lnLoadTimeout )
  65526.         DOEVENTS
  65527.     ENDDO
  65528. ENDWITH
  65529. ENDPROC
  65530. PROCEDURE Refresh
  65531. *** ActiveX Control Method ***
  65532. IF This.lFirstRefresh
  65533.    NODEFAULT
  65534.    This.lFirstRefresh = .F.
  65535.    This.Document.Body.contentEditable = .T.
  65536. ENDIF
  65537. ENDPROC
  65538. Top = 24
  65539. Left = 216
  65540. FontBold = .T.
  65541. FontName = "Arial"
  65542. Alignment = 0
  65543. Caption = "B"
  65544. SpecialEffect = 2
  65545. ToolTipText = "Bold"
  65546. cpropertyname = Bold
  65547. Name = "tgBold"
  65548. -OLEObject = C:\Windows\system32\ieframe.dll
  65549. PROCEDURE CommandStateChange
  65550. *** ActiveX Control Event ***
  65551. LPARAMETERS command, enable
  65552. This.Parent.ToggleStatus()
  65553. DODEFAULT(command, enable)
  65554. ENDPROC
  65555. PROCEDURE DownloadComplete
  65556. *** ActiveX Control Event ***
  65557. DODEFAULT()
  65558. This.Parent.Activatecommands()
  65559. ENDPROC
  65560. fTop = 48
  65561. Left = 0
  65562. Height = 100
  65563. Width = 100
  65564. _memberdata = 
  65565.      524<?xml version="1.0"     encoding="Windows-1252" standalone="yes" ?>     
  65566. <VFPData>
  65567. <memberdata name="foomethod" type="method"     display="fooMethod"     favorites="True"/>
  65568. <memberdata name="oIE" type="property" display="oIE" favorites="True"/>
  65569. <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  65570. <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  65571. <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  65572. </VFPData>
  65573. Name = "oIE"
  65574. olecontrol
  65575. pr_htmledit.vcx
  65576. s_memberdata XML Metadata for customizable properties
  65577. ltoggleupdate
  65578. *activatecommands 
  65579. *togglestatus 
  65580. *toggle 
  65581. PROCEDURE activatecommands
  65582. LOCAL oToggle
  65583. FOR EACH oToggle IN This.Objects
  65584.    IF UPPER(oToggle.Class) = "CTOGGLE"
  65585.       This.oIE.Document.queryCommandEnabled(oToggle.cPropertyName)
  65586. *      oToggle.Refresh()
  65587.    ENDIF
  65588. ENDPROC
  65589. PROCEDURE togglestatus
  65590. IF This.lToggleUpdate 
  65591.     LOCAL oToggle
  65592.     IF NOT EMPTY(This.oIE.LocationURL)
  65593.     FOR EACH oToggle IN This.Objects
  65594.        IF UPPER(oToggle.Class) = "CTOGGLE"
  65595.           oToggle.Value = This.oIE.Document.QueryCommandValue(oToggle.cPropertyName)
  65596.     *      oToggle.Refresh()
  65597.        ENDIF
  65598.        IF UPPER(oToggle.ParentClass) = "_CBO"
  65599.           oToggle.Value = This.oIE.Document.queryCommandValue(oToggle.cPropertyName)
  65600.        ENDIF
  65601.     NEXT
  65602.     ENDIF
  65603. ENDIF 
  65604. ENDPROC
  65605. PROCEDURE toggle
  65606. LPARAMETERS tcPropertyName
  65607. IF "JUSTIFY" $ UPPER(tcPropertyName)
  65608.    IF This.oIE.Document.queryCommandValue(tcPropertyName)
  65609.       tcPropertyName = "JustifyNone"
  65610.    ENDIF
  65611. ENDIF
  65612. This.oIE.Document.execCommand(tcPropertyName)
  65613. This.oIE.SetFocus()
  65614. ENDPROC
  65615. PROCEDURE Resize
  65616. This.width=this.parent.width
  65617. This.height=this.parent.height - 72
  65618. *!*    *this.top=0
  65619. *!*    *this.left=0
  65620. This.oIE.Width  = This.Width - 2
  65621. This.oIE.Height = This.Height - 60
  65622. ENDPROC
  65623. PROCEDURE Init
  65624. This.Resize()
  65625. ENDPROC
  65626. PROCEDURE RightClick
  65627. MESSAGEBOX(This.oIE.Document.Body.OuterHTML)
  65628. ENDPROC
  65629.     container
  65630. commandbutton
  65631. mPROCEDURE Click
  65632. IF NOT EMPTY(This.cPropertyName)
  65633.     This.Parent.Toggle(This.cPropertyName)
  65634. ENDIF 
  65635. ENDPROC
  65636. Ecpropertyname
  65637. _memberdata XML Metadata for customizable properties
  65638. cbutton
  65639. commandbutton
  65640. Class
  65641. Pixels
  65642. 'Wingdings, 0, 10, 12, 15, 12, 18, 3, 0
  65643. Height = 23
  65644. Width = 23
  65645. FontName = "Wingdings"
  65646. FontSize = 10
  65647. Caption = "C"
  65648. TabStop = .F.
  65649. SpecialEffect = 2
  65650. cpropertyname = 
  65651. _memberdata = 
  65652.       79<VFPData><memberdata name="cpropertyname" display="cPropertyName"/></VFPData>
  65653. Name = "cbutton"
  65654. Width = 633
  65655. Height = 324
  65656. BackStyle = 0
  65657. BorderWidth = 0
  65658. _memberdata = 
  65659.      546<?xml version="1.0" standalone="yes"?>
  65660. <VFPData>
  65661.     <memberdata name="foomethod" type="method" display="fooMethod" favorites="True"/>
  65662.     <memberdata name="chtmleditor" type="property" display="chtmleditor" favorites="True"/>
  65663.     <memberdata name="_memberdata" type="property" display="_MemberData" favorites="True"/>
  65664.     <memberdata name="baseclass" type="property" display="BaseClasS" favorites="True"/>
  65665.     <memberdata name="error" type="method" display="eRRor" favorites="True"/>
  65666.     <memberdata name="ltoggleupdate" display="lToggleUpdate"/></VFPData>
  65667. ltoggleupdate = .T.
  65668. Name = "chtmleditor"
  65669. xH@@``````
  65670. \KF\KF\KF
  65671. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  65672. \KF\KF\KF
  65673. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  65674. \KF\KF\KF
  65675. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  65676. \KF\KF\KF
  65677. \KF\KF\KF\KF\KF\KF\KF\KF\KF
  65678.                     
  65679. gOwW?
  65680. gOwW?
  65681. `P(`P(h`0@
  65682. 0P (X 0` P
  65683. PLATFORM
  65684. UNIQUEID
  65685. TIMESTAMP
  65686. CLASS
  65687. CLASSLOC
  65688. BASECLASS
  65689. OBJNAME
  65690. PARENT
  65691. PROPERTIES
  65692. PROTECTED
  65693. METHODS
  65694. OBJCODE
  65695. RESERVED1
  65696. RESERVED2
  65697. RESERVED3
  65698. RESERVED4
  65699. RESERVED5
  65700. RESERVED6
  65701. RESERVED7
  65702. RESERVED8
  65703.  COMMENT Screen              
  65704.  WINDOWS _34Q0PJ4TY1043685131
  65705.  WINDOWS _34Q0PJ4TZ1059848267
  65706.  WINDOWS _34Q0PJ4U01045479108R)
  65707.  WINDOWS _34Q0PJ4U11045105636**
  65708.  WINDOWS _34Q0PJ4U61045105899i0
  65709.  WINDOWS _35800F2H410451285359/
  65710.  WINDOWS _35A033NLY1045107191
  65711.  WINDOWS _35A033NLZ10451058994&
  65712.  WINDOWS _34Q0PJ4TY1045479237-%
  65713.  WINDOWS _35G1FDGMD1045479237R$
  65714.  COMMENT RESERVED            
  65715. VERSION =   3.00
  65716. dataenvironment
  65717. dataenvironment
  65718. Dataenvironment
  65719. YTop = 0
  65720. Left = 0
  65721. Width = 0
  65722. Height = 0
  65723. DataSource = .NULL.
  65724. Name = "Dataenvironment"
  65725. Form1
  65726. CHeight = 422
  65727. Width = 635
  65728. Desktop = .T.
  65729. DoCreate = .T.
  65730. ShowTips = .T.
  65731. AutoCenter = .T.
  65732. Caption = "Select recipients"
  65733. Closable = .F.
  65734. WindowType = 1
  65735. ngridx = 0
  65736. ngridy = 0
  65737. crecipients = 
  65738. _memberdata = 
  65739.      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
  65740. csearchfield = 
  65741. clocsearchfld = Search field
  65742. lclosetable = .F.
  65743. Name = "Form1"
  65744. zPROCEDURE updatesearchfld
  65745. LPARAMETERS tcField
  65746. Thisform.cSearchField = tcField
  65747. Thisform.lblSearchFld.Caption = Thisform.cLocSearchFld + ": " + PROPER(tcField)
  65748. ENDPROC
  65749. PROCEDURE doselectall
  65750. Local lnRec
  65751. lnRec = Recno(Thisform.Grid1.RecordSource)
  65752. Update (Thisform.Grid1.RecordSource) Set lSelected = not lSelected
  65753. Go (m.lnRec)
  65754. Thisform.Refresh()
  65755. ENDPROC
  65756. PROCEDURE dounselectall
  65757. Local lnRec
  65758. lnRec = Recno(Thisform.Grid1.RecordSource)
  65759. Update (Thisform.Grid1.RecordSource) Set lSelected = .F.
  65760. Go (m.lnRec)
  65761. Thisform.Refresh()
  65762. ENDPROC
  65763. PROCEDURE setlanguage
  65764. LOCAL loExc as Exception 
  65765.     WITH This
  65766.         LOCAL lcCaption
  65767.         lcCaption = _goHelper.GetLoc("SEARCHFLD")
  65768.         .lblSearchFld.Caption = lcCaption
  65769.         .cLocSearchFld        = lcCaption
  65770.         .CmdOk.Caption        = _goHelper.GetLoc("GOTOPG_OK")
  65771.         .CmdCancel.Caption    = _goHelper.GetLoc("CANCEL")
  65772.         .Caption              = _goHelper.GetLoc("SELECTRECI")
  65773.     ENDWITH
  65774. CATCH TO loExc
  65775.     SET STEP ON 
  65776. ENDTRY 
  65777. ENDPROC
  65778. PROCEDURE Load
  65779. SET TALK OFF
  65780. SET CONSOLE OFF 
  65781. IF VARTYPE(_goHelper) <> "O"
  65782.     * Creating the cursor with the adress book
  65783.     SELECT CAST(LOWER(GETWORDNUM(Contact, 1, " "))+"@vfp.com" AS C(30)) As email,* From (_samples + '\data\customer') ;
  65784.         Where .T. Into Cursor Test Readwrite
  65785. ENDIF
  65786.     LOCAL loDummy as Image 
  65787.     loDummy = CREATEOBJECT("Image")
  65788.     loDummy.Picture = "images\pr_locate.bmp"
  65789. CATCH
  65790. ENDTRY
  65791. ENDPROC
  65792. PROCEDURE Init
  65793. *!*    Author      : Soykan OZCELIK
  65794. *!*    Description : email adress collector for FoxyPreviewer SendMail Form
  65795. *!*    Usage       : Do form GetEmailAdress with "YourCursor","YourSearchField"
  65796. *!*    Important   : YourCursor must contain "email" field which is filled contact emails
  65797. *!* to testing this form first create test cursor with below codes
  65798. *!*    Select "s@s.com" as email,* FROM (_samples + '\data\customer') Where .T. Into Cursor Test readwrite
  65799. *!* You can create your own cursors to test this form
  65800. LPARAMETERS tcCursor,tcSearchField
  65801. IF EMPTY(tcCursor)
  65802.     tcCursor = ALIAS()
  65803. ENDIF
  65804. LOCAL llError
  65805. llError = .F.
  65806. IF NOT USED(tcCursor)
  65807.     TRY 
  65808.         USE (tcCursor) AGAIN IN 0 SHARED ALIAS C_AdressBook
  65809.         * This.lCloseTable = .T.
  65810.         tcCursor = "C_AdressBook"
  65811.     CATCH
  65812.         MESSAGEBOX("Could not load the adress book table!", 48, "Error")
  65813.         llError = .T.
  65814.     ENDTRY     
  65815. ENDIF 
  65816. IF llError
  65817.     RETURN .F.
  65818. ENDIF 
  65819. IF EMPTY(tcSearchField)
  65820.     tcSearchField = "EMAIL"  && "Contact"
  65821. ENDIF
  65822. Thisform.UpdateSearchFld(tcSearchField)
  65823. TEXT TO m.lcSQL TEXTMERGE NOSHOW
  65824.     SELECT .F. AS lSelected, * FROM ;
  65825.     <<m.tcCursor>>  WHERE .t. ;
  65826.     INTO CURSOR CrsAdresses READWRITE
  65827. ENDTEXT
  65828. EXECSCRIPT(m.lcSQL)
  65829. GO TOP
  65830. * Close the table if it was passed as a file
  65831. IF tcCursor = "C_AdressBook"
  65832.     USE IN SELECT("C_AdressBook")
  65833. ENDIF
  65834. Thisform.cSearchField = m.tcSearchField
  65835.     This.Icon= "pr_mail03.ico"
  65836.     *    This.Icon= HOME() + "Graphics\Icons\Mail\mail03.ico"
  65837. CATCH
  65838. ENDTRY
  65839. With This.Grid1 as Grid
  65840.     .RecordSource=""
  65841.     .RecordSource="CrsAdresses"
  65842.     .ColumnCount = FCOUNT(.RecordSource)
  65843.     .LockColumns = 1
  65844.     LOCAL loColumn as Column 
  65845.     FOR EACH loColumn IN .Columns
  65846.         WITH loColumn.header1
  65847.             .FontBold  = .T.
  65848.             .FontSize  = 9
  65849.             .Alignment = 3
  65850.             .ForeColor = RGB(255,0,0)
  65851.             IF EMPTY(loColumn.ControlSource)
  65852.                 loColumn.Visible = .F.
  65853.             ENDIF
  65854.         ENDWITH
  65855.     ENDFOR
  65856.     Thisform.Gridsort1.BindControl()
  65857.     With .Column1
  65858.         LOCAL loHeader as Header
  65859.         loHeader = .header1
  65860.         WITH loHeader as Header
  65861.             .FontName="wingdings"
  65862.             .Caption = Chr(0xFC) &&"Checkbox"
  65863.             .Alignment = 2
  65864.             * UNBINDEVENTS(loHeader) &&, "DblClick")
  65865.             BINDEVENT(loHeader, "DblClick", This, "DoSelectAll")
  65866.             BINDEVENT(loHeader, "RightClick", This, "DoUnselectAll")
  65867.         ENDWITH
  65868.         .Alignment = 2
  65869.         .Width = 20
  65870.         .AddObject("Check1","CheckBox")
  65871.         .Sparse = .F.
  65872.         .CurrentControl = "Check1"
  65873.         With .Check1
  65874.             .Alignment = 2
  65875.             .Caption = ""
  65876.             .Name = "Check1"
  65877.             .Visible = .T.
  65878.         Endwith
  65879.         .RemoveObject("text1")
  65880.     Endwith
  65881.     .AutoFit()
  65882.     This.Grid1.Column1.Alignment = 2
  65883.     .SetAll("DynamicForeColor", "ICASE(lSelected=.t.,RGB(255,0,0),lSelected=.f.,RGB(0,0,0))" , "Column")
  65884.     .SetAll("DynamicFontBold", "lSelected=.t." , "Column")
  65885. ENDWITH
  65886. IF VARTYPE(_goHelper) = "O"
  65887.     This.SetLanguage()
  65888. ENDIF
  65889. ENDPROC
  65890. PROCEDURE Destroy
  65891. Use In (This.Grid1.RecordSource)
  65892. If Used("CrsTemp")
  65893.     Use In "CrsTemp"
  65894. Endif
  65895. ENDPROC
  65896. PROCEDURE Unload
  65897. IF NOT EMPTY(Thisform.cRecipients)
  65898.     RETURN Thisform.cRecipients
  65899. ENDIF 
  65900. ENDPROC
  65901. THISFORM
  65902. RELEASE
  65903. Click,
  65904. No Selected e-mails...
  65905. Safetyv
  65906. emails
  65907. EMAIL
  65908. THISFORM
  65909. GRID1
  65910. RECORDSOURCE    
  65911. LSELECTED
  65912. EMAILS
  65913. ACTIVEFORM
  65914. CAPTION
  65915. LCRECIPENTLIST
  65916. CRECIPIENTS
  65917. RELEASE
  65918. Click,
  65919. LNRELCOL
  65920. LNRELROW
  65921. LNWHERE
  65922. GRIDHITTEST
  65923. THISFORM
  65924. NGRIDX
  65925. NGRIDY
  65926. COLUMNS
  65927. CHECK1
  65928. VALUE
  65929. REFRESH
  65930. LNRELCOL
  65931. LNRELROW
  65932. LNWHERE
  65933. GRIDHITTEST
  65934. THISFORM
  65935. NGRIDX
  65936. NGRIDY
  65937. COLUMNS
  65938. CHECK1
  65939. VALUE6
  65940. NBUTTON
  65941. NSHIFT
  65942. NXCOORD
  65943. NYCOORD
  65944. THISFORM
  65945. NGRIDX
  65946. NGRIDY
  65947. DblClick,
  65948. Click3
  65949. MouseDown:
  65950.             SELECT RECNO() as nrec,* FROM <<m.lcAlias>> ;
  65951.             WHERE LOWER(<<m.lcSearchField>>) ;
  65952.             like '%' + '<<m.lcSearchValue>>' + '%';
  65953.             INTO CURSOR CrsTemp
  65954. VALUE
  65955. LCSEARCHVALUE
  65956. LCSEARCHFIELD
  65957. LCALIAS
  65958. LNSELECT
  65959. THISFORM
  65960. GRID1
  65961. RECORDSOURCE
  65962. CSEARCHFIELD
  65963. LCSEARCHSQL
  65964. CRSTEMP
  65965. REFRESH
  65966. Valid,
  65967. !Arial, 0, 9, 5, 15, 12, 32, 3, 0
  65968. aTop = 0
  65969. Left = 7
  65970. Width = 24
  65971. Height = 21
  65972. BackStyle = 0
  65973. BorderWidth = 0
  65974. Name = "Container1"
  65975. Form1
  65976. Container1
  65977.     container
  65978.     container
  65979. Top = -1
  65980. Left = 8
  65981. Height = 22
  65982. Width = 24
  65983. Picture = images\pr_locate.bmp
  65984. Caption = ""
  65985. TabStop = .F.
  65986. SpecialEffect = 2
  65987. Name = "Command1"
  65988. Form1
  65989. Command1
  65990. commandbutton
  65991. commandbutton
  65992. .PROCEDURE Click
  65993. Thisform.Release()
  65994. ENDPROC
  65995. Top = 387
  65996. Left = 539
  65997. Height = 27
  65998. Width = 84
  65999. Anchor = 12
  66000. Cancel = .T.
  66001. Caption = "Cancel"
  66002. TabIndex = 5
  66003. Name = "cmdCancel"
  66004. Form1
  66005.     cmdCancel
  66006. commandbutton
  66007. commandbutton
  66008. (PROCEDURE Click
  66009. Select email From (Thisform.Grid1.RecordSource);
  66010.     Where Lselected ;
  66011.     And ;
  66012.     Not Empty(email) Into Array emails
  66013. If _Tally = 0
  66014.     Messagebox('No Selected e-mails...',16,_Screen.ActiveForm.Caption)
  66015.     Return
  66016. Endif
  66017. If Set("Safety")='ON'
  66018.     Set Safety Off
  66019. Endif
  66020. Local lcRecipentList
  66021. lcRecipentList=""
  66022. For ix=1 To Alen("emails")
  66023.     lcRecipentList = lcRecipentList+Trim(emails[ix])+";"
  66024. Endfor
  66025. m.lcRecipentList = Left(m.lcRecipentList,Len(m.lcRecipentList)-1)
  66026. Thisform.cRecipients = m.lcRecipentList
  66027. Thisform.Release
  66028. ENDPROC
  66029. ngridx
  66030. ngridy
  66031. crecipients
  66032. _memberdata XML Metadata for customizable properties
  66033. csearchfield
  66034. clocsearchfld
  66035. lclosetable
  66036. *updatesearchfld 
  66037. *doselectall 
  66038. *dounselectall 
  66039. *doselectinvert 
  66040. *setlanguage 
  66041. label
  66042. label
  66043. lblSearchFld
  66044. Form1
  66045. AutoSize = .T.
  66046. BackStyle = 0
  66047. Caption = "Search Field : "
  66048. Height = 17
  66049. Left = 37
  66050. Top = 3
  66051. Width = 80
  66052. ForeColor = 255,0,0
  66053. Name = "lblSearchFld"
  66054. textbox
  66055. textbox
  66056.     TxtSearch
  66057. Form1
  66058. BHeight = 25
  66059. Left = 8
  66060. Top = 21
  66061. Width = 227
  66062. Name = "TxtSearch"
  66063. PROCEDURE Valid
  66064. IF NOT EMPTY(This.Value)
  66065.     Local lcSearchValue,lcSearchField,lcAlias,lnSelect
  66066.     lcAlias = Thisform.Grid1.RecordSource
  66067.     lcSearchField = Thisform.cSearchField
  66068.     lcSearchValue = Chrtran(Trim(LOWER(This.Value)),"'","%")
  66069.     lnSelect = Select(0)
  66070.     TEXT TO m.lcSearchSQL TEXTMERGE noshow
  66071.             SELECT RECNO() as nrec,* FROM <<m.lcAlias>> ;
  66072.             WHERE LOWER(<<m.lcSearchField>>) ;
  66073.             like '%' + '<<m.lcSearchValue>>' + '%';
  66074.             INTO CURSOR CrsTemp
  66075.     ENDTEXT
  66076.     *_Cliptext = m.lcSearchSQL
  66077.     Execscript(m.lcSearchSQL)
  66078.     If _Tally # 0
  66079.         Select (Thisform.Grid1.RecordSource)
  66080.         Go (CrsTemp.nrec) In (Thisform.Grid1.RecordSource)
  66081.         Thisform.Refresh()
  66082.     ENDIF
  66083. ENDIF
  66084. ENDPROC
  66085. kTop = 387
  66086. Left = 443
  66087. Height = 27
  66088. Width = 84
  66089. Anchor = 12
  66090. Caption = "Ok"
  66091. TabIndex = 4
  66092. Name = "cmdOK"
  66093. Form1
  66094. cmdOK
  66095. commandbutton
  66096. commandbutton
  66097. Top = 396
  66098. Left = 12
  66099. Height = 17
  66100. Width = 36
  66101. cgrideval = Thisform.Grid1
  66102. csortascendinggraphic = images\pr_sortascending.bmp
  66103. csortdescendinggraphic = images\pr_sortDescending.bmp
  66104. Name = "Gridsort1"
  66105. Form1
  66106.     Gridsort1
  66107. custom
  66108. pr_rcsgridsort.vcx
  66109. gridsort
  66110. Anchor = 15
  66111. DeleteMark = .F.
  66112. Height = 331
  66113. Left = 8
  66114. RecordMark = .F.
  66115. Top = 50
  66116. Width = 620
  66117. GridLineColor = 192,192,192
  66118. HighlightBackColor = 159,159,208
  66119. HighlightForeColor = 255,255,255
  66120. HighlightStyle = 2
  66121. AllowCellSelection = .F.
  66122. Name = "Grid1"
  66123. Form1
  66124. Grid1
  66125. lPROCEDURE DblClick
  66126. Local lnRelCol, lnRelRow, lnWhere
  66127. Store 0 To lnWhere, lnRelRow, lnRelCol
  66128. This.GridHitTest(Thisform.ngridx, Thisform.ngridy, @lnWhere, @lnRelRow, @lnRelCol)
  66129. If lnWhere = 3            && Cell
  66130. *    If lnRelCol = 1        && column 1
  66131.         This.Columns(1).Check1.Value = Not This.Columns(1).Check1.Value
  66132. *    Endif
  66133. ENDIF
  66134. Thisform.Refresh()
  66135. ENDPROC
  66136. PROCEDURE Click
  66137. Local lnRelCol, lnRelRow, lnWhere
  66138. Store 0 To lnWhere, lnRelRow, lnRelCol
  66139. This.GridHitTest(Thisform.ngridx, Thisform.ngridy, @lnWhere, @lnRelRow, @lnRelCol)
  66140. If lnWhere = 3            && Cell
  66141.     If lnRelCol = 1        && column 1
  66142.         This.Columns(lnRelCol).Check1.Value = Not This.Columns(lnRelCol).Check1.Value
  66143.     Endif
  66144. Endif
  66145. ENDPROC
  66146. PROCEDURE MouseDown
  66147. Lparameters nButton, nShift, nXCoord, nYCoord
  66148. * Save mouse position to use in Grid.Click
  66149. Thisform.ngridx = nXCoord
  66150. Thisform.ngridy = nYCoord
  66151. ENDPROC
  66152. PROCEDURE Init
  66153. ******************************************************************
  66154. *  FUNCTION NAME: Init
  66155. *  AUTHOR, DATE:
  66156. *      Paul Mrozowski, 5/7/2007  
  66157. *  PROCEDURE DESCRIPTION:
  66158. *      Get things started.
  66159. *  INPUT PARAMETERS:
  66160. *      None
  66161. *  OUTPUT PARAMETERS:
  66162. *      None
  66163. ******************************************************************
  66164. This.oIndex = CREATEOBJECT("Collection")
  66165. * This.BindControl()
  66166. ENDPROC
  66167. PROCEDURE bindcontrol
  66168. ******************************************************************
  66169. *  FUNCTION NAME: Bindcontrol
  66170. *  AUTHOR, DATE:
  66171. *      Paul Mrozowski, 5/7/2007  
  66172. *  PROCEDURE DESCRIPTION:
  66173. *      Bind us to the headers in the grid.
  66174. *  INPUT PARAMETERS:
  66175. *      None
  66176. *  OUTPUT PARAMETERS:
  66177. *      None
  66178. ******************************************************************
  66179. LOCAL loGrid AS Grid, ;
  66180.       loColumn AS Column, ;
  66181.       loControl
  66182.    loGrid = EVALUATE(This.cGridEval)
  66183.    IF TYPE("loGrid") = "O"
  66184.       FOR EACH loColumn IN loGrid.Columns
  66185.           FOR EACH loControl IN loColumn.Controls
  66186.               IF loControl.BaseClass = "Header"
  66187.                  BINDEVENT(loControl, "DblClick", This, "Sort")
  66188.                  BINDEVENT(loControl, "RightClick", This, "Search")
  66189.                  EXIT
  66190.               ENDIF
  66191.           ENDFOR          
  66192.       ENDFOR
  66193.       
  66194.       IF PEMSTATUS(loGrid, "SaveSource", 5) 
  66195.          IF This.cAutoCleanOn = "S"
  66196.             BINDEVENT(loGrid, "SaveSource", This, "Cleanup")
  66197.          ENDIF 
  66198.          
  66199.          IF This.cAutoCleanOn = "R"
  66200.             BINDEVENT(loGrid, "RestoreSource", This, "Cleanup")
  66201.          ENDIF 
  66202.          
  66203.       ENDIF
  66204.    ENDIF
  66205. CATCH
  66206.    MESSAGEBOX("This.cGridEval doesn't evaluate to an object: " + This.cGridEval)
  66207. ENDTRY
  66208. ENDPROC
  66209. PROCEDURE search
  66210. LOCAL loGrid AS Grid, ;
  66211.     lcRecordSource, ;
  66212.     loEx AS Exception, ;
  66213.     laEvent[1], ;
  66214.     loHeader AS Header, ;
  66215.     loColumn AS Column, ;
  66216.     lcControlSource, ;
  66217.     lcIndexFile, ;
  66218.     luKey, ;
  66219.     lcField
  66220.     lnSelect = SELECT()
  66221.     loGrid = EVALUATE(This.cGridEval)
  66222.     IF TYPE("loGrid") <> "O"
  66223.         EXIT
  66224.     ENDIF
  66225.     IF EMPTY(This.cRecordSource)
  66226.         lcRecordSource = ALLTRIM(loGrid.RecordSource)
  66227.     ELSE
  66228.         lcRecordSource = ALLTRIM(This.cRecordSource)
  66229.     ENDIF
  66230.     IF !EMPTY(lcRecordSource)
  66231.         AEVENTS(laEvent, 0)
  66232.         loHeader = laEvent[1]
  66233.         loColumn = loHeader.Parent
  66234.         lcControlSource = ALLTRIM(loColumn.ControlSource)
  66235.         IF ("." $ lcControlSource)
  66236.             lcField = GETWORDNUM(lcControlSource, 2, ".")
  66237.         ELSE
  66238.             lcField = lcControlSource
  66239.         ENDIF
  66240. *        MESSAGEBOX(lcField)
  66241.         Thisform.UpdateSearchFld(lcField)
  66242.     ENDIF
  66243. CATCH TO loEx
  66244.     SET STEP ON
  66245.     MESSAGEBOX("Error sorting: " + loEx.Message, 48, "Error")
  66246. FINALLY
  66247.     SELECT (lnSelect)
  66248. ENDTRY
  66249. RETURN
  66250. IF !EMPTY(lcControlSource)
  66251.     IF ("." $ lcControlSource)
  66252.         lcFieldType = VARTYPE(EVALUATE(lcControlSource))
  66253.     ELSE
  66254.         lcFieldType = VARTYPE(EVALUATE(lcRecordSource + "." + lcControlSource))
  66255.     ENDIF
  66256.     lcIndexFile = FORCEEXT(ADDBS(SYS(2023)) + "_" + SYS(3), "IDX")
  66257.     DO CASE
  66258.         CASE lcFieldType = "T"
  66259.             lcIndexExpr = "INDEX ON TTOC(" + lcControlSource + ", 3) TO " + lcIndexFile + " ADDITIVE"
  66260.         CASE lcFieldType = "D"
  66261.             lcIndexExpr = "INDEX ON DTOS(" + lcControlSource + ") TO " + lcIndexFile + " ADDITIVE"
  66262.         CASE INLIST(lcFieldType, "N", "Y")
  66263.             lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  66264.         CASE lcFieldType = "C"
  66265.             lcIndexExpr = "INDEX ON ALLTRIM(UPPER(" + lcControlSource + ")) TO " + lcIndexFile + " ADDITIVE"
  66266.         CASE lcFieldType = "L"
  66267.             lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  66268.         OTHERWISE
  66269.             EXIT
  66270.     ENDCASE
  66271.     lcNewIndexExpr = This.IndexExpressionHook(lcIndexExpr, lcControlSource)
  66272.     IF VARTYPE(lcNewIndexExpr) = "C" AND !EMPTY(lcNewIndexExpr)
  66273.         lcIndexExpr = lcNewIndexExpr
  66274.     ENDIF
  66275.     luKey = This.oIndex.GetKey(lcControlSource)
  66276.     * Remove any existing header pictures, then add it to the current column
  66277.     loGrid.SetAll("Picture", "")
  66278.     SELECT (lcRecordSource)
  66279.     IF VARTYPE(luKey) = "N" AND luKey = 0
  66280.         * Index doesn't exist yet
  66281.         This.oIndex.Add(lcIndexFile, lcControlSource)
  66282.         &lcIndexExpr
  66283.         loHeader.Picture = This.cSortAscendingGraphic
  66284.     ELSE
  66285.         lcIndexFile = JUSTSTEM(This.oIndex[luKey])
  66286.         IF DESCENDING()
  66287.             SET ORDER TO &lcIndexFile ASCENDING
  66288.             loHeader.Picture = This.cSortAscendingGraphic
  66289.         ELSE
  66290.             SET ORDER TO &lcIndexFile DESCENDING
  66291.             loHeader.Picture = This.cSortDescendingGraphic
  66292.         ENDIF
  66293.     ENDIF
  66294.     LOCATE
  66295.     loGrid.Refresh()
  66296. ENDIF
  66297. IF lnBuffering > 3
  66298.     CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  66299. ENDIF
  66300. ENDPROC
  66301. Collection
  66302. OINDEX
  66303. COLUMN
  66304. loGridb
  66305. Header
  66306. DblClick
  66307. RightClick
  66308. Search
  66309. SaveSource
  66310. SaveSource
  66311. Cleanup
  66312. RestoreSource
  66313. Cleanup
  66314. This.cGridEval doesn't evaluate to an object: 
  66315. LOGRID
  66316. LOCOLUMN    
  66317. LOCONTROL
  66318. THIS    
  66319. CGRIDEVAL
  66320. COLUMNS
  66321. CONTROLS    
  66322. BASECLASS
  66323. CAUTOCLEANON
  66324. EXCEPTION
  66325. HEADER
  66326. COLUMN
  66327. loGridb
  66328. Error sorting: 
  66329. Error
  66330. INDEX ON TTOC(
  66331. , 3) TO 
  66332.  ADDITIVE
  66333. INDEX ON DTOS(
  66334. ) TO 
  66335.  ADDITIVE
  66336. INDEX ON 
  66337.  ADDITIVE
  66338. INDEX ON ALLTRIM(UPPER(
  66339. )) TO 
  66340.  ADDITIVE
  66341. INDEX ON 
  66342.  ADDITIVE
  66343. Picture
  66344. &lcIndexExpr
  66345. SET ORDER TO &lcIndexFile ASCENDING
  66346. SET ORDER TO &lcIndexFile DESCENDING
  66347. Buffering
  66348. LOGRID
  66349. LCRECORDSOURCE
  66350. LAEVENT
  66351. LOHEADER
  66352. LOCOLUMN
  66353. LCCONTROLSOURCE
  66354. LCINDEXFILE
  66355. LUKEY
  66356. LCFIELD
  66357. LNSELECT
  66358. THIS    
  66359. CGRIDEVAL
  66360. CRECORDSOURCE
  66361. RECORDSOURCE
  66362. PARENT
  66363. CONTROLSOURCE
  66364. THISFORM
  66365. UPDATESEARCHFLD
  66366. MESSAGE
  66367. LCFIELDTYPE
  66368. LCINDEXEXPR
  66369. LCNEWINDEXEXPR
  66370. INDEXEXPRESSIONHOOK
  66371. OINDEX
  66372. GETKEY
  66373. SETALL
  66374. PICTURE
  66375. CSORTASCENDINGGRAPHIC
  66376. CSORTDESCENDINGGRAPHIC
  66377. REFRESH
  66378. LNBUFFERING
  66379. Init,
  66380. bindcontrol^
  66381. search
  66382. TCFIELD
  66383. THISFORM
  66384. CSEARCHFIELD
  66385. LBLSEARCHFLD
  66386. CAPTION
  66387. CLOCSEARCHFLDS
  66388. LNREC
  66389. THISFORM
  66390. GRID1
  66391. RECORDSOURCE    
  66392. LSELECTED
  66393. REFRESHP
  66394. LNREC
  66395. THISFORM
  66396. GRID1
  66397. RECORDSOURCE    
  66398. LSELECTED
  66399. REFRESH
  66400. EXCEPTION
  66401. SEARCHFLD
  66402. GOTOPG_OK
  66403. CANCEL
  66404. SELECTRECI
  66405. LOEXC
  66406. THIS    
  66407. LCCAPTION    
  66408. _GOHELPER
  66409. GETLOC
  66410. LBLSEARCHFLD
  66411. CAPTION
  66412. CLOCSEARCHFLD
  66413. CMDOK    
  66414. CMDCANCEL
  66415. \data\customer
  66416. @vfp.com
  66417. IMAGE
  66418. Image
  66419. images\pr_locate.bmp
  66420. _GOHELPER
  66421. CONTACT
  66422. EMAIL
  66423. LODUMMY
  66424. PICTURE
  66425. C_AdressBook
  66426. Could not load the adress book table!
  66427. Error
  66428. EMAIL
  66429.     SELECT .F. AS lSelected, * FROM ;
  66430.     <<m.tcCursor>>  WHERE .t. ;
  66431.     INTO CURSOR CrsAdresses READWRITE
  66432. C_AdressBook
  66433. C_AdressBookW
  66434. pr_mail03.ico
  66435. CrsAdresses
  66436. COLUMN
  66437. HEADER
  66438. HEADER
  66439. wingdings
  66440. DblClick
  66441. DoSelectAll
  66442. RightClick
  66443. DoUnselectAll
  66444. Check1
  66445. CheckBox
  66446. Check1
  66447. Check1
  66448. text1
  66449. DynamicForeColor
  66450. ICASE(lSelected=.t.,RGB(255,0,0),lSelected=.f.,RGB(0,0,0))
  66451. Column
  66452. DynamicFontBold
  66453. lSelected=.t.
  66454. Column
  66455. TCCURSOR
  66456. TCSEARCHFIELD
  66457. LLERROR
  66458. C_ADRESSBOOK
  66459. THISFORM
  66460. UPDATESEARCHFLD
  66461. LCSQL
  66462. CSEARCHFIELD
  66463. GRID1
  66464. RECORDSOURCE
  66465. COLUMNCOUNT
  66466. LOCKCOLUMNS
  66467. LOCOLUMN
  66468. COLUMNS
  66469. HEADER1
  66470. FONTBOLD
  66471. FONTSIZE    
  66472. ALIGNMENT    
  66473. FORECOLOR
  66474. CONTROLSOURCE
  66475. VISIBLE    
  66476. GRIDSORT1
  66477. BINDCONTROL
  66478. COLUMN1
  66479. LOHEADER
  66480. FONTNAME
  66481. CAPTION
  66482. WIDTH    
  66483. ADDOBJECT
  66484. SPARSE
  66485. CURRENTCONTROL
  66486. CHECK1
  66487. REMOVEOBJECT
  66488. AUTOFIT
  66489. SETALL    
  66490. _GOHELPER
  66491. SETLANGUAGE?
  66492. CrsTemp
  66493. CrsTemp
  66494. GRID1
  66495. RECORDSOURCE&
  66496. THISFORM
  66497. CRECIPIENTS
  66498. updatesearchfld,
  66499. doselectall
  66500. dounselectallD
  66501. setlanguage
  66502. Load 
  66503. Init4
  66504. Destroy
  66505. Unload
  66506. wwwwwwwwwwww
  66507. wwwwwwp
  66508. PLATFORM
  66509. UNIQUEID
  66510. TIMESTAMP
  66511. CLASS
  66512. CLASSLOC
  66513. BASECLASS
  66514. OBJNAME
  66515. PARENT
  66516. PROPERTIES
  66517. PROTECTED
  66518. METHODS
  66519. OBJCODE
  66520. RESERVED1
  66521. RESERVED2
  66522. RESERVED3
  66523. RESERVED4
  66524. RESERVED5
  66525. RESERVED6
  66526. RESERVED7
  66527. RESERVED8
  66528.  COMMENT Class               
  66529.  WINDOWS _22W0OBY4H1045105419L
  66530.  COMMENT RESERVED            
  66531. VERSION =   3.00
  66532. gridsort
  66533. Pixels
  66534. Class
  66535. custom
  66536. gridsort
  66537. cgrideval Eval'd to retrieve reference to the grid.
  66538. _memberdata XML Metadata for customizable properties
  66539. crecordsource Leave empty to read the record source from the grid, fill in to override.
  66540. oindex
  66541. 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.
  66542. csortascendinggraphic
  66543. csortdescendinggraphic
  66544. *sort 
  66545. *bindcontrol 
  66546. *indexexpressionhook 
  66547. *cleanup 
  66548. *search 
  66549. EXCEPTION
  66550. HEADER
  66551. COLUMN
  66552. loGridb
  66553. Buffering
  66554. Buffering
  66555. INDEX ON TTOC(
  66556. , 3) TO 
  66557.  ADDITIVE
  66558. INDEX ON DTOS(
  66559. ) TO 
  66560.  ADDITIVE
  66561. INDEX ON 
  66562.  ADDITIVE
  66563. INDEX ON ALLTRIM(UPPER(
  66564. )) TO 
  66565.  ADDITIVE
  66566. INDEX ON 
  66567.  ADDITIVE
  66568. Picture
  66569. &lcIndexExpr
  66570. SET ORDER TO &lcIndexFile ASCENDING
  66571. SET ORDER TO &lcIndexFile DESCENDING
  66572. Buffering
  66573. Error sorting: 
  66574. Error
  66575. LOGRID
  66576. LCRECORDSOURCE
  66577. LNBUFFERING
  66578. LAEVENT
  66579. LOHEADER
  66580. LOCOLUMN
  66581. LCFIELDTYPE
  66582. LCINDEXEXPR
  66583. LCCONTROLSOURCE
  66584. LCINDEXFILE
  66585. LUKEY
  66586. LNSELECT
  66587. LCNEWINDEXEXPR
  66588. THIS    
  66589. CGRIDEVAL
  66590. CRECORDSOURCE
  66591. RECORDSOURCE
  66592. PARENT
  66593. CONTROLSOURCE
  66594. INDEXEXPRESSIONHOOK
  66595. OINDEX
  66596. GETKEY
  66597. SETALL
  66598. PICTURE
  66599. CSORTASCENDINGGRAPHIC
  66600. CSORTDESCENDINGGRAPHIC
  66601. REFRESH
  66602. MESSAGE
  66603. COLUMN
  66604. loGridb
  66605. Header
  66606. DblClick
  66607. Click
  66608. Search
  66609. SaveSource
  66610. SaveSource
  66611. Cleanup
  66612. RestoreSource
  66613. Cleanup
  66614. This.cGridEval doesn't evaluate to an object: 
  66615. LOGRID
  66616. LOCOLUMN    
  66617. LOCONTROL
  66618. THIS    
  66619. CGRIDEVAL
  66620. COLUMNS
  66621. CONTROLS    
  66622. BASECLASS
  66623. CAUTOCLEANON
  66624. TCINDEXEXPR
  66625. TCCONTROLSOURCE1
  66626. loGridb
  66627. Picture
  66628. Header
  66629. Buffering
  66630. Buffering
  66631. Safetyv
  66632. Buffering
  66633. SET SAFETY &lcSafety
  66634. Collection
  66635. LNSELECT
  66636. LCRECORDSOURCE
  66637. LCSAFETY
  66638. LCINDEX
  66639. LNBUFFERING
  66640. LOGRID
  66641. THIS    
  66642. CGRIDEVAL
  66643. SETALL
  66644. CRECORDSOURCE
  66645. RECORDSOURCE
  66646. OINDEX
  66647. EXCEPTION
  66648. HEADER
  66649. COLUMN
  66650. loGridb
  66651. Buffering
  66652. Buffering
  66653. INDEX ON TTOC(
  66654. , 3) TO 
  66655.  ADDITIVE
  66656. INDEX ON DTOS(
  66657. ) TO 
  66658.  ADDITIVE
  66659. INDEX ON 
  66660.  ADDITIVE
  66661. INDEX ON ALLTRIM(UPPER(
  66662. )) TO 
  66663.  ADDITIVE
  66664. INDEX ON 
  66665.  ADDITIVE
  66666. Picture
  66667. &lcIndexExpr
  66668. SET ORDER TO &lcIndexFile ASCENDING
  66669. SET ORDER TO &lcIndexFile DESCENDING
  66670. Buffering
  66671. Error sorting: 
  66672. Error
  66673. LOGRID
  66674. LCRECORDSOURCE
  66675. LNBUFFERING
  66676. LAEVENT
  66677. LOHEADER
  66678. LOCOLUMN
  66679. LCFIELDTYPE
  66680. LCINDEXEXPR
  66681. LCCONTROLSOURCE
  66682. LCINDEXFILE
  66683. LUKEY
  66684. LNSELECT
  66685. LCNEWINDEXEXPR
  66686. THIS    
  66687. CGRIDEVAL
  66688. CRECORDSOURCE
  66689. RECORDSOURCE
  66690. PARENT
  66691. CONTROLSOURCE
  66692. INDEXEXPRESSIONHOOK
  66693. OINDEX
  66694. GETKEY
  66695. SETALL
  66696. PICTURE
  66697. CSORTASCENDINGGRAPHIC
  66698. CSORTDESCENDINGGRAPHIC
  66699. REFRESH
  66700. MESSAGE-
  66701. Collection
  66702. OINDEX
  66703. BINDCONTROL
  66704. CLEANUP
  66705. OINDEX
  66706. sort,
  66707. bindcontrolv
  66708. indexexpressionhook
  66709. cleanup
  66710. search
  66711. Destroy2
  66712. PROCEDURE sort
  66713. ******************************************************************
  66714. *  FUNCTION NAME: Sort
  66715. *  AUTHOR, DATE:
  66716. *      Paul Mrozowski, 5/7/2007  
  66717. *  PROCEDURE DESCRIPTION:
  66718. *      Handle sorting the grid.
  66719. *  INPUT PARAMETERS:
  66720. *      None
  66721. *  OUTPUT PARAMETERS:
  66722. *      None
  66723. ******************************************************************
  66724. LOCAL loGrid AS Grid, ;
  66725.       lcRecordSource, ;
  66726.       lnBuffering, ;
  66727.       loEx AS Exception, ;
  66728.       laEvent[1], ;
  66729.       loHeader AS Header, ;
  66730.       loColumn AS Column, ;
  66731.       lcFieldType, ;
  66732.       lcIndexExpr, ;
  66733.       lcControlSource, ;
  66734.       lcIndexFile, ;
  66735.       luKey, ;
  66736.       lnSelect, ;
  66737.       lcNewIndexExpr 
  66738.    lnSelect = SELECT()
  66739.    loGrid = EVALUATE(This.cGridEval)
  66740.    IF TYPE("loGrid") <> "O"
  66741.       EXIT
  66742.    ENDIF
  66743.    IF EMPTY(This.cRecordSource)
  66744.       lcRecordSource = ALLTRIM(loGrid.RecordSource)
  66745.    ELSE
  66746.       lcRecordSource = ALLTRIM(This.cRecordSource)
  66747.    ENDIF
  66748.    IF !EMPTY(lcRecordSource) 
  66749.       * You can't index table-buffered cursors
  66750.       lnBuffering = CURSORGETPROP("Buffering", lcRecordSource)
  66751.       
  66752.       IF lnBuffering > 3
  66753.          CURSORSETPROP("Buffering", 3, lcRecordSource)
  66754.       ENDIF
  66755.       
  66756.       AEVENTS(laEvent, 0)
  66757.       
  66758.       loHeader = laEvent[1]
  66759.       loColumn = loHeader.Parent
  66760.       lcControlSource = ALLTRIM(loColumn.ControlSource)
  66761.       
  66762.       IF !EMPTY(lcControlSource)     
  66763.          IF ("." $ lcControlSource)
  66764.             lcFieldType = VARTYPE(EVALUATE(lcControlSource))
  66765.          ELSE
  66766.             lcFieldType = VARTYPE(EVALUATE(lcRecordSource + "." + lcControlSource))
  66767.          ENDIF    
  66768.          
  66769.          lcIndexFile = FORCEEXT(ADDBS(SYS(2023)) + "_" + SYS(3), "IDX")
  66770.          
  66771.          DO CASE
  66772.             CASE lcFieldType = "T"
  66773.                  lcIndexExpr = "INDEX ON TTOC(" + lcControlSource + ", 3) TO " + lcIndexFile + " ADDITIVE"
  66774.             CASE lcFieldType = "D"
  66775.                  lcIndexExpr = "INDEX ON DTOS(" + lcControlSource + ") TO " + lcIndexFile + " ADDITIVE"            
  66776.             CASE INLIST(lcFieldType, "N", "Y")
  66777.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"           
  66778.             CASE lcFieldType = "C"
  66779.                  lcIndexExpr = "INDEX ON ALLTRIM(UPPER(" + lcControlSource + ")) TO " + lcIndexFile + " ADDITIVE"
  66780.             CASE lcFieldType = "L"
  66781.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  66782.             OTHERWISE
  66783.                  EXIT
  66784.          ENDCASE 
  66785.          
  66786.          lcNewIndexExpr = This.IndexExpressionHook(lcIndexExpr, lcControlSource)
  66787.          
  66788.          IF VARTYPE(lcNewIndexExpr) = "C" AND !EMPTY(lcNewIndexExpr)
  66789.             lcIndexExpr = lcNewIndexExpr 
  66790.          ENDIF                  
  66791.          
  66792.          luKey = This.oIndex.GetKey(lcControlSource)                    
  66793.          
  66794.          * Remove any existing header pictures, then add it to the current column
  66795.          loGrid.SetAll("Picture", "")
  66796.          
  66797.          SELECT (lcRecordSource)
  66798.           
  66799.          IF VARTYPE(luKey) = "N" AND luKey = 0
  66800.             * Index doesn't exist yet
  66801.             This.oIndex.Add(lcIndexFile, lcControlSource)      
  66802.             &lcIndexExpr
  66803.             
  66804.             loHeader.Picture = This.cSortAscendingGraphic
  66805.             
  66806.          ELSE
  66807.             lcIndexFile = JUSTSTEM(This.oIndex[luKey])
  66808.             
  66809.             IF DESCENDING()
  66810.                SET ORDER TO &lcIndexFile ASCENDING
  66811.                loHeader.Picture = This.cSortAscendingGraphic
  66812.             ELSE
  66813.                SET ORDER TO &lcIndexFile DESCENDING
  66814.                loHeader.Picture = This.cSortDescendingGraphic 
  66815.             ENDIF
  66816.          ENDIF
  66817.          
  66818.          LOCATE
  66819.          
  66820.          loGrid.Refresh()
  66821.       ENDIF      
  66822.       
  66823.       IF lnBuffering > 3
  66824.          CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  66825.       ENDIF
  66826.    ENDIF
  66827. CATCH TO loEx 
  66828.    SET STEP ON 
  66829.    MESSAGEBOX("Error sorting: " + loEx.Message, 48, "Error")
  66830. FINALLY
  66831.    SELECT (lnSelect)
  66832. ENDTRY
  66833. ENDPROC
  66834. PROCEDURE bindcontrol
  66835. ******************************************************************
  66836. *  FUNCTION NAME: Bindcontrol
  66837. *  AUTHOR, DATE:
  66838. *      Paul Mrozowski, 5/7/2007  
  66839. *  PROCEDURE DESCRIPTION:
  66840. *      Bind us to the headers in the grid.
  66841. *  INPUT PARAMETERS:
  66842. *      None
  66843. *  OUTPUT PARAMETERS:
  66844. *      None
  66845. ******************************************************************
  66846. LOCAL loGrid AS Grid, ;
  66847.       loColumn AS Column, ;
  66848.       loControl
  66849.    loGrid = EVALUATE(This.cGridEval)
  66850.    IF TYPE("loGrid") = "O"
  66851.       FOR EACH loColumn IN loGrid.Columns
  66852.           FOR EACH loControl IN loColumn.Controls
  66853.               IF loControl.BaseClass = "Header"
  66854.                  BINDEVENT(loControl, "DblClick", This, "Sort")
  66855.                  BINDEVENT(loControl, "Click", This, "Search")
  66856.                  EXIT
  66857.               ENDIF
  66858.           ENDFOR          
  66859.       ENDFOR
  66860.       
  66861.       IF PEMSTATUS(loGrid, "SaveSource", 5) 
  66862.          IF This.cAutoCleanOn = "S"
  66863.             BINDEVENT(loGrid, "SaveSource", This, "Cleanup")
  66864.          ENDIF 
  66865.          
  66866.          IF This.cAutoCleanOn = "R"
  66867.             BINDEVENT(loGrid, "RestoreSource", This, "Cleanup")
  66868.          ENDIF 
  66869.          
  66870.       ENDIF
  66871.    ENDIF
  66872. CATCH
  66873.    MESSAGEBOX("This.cGridEval doesn't evaluate to an object: " + This.cGridEval)
  66874. ENDTRY
  66875. ENDPROC
  66876. PROCEDURE indexexpressionhook
  66877. LPARAMETERS tcIndexExpr, tcControlSource
  66878. ******************************************************************
  66879. *  FUNCTION NAME: IndexExpressionHook
  66880. *  AUTHOR, DATE:
  66881. *      Paul Mrozowski, 5/7/2007  
  66882. *  PROCEDURE DESCRIPTION:
  66883. *      Hook point to change how indexes are created or do things
  66884. *     like create an index on multiple fields when they click
  66885. *     on a particular header item.
  66886. *  INPUT PARAMETERS:
  66887. *      tcIndexExpr - Index expression
  66888. *     tcControlSource - Control source
  66889. *  OUTPUT PARAMETERS:
  66890. *      None
  66891. ******************************************************************
  66892. * RETURN tcIndexExpr + ",SomeOtherField"
  66893. ENDPROC
  66894. PROCEDURE cleanup
  66895. ******************************************************************
  66896. *  FUNCTION NAME: Cleanup
  66897. *  AUTHOR, DATE:
  66898. *      Paul Mrozowski, 5/7/2007  
  66899. *  PROCEDURE DESCRIPTION:
  66900. *      Clean-un and remove any temp indexes.
  66901. *  INPUT PARAMETERS:
  66902. *      None
  66903. *  OUTPUT PARAMETERS:
  66904. *      None
  66905. ******************************************************************
  66906. LOCAL lnSelect, ;
  66907.       lcRecordSource, ;
  66908.       lcSafety, ;
  66909.       lcIndex, ;
  66910.       lnBuffering, ;
  66911.       loEx, ;
  66912.       loGrid AS Grid
  66913. lnBuffering = 0      
  66914. lnSelect = SELECT()
  66915. TRY   
  66916.    loGrid = EVALUATE(This.cGridEval)
  66917.    IF TYPE("loGrid") <> "O"
  66918.       EXIT
  66919.    ENDIF
  66920.    loGrid.SetAll("Picture", "", "Header")
  66921.    IF EMPTY(This.cRecordSource)
  66922.       lcRecordSource = ALLTRIM(loGrid.RecordSource)
  66923.    ELSE
  66924.       lcRecordSource = ALLTRIM(This.cRecordSource)
  66925.    ENDIF
  66926.    SELECT (lcRecordSource)
  66927.    lnBuffering = CURSORGETPROP("Buffering", lcRecordSource)
  66928.    IF lnBuffering > 3
  66929.       CURSORSETPROP("Buffering", 3, lcRecordSource)
  66930.    ENDIF
  66931.    SET INDEX TO 
  66932. CATCH TO loEx
  66933.    * The table/cursor may have already been closed
  66934. ENDTRY
  66935. lcSafety = SET("Safety")
  66936. SET SAFETY OFF
  66937. FOR EACH lcIndex IN This.oIndex
  66938.     TRY
  66939.        ERASE (lcIndex)
  66940.     CATCH
  66941.     ENDTRY
  66942. ENDFOR
  66943. IF VARTYPE(loEx) <> "O" AND lnBuffering > 3 
  66944.    CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  66945. ENDIF
  66946. SET SAFETY &lcSafety
  66947.    SELECT (lnSelect)
  66948. CATCH
  66949. ENDTRY   
  66950. This.oIndex = CREATEOBJECT("Collection")
  66951. ENDPROC
  66952. PROCEDURE search
  66953. LOCAL loGrid AS Grid, ;
  66954.       lcRecordSource, ;
  66955.       lnBuffering, ;
  66956.       loEx AS Exception, ;
  66957.       laEvent[1], ;
  66958.       loHeader AS Header, ;
  66959.       loColumn AS Column, ;
  66960.       lcFieldType, ;
  66961.       lcIndexExpr, ;
  66962.       lcControlSource, ;
  66963.       lcIndexFile, ;
  66964.       luKey, ;
  66965.       lnSelect, ;
  66966.       lcNewIndexExpr 
  66967.    lnSelect = SELECT()
  66968.    loGrid = EVALUATE(This.cGridEval)
  66969.    IF TYPE("loGrid") <> "O"
  66970.       EXIT
  66971.    ENDIF
  66972.    IF EMPTY(This.cRecordSource)
  66973.       lcRecordSource = ALLTRIM(loGrid.RecordSource)
  66974.    ELSE
  66975.       lcRecordSource = ALLTRIM(This.cRecordSource)
  66976.    ENDIF
  66977.    IF !EMPTY(lcRecordSource) 
  66978.       * You can't index table-buffered cursors
  66979.       lnBuffering = CURSORGETPROP("Buffering", lcRecordSource)
  66980.       
  66981.       IF lnBuffering > 3
  66982.          CURSORSETPROP("Buffering", 3, lcRecordSource)
  66983.       ENDIF
  66984.       
  66985.       AEVENTS(laEvent, 0)
  66986.       
  66987.       loHeader = laEvent[1]
  66988.       loColumn = loHeader.Parent
  66989.       lcControlSource = ALLTRIM(loColumn.ControlSource)
  66990.       
  66991.       IF !EMPTY(lcControlSource)     
  66992.          IF ("." $ lcControlSource)
  66993.             lcFieldType = VARTYPE(EVALUATE(lcControlSource))
  66994.          ELSE
  66995.             lcFieldType = VARTYPE(EVALUATE(lcRecordSource + "." + lcControlSource))
  66996.          ENDIF    
  66997.          
  66998.          lcIndexFile = FORCEEXT(ADDBS(SYS(2023)) + "_" + SYS(3), "IDX")
  66999.          
  67000.          DO CASE
  67001.             CASE lcFieldType = "T"
  67002.                  lcIndexExpr = "INDEX ON TTOC(" + lcControlSource + ", 3) TO " + lcIndexFile + " ADDITIVE"
  67003.             CASE lcFieldType = "D"
  67004.                  lcIndexExpr = "INDEX ON DTOS(" + lcControlSource + ") TO " + lcIndexFile + " ADDITIVE"            
  67005.             CASE INLIST(lcFieldType, "N", "Y")
  67006.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"           
  67007.             CASE lcFieldType = "C"
  67008.                  lcIndexExpr = "INDEX ON ALLTRIM(UPPER(" + lcControlSource + ")) TO " + lcIndexFile + " ADDITIVE"
  67009.             CASE lcFieldType = "L"
  67010.                  lcIndexExpr = "INDEX ON " + lcControlSource + " TO " + lcIndexFile + " ADDITIVE"
  67011.             OTHERWISE
  67012.                  EXIT
  67013.          ENDCASE 
  67014.          
  67015.          lcNewIndexExpr = This.IndexExpressionHook(lcIndexExpr, lcControlSource)
  67016.          
  67017.          IF VARTYPE(lcNewIndexExpr) = "C" AND !EMPTY(lcNewIndexExpr)
  67018.             lcIndexExpr = lcNewIndexExpr 
  67019.          ENDIF                  
  67020.          
  67021.          luKey = This.oIndex.GetKey(lcControlSource)                    
  67022.          
  67023.          * Remove any existing header pictures, then add it to the current column
  67024.          loGrid.SetAll("Picture", "")
  67025.          
  67026.          SELECT (lcRecordSource)
  67027.           
  67028.          IF VARTYPE(luKey) = "N" AND luKey = 0
  67029.             * Index doesn't exist yet
  67030.             This.oIndex.Add(lcIndexFile, lcControlSource)      
  67031.             &lcIndexExpr
  67032.             
  67033.             loHeader.Picture = This.cSortAscendingGraphic
  67034.             
  67035.          ELSE
  67036.             lcIndexFile = JUSTSTEM(This.oIndex[luKey])
  67037.             
  67038.             IF DESCENDING()
  67039.                SET ORDER TO &lcIndexFile ASCENDING
  67040.                loHeader.Picture = This.cSortAscendingGraphic
  67041.             ELSE
  67042.                SET ORDER TO &lcIndexFile DESCENDING
  67043.                loHeader.Picture = This.cSortDescendingGraphic 
  67044.             ENDIF
  67045.          ENDIF
  67046.          
  67047.          LOCATE
  67048.          
  67049.          loGrid.Refresh()
  67050.       ENDIF      
  67051.       
  67052.       IF lnBuffering > 3
  67053.          CURSORSETPROP("Buffering", lnBuffering, lcRecordSource)
  67054.       ENDIF
  67055.    ENDIF
  67056. CATCH TO loEx 
  67057.    SET STEP ON 
  67058.    MESSAGEBOX("Error sorting: " + loEx.Message, 48, "Error")
  67059. FINALLY
  67060.    SELECT (lnSelect)
  67061. ENDTRY
  67062. ENDPROC
  67063. PROCEDURE Init
  67064. ******************************************************************
  67065. *  FUNCTION NAME: Init
  67066. *  AUTHOR, DATE:
  67067. *      Paul Mrozowski, 5/7/2007  
  67068. *  PROCEDURE DESCRIPTION:
  67069. *      Get things started.
  67070. *  INPUT PARAMETERS:
  67071. *      None
  67072. *  OUTPUT PARAMETERS:
  67073. *      None
  67074. ******************************************************************
  67075. This.oIndex = CREATEOBJECT("Collection")
  67076. This.BindControl()
  67077. ENDPROC
  67078. PROCEDURE Destroy
  67079. ******************************************************************
  67080. *  FUNCTION NAME: Destroy
  67081. *  AUTHOR, DATE:
  67082. *      Paul Mrozowski, 5/7/2007  
  67083. *  PROCEDURE DESCRIPTION:
  67084. *      Clean up.
  67085. *  INPUT PARAMETERS:
  67086. *      None
  67087. *  OUTPUT PARAMETERS:
  67088. *      None
  67089. ******************************************************************
  67090. This.Cleanup()
  67091. This.oIndex = NULL
  67092. ENDPROC
  67093. cgrideval = 
  67094. _memberdata = 
  67095.      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>
  67096. crecordsource = 
  67097. oindex = .NULL.
  67098. cautocleanon = S
  67099. csortascendinggraphic = pr_SortAscending.bmp
  67100. csortdescendinggraphic = pr_SortDescending.bmp
  67101. Name = "gridsort"
  67102. customBMx
  67103. PLATFORM
  67104. UNIQUEID
  67105. TIMESTAMP
  67106. CLASS
  67107. CLASSLOC
  67108. BASECLASS
  67109. OBJNAME
  67110. PARENT
  67111. PROPERTIES
  67112. PROTECTED
  67113. METHODS
  67114. OBJCODE
  67115. RESERVED1
  67116. RESERVED2
  67117. RESERVED3
  67118. RESERVED4
  67119. RESERVED5
  67120. RESERVED6
  67121. RESERVED7
  67122. RESERVED8
  67123.  COMMENT Class               
  67124.  WINDOWS _39L029YY01087745590
  67125.  COMMENT RESERVED            
  67126. VERSION =   3.00
  67127. reportlisteners.h>
  67128. foxpro_reporting.hF
  67129. reportlisteners_locs.hN
  67130. pr_htmllistener2
  67131. reportlisteners.h
  67132. Pixels
  67133. Class
  67134. custom
  67135. pr_htmllistener2
  67136. _memberdata XML Metadata for customizable properties
  67137. noutfile
  67138. npagewidth
  67139. npageheight
  67140. nscreendpi
  67141. ldebug
  67142. ctargetfilename
  67143. oactivelistener
  67144. ldefaultmode
  67145. nimgcounter
  67146. _ctempfolder
  67147. oimages
  67148. cexternalfilelocation
  67149. lcopyimagefilestoexternalfilelocation
  67150. quietmode Specifies whether the ReportListener may provide any user feedback or interface.
  67151. waitfornextreport
  67152. *outputfromdata 
  67153. *render Occurs when Report Engine is ready to provide output for each layout object in a band.
  67154. *beforereport Occurs just before Report Engine begins processing a report form.
  67155. *afterreport Occurs directly after Report Engine finishes processing a report form.
  67156. *getbandname 
  67157. *getfontstyle 
  67158. *rgbtohex 
  67159. *afterband Occurs directly after Report Engine finishes processing a report band.
  67160. *beforeband Occurs just before Report Engine begins processing a report band.
  67161. *getcontinuationtype 
  67162. *getpageimg 
  67163. *getpicturefromlistener 
  67164. *processimages 
  67165. *processtext 
  67166. *processlines 
  67167. *processshapes 
  67168. *getlinescnt 
  67169. *cropimage 
  67170. ^apagesimgs[1,0] 
  67171. Invalid parameter. Report listener not available
  67172. Error
  67173. The helper FRX table is not available. Output can't be created
  67174. Error
  67175. Datasessionv
  67176. <html><head><META http-equiv="Content-Type" content="text/html">
  67177. <title>
  67178. </title></head><body>
  67179. %  - 
  67180. 100%  - CCC
  67181. TOLISTENER
  67182. TCOUTPUTDBF
  67183. TNWIDTH
  67184. TNHEIGHT
  67185. OACTIVELISTENER    
  67186. CFRXALIAS    
  67187. QUIETMODE
  67188. LNSECS
  67189. DOFOXYTHERM    
  67190. _GOHELPER
  67191. _INITSTATUSTEXT
  67192. LNSELECT
  67193. LNORIGDATASESSION
  67194. LISTENERDATASESSION
  67195. LDEFAULTMODE
  67196. NPAGEHEIGHT
  67197. NSCREENDPI
  67198. NPAGEWIDTH
  67199. NOUTFILE
  67200. CTARGETFILENAME
  67201. CHTML
  67202. LNPGFROM
  67203. LNPGTO
  67204. _CLAUSENRANGEFROM
  67205. _CLAUSENRANGETO
  67206. RENDER
  67207. FRXRECNO
  67208. WIDTH
  67209. HEIGHT
  67210. CONTTYPE
  67211. UNCONTENTS    
  67212. LNPERCENT
  67213. LNLASTPERCENT
  67214. LNDELAY    
  67215. LNTOTRECS
  67216. LNREC
  67217. _SECONDSTEXT
  67218. _RUNSTATUSTEXT
  67219. AFTERREPORT4
  67220. <!-- nLeft:C
  67221. , nTop:
  67222. , nWidth:
  67223. , nHeight:
  67224. , ContinuationType:
  67225. , cContents:
  67226. NFRXRECNO
  67227. NLEFT
  67228. NWIDTH
  67229. NHEIGHT
  67230. NOBJECTCONTINUATIONTYPE
  67231. CCONTENTSTOBERENDERED
  67232. GDIPLUSIMAGE
  67233. LCDEBUGINFO
  67234. LCHTML
  67235. LDEBUG
  67236. GETCONTINUATIONTYPE
  67237. NOUTFILE
  67238. LNADJUST
  67239. NSCREENDPI
  67240. NPAGEHEIGHT
  67241. OACTIVELISTENER
  67242. COMMANDCLAUSES    
  67243. RANGEFROM
  67244. OBJTYPE
  67245. PROCESSLINES
  67246. PROCESSSHAPES
  67247. PROCESSTEXT
  67248. PROCESSIMAGES
  67249. </body></html>
  67250. NOUTFILE
  67251. LLSAVED
  67252. LCFILE
  67253. APAGESIMGS
  67254. OACTIVELISTENER)
  67255. FRX_OBJCOD_TITLE
  67256. FRX_OBJCOD_PAGEHEADER
  67257. FRX_OBJCOD_COLHEADER
  67258. FRX_OBJCOD_GROUPHEADER
  67259. FRX_OBJCOD_DETAIL
  67260. FRX_OBJCOD_GROUPFOOTER
  67261. FRX_OBJCOD_COLFOOTER
  67262. FRX_OBJCOD_PAGEFOOTER
  67263. FRX_OBJCOD_SUMMARY
  67264. FRX_OBJCOD_DETAILHEADER
  67265. FRX_OBJCOD_DETAILFOOTER
  67266. NBANDOBJCODE1
  67267. NFONTSTYLE
  67268. CSTYLE[
  67269. NGREEN
  67270. NBLUE
  67271. <!-- AfterBand:
  67272. pagefooter
  67273. NBANDOBJCODE    
  67274. NFRXRECNO
  67275. CBAND
  67276. FRXDATASESSION
  67277. GETBANDNAME
  67278. LDEBUG
  67279. NOUTFILE
  67280. CURRENTDATASESSION
  67281. <!-- BeforeBand:C
  67282. NBANDOBJCODE    
  67283. NFRXRECNO
  67284. FRXDATASESSION
  67285. LDEBUG
  67286. NOUTFILE
  67287. GETBANDNAME
  67288. CURRENTDATASESSION
  67289. LISTENER_CONTINUATION_NONE
  67290. LISTENER_CONTINUATION_START
  67291. LISTENER_CONTINUATION_MIDDLE
  67292. LISTENER_CONTINUATION_END
  67293. NOBJECTCONTINUATIONTYPE
  67294. REPORTLISTENER
  67295. TEMP5
  67296. LOLISTENER
  67297. OACTIVELISTENER
  67298. LNPAGE
  67299. COMMANDCLAUSES    
  67300. RANGEFROM
  67301. APAGESIMGS
  67302. LNDEVICETYPE
  67303. LCFILE
  67304. LNHANDLE
  67305. OUTPUTPAGE
  67306. TNWIDTH
  67307. TNHEIGHT
  67308. TCFILE
  67309. LCFILE
  67310. GETPAGEIMG
  67311. LNHOR
  67312. LNVERT    
  67313. LCNEWFILE    
  67314. CROPIMAGE
  67315. _IMAGES
  67316. _IMAGES
  67317. IMAGE
  67318. Image
  67319. <img src="
  67320. " width="
  67321. " height="
  67322. <span style="position:absolute;left:C
  67323. px;top:
  67324. clip: rect(0 
  67325. px 0);
  67326. </span>
  67327. IMAGE
  67328. Image
  67329. <img src="
  67330. " width="
  67331. " height="
  67332. <span style="position:absolute;left:C
  67333. px;top:
  67334. clip: rect(0 
  67335. px 0);
  67336. </span>
  67337. <img src="
  67338. " width="
  67339. " height="
  67340. <span style="position:absolute;left:C
  67341. px;top:
  67342. px;">
  67343. </span>
  67344. TNLEFT
  67345. TNTOP
  67346. TNWIDTH
  67347. TNHEIGHT
  67348. CCONTENTSTOBERENDERED
  67349. LCFILE
  67350. LCPATH
  67351. LCSHORTPATH
  67352. LCIMAGECOPY
  67353. LCPATHLOCATION
  67354. CTARGETFILENAME
  67355. CEXTERNALFILELOCATION
  67356. NIMGCOUNTER
  67357. GETPICTUREFROMLISTENER
  67358. PR_PATHFILEEXISTS
  67359. LCHTML    
  67360. LCIMGHTML
  67361. GENERAL
  67362. LNWIDTH
  67363. LNHEIGHT
  67364. LNPICTWIDTH
  67365. LNPICTHEIGHT
  67366. LOVFPIMG
  67367. PICTURE
  67368. WIDTH
  67369. HEIGHT
  67370. LNHORFACTOR
  67371. LNVERTFACTOR
  67372. LNRESIZEFACTOR
  67373. LNISOWIDTH
  67374. LNISOHEIGHTN
  67375. lcText = STRTRAN(lcOrigText, [&], [&]) 
  67376. lcText = STRTRAN(lcText, [<], [<])
  67377. lcText = STRTRAN(lcText, [>], [>])
  67378. text-align: left;
  67379. text-align: right;
  67380. text-align: center;
  67381. white-space:normal;
  67382. overflow:hidden ;
  67383. white-space:nowrap;
  67384. white-space:normal;
  67385. <span style="
  67386. position:absolute;left:
  67387. px;top:
  67388. width:
  67389. px;height:
  67390. background-color:
  67391. font-family:
  67392. font-size:
  67393. color:
  67394. </span>
  67395. TNLEFT
  67396. TNTOP
  67397. TNWIDTH
  67398. TNHEIGHT
  67399. CCONTENTSTOBERENDERED
  67400. LCHTML
  67401. LCTEXT
  67402. LCORIGTEXT
  67403. LCALIGN
  67404. OFFSET    
  67405. LCFILLHEX    
  67406. LCPRESPAN
  67407. LCPOSTSPAN    
  67408. LCFOREHEX    
  67409. LCPREFONT
  67410. LCPOSTFONT
  67411. FILLRED    
  67412. FILLGREEN
  67413. FILLBLUE
  67414. RGBTOHEX
  67415. PENRED
  67416. PENGREEN
  67417. PENBLUE
  67418. STRETCH
  67419. LCWWRAP
  67420. LNLINES
  67421. GETLINESCNT
  67422. FONTFACE
  67423. FONTSIZE    
  67424. FONTSTYLE
  67425. LCFONTSTYLE
  67426. LCPRESTYLE
  67427. LCPOSTSTYLE
  67428. GETFONTSTYLE(
  67429. <span style="position:absolute;left:C
  67430. px;top:
  67431. px;width:
  67432. height:
  67433. px;text-align: left;border:1px solid 
  67434. <font face="Arial" fontsize=10 color=#000000></font></span>
  67435. TNLEFT
  67436. TNTOP
  67437. TNWIDTH
  67438. TNHEIGHT
  67439. LCHTML
  67440. RGBTOHEX
  67441. PENRED
  67442. PENGREEN
  67443. PENBLUEZ
  67444. background-color:
  67445. border-left:C
  67446.  solid;
  67447. border-right:
  67448.  solid;
  67449. border-top:
  67450.  solid;
  67451. border-left:C
  67452.  solid;
  67453. border-right:
  67454.  solid;
  67455. border-left:C
  67456.  solid;
  67457. border-right:
  67458.  solid;
  67459. border-bottom:
  67460.  solid;
  67461. border:C
  67462.  solid;
  67463. <span style="position:absolute;left:C
  67464. px;top:
  67465. px;width:
  67466. height:
  67467. px;text-align: left;
  67468. </span>
  67469. TNLEFT
  67470. TNTOP
  67471. TNWIDTH
  67472. TNHEIGHT
  67473. TNOBJECTCONTINUATIONTYPE    
  67474. LCFILLHEX
  67475. FILLPAT
  67476. FILLRED    
  67477. FILLGREEN
  67478. FILLBLUE
  67479. RGBTOHEX
  67480. LCBORDERHEX
  67481. PENPAT
  67482. PENRED
  67483. PENGREEN
  67484. PENBLUE
  67485. PENSIZE
  67486. LCHTML3
  67487. GPRECTANGLE
  67488. \ffc\_Gdiplus.vcx
  67489. GPRectangle
  67490. _Gdiplus.vcx
  67491. GPFont
  67492. _Gdiplus.vcx
  67493. GPGRAPHICS
  67494. \ffc\_Gdiplus.vcx
  67495. GpGraphics
  67496. _Gdiplus.vcx
  67497. 333333
  67498. GPSIZE
  67499. \ffc\_Gdiplus.vcx
  67500. TCTEXT
  67501. TCFONTNAME
  67502. TNSIZE
  67503. TCSTYLE
  67504. TNLEFT
  67505. TNTOP
  67506. TNWIDTH
  67507. TNHEIGHT
  67508. LOFONT
  67509. LNCHARS
  67510. LNLINES
  67511. LNHEIGHT
  67512. LNWIDTH
  67513. LNFACTOR
  67514. LORECT
  67515. CREATE
  67516. LOGFX
  67517. CREATEFROMHWND
  67518. PAGEUNIT    
  67519. PAGESCALE
  67520. LOSIZE
  67521. MEASURESTRINGA    
  67522. GDIPRECTF
  67523. STRING
  67524. INTEGER
  67525. INTEGER
  67526. GPBITMAP
  67527. ffc\_gdiplus.vcx
  67528. GpBitmap
  67529. _GdiPlus.vcx
  67530. GdipCloneBitmapAreaI
  67531. GDIPLUS.DLLQ
  67532. pdfxGdipCloneBitmapAreaI
  67533. GPBITMAP
  67534. ffc\_gdiplus.vcx
  67535. GpBitmap
  67536. _GdiPlus.vcx
  67537. image/png
  67538. image/jpeg6
  67539. LCFILE
  67540. LNWIDTH
  67541. LNHEIGHT    
  67542. TCNEWFILE
  67543. _CTEMPFOLDER
  67544. LCEXT
  67545. LOBMP
  67546. CREATEFROMFILE
  67547. IMAGEHEIGHT
  67548. IMAGEWIDTH
  67549. LHBITMAP
  67550. LNSTATUS
  67551. GDIPCLONEBITMAPAREAI
  67552. GDIPLUS
  67553. PDFXGDIPCLONEBITMAPAREAI
  67554. PIXELFORMAT    
  67555. GETHANDLE    
  67556. LOCROPPED    
  67557. SETHANDLE
  67558. SETRESOLUTION
  67559. HORIZONTALRESOLUTION
  67560. VERTICALRESOLUTION    
  67561. LCENCODER
  67562. LCCROPPEDFILE
  67563. SAVETOFILE
  67564. OIMAGES
  67565. GetDeviceCaps
  67566. WIN32API
  67567. GetDC
  67568. WIN32API
  67569. Collection
  67570. GETDEVICECAPS
  67571. WIN32API
  67572. GETDC
  67573. LNSCREENDPI
  67574. NSCREENDPI
  67575. LDEBUG
  67576. _CTEMPFOLDER
  67577. OIMAGES
  67578. NOUTFILE
  67579. outputfromdata,
  67580. render    
  67581. afterreport
  67582. getbandname
  67583. getfontstyle
  67584. rgbtohex#
  67585. afterband
  67586. beforeband
  67587. getcontinuationtype
  67588. getpageimg
  67589. getpicturefromlistenerL
  67590. processimagess
  67591. processtext
  67592. processlines
  67593. processshapesG(
  67594. getlinescntj-
  67595. cropimage
  67596. Destroy
  67597. hMPROCEDURE outputfromdata
  67598. LPARAMETERS toListener, tcOutputDBF, tnWidth, tnHeight
  67599. IF VARTYPE(toListener) <> "O"
  67600.     MESSAGEBOX("Invalid parameter. Report listener not available", 16, "Error")
  67601.     RETURN
  67602. ENDIF 
  67603. This.oActiveListener = toListener
  67604. IF EMPTY(toListener.cFRXAlias)
  67605.     MESSAGEBOX("The helper FRX table is not available. Output can't be created", 16, "Error")
  67606.     RETURN
  67607. ENDIF 
  67608. * =DoFoxyTherm(90, "Texto label", "Titulo")
  67609. * =DoFoxyTherm(-1, "Teste2", "Titulo") && Continuo
  67610. * =DoFoxyTherm() && Desliga
  67611. IF NOT This.QuietMode 
  67612.     LOCAL lnSecs
  67613.     lnSecs = SECONDS()
  67614.     *!*    ._InitStatusText    = .GetLoc("INITSTATUS") + SPACE(1)
  67615.     *!*    ._RunStatusText     = .GetLoc("RUNSTATUS")  + SPACE(1)
  67616.     *!*    ._SecondsText       = .GetLoc("SECONDS")    + SPACE(1)
  67617.     =DoFoxyTherm(1, "0%", _goHelper._InitStatusText)
  67618. ENDIF 
  67619. LOCAL lnSelect, lnOrigDataSession
  67620. lnSelect          = SELECT()
  67621. lnOrigDataSession = SET("Datasession")
  67622. * Ensure we are at the correct DataSession
  67623. SET DATASESSION TO (toListener.ListenerDataSession)
  67624. * SET DATASESSION TO (toListener.CurrentDataSession)
  67625. SELECT (tcOutputDBF)
  67626. * Generate RTF using the stored information
  67627. This.lDefaultMode = .F.
  67628. * This.BeforeReport()
  67629. THIS.nPageHeight = CEILING(THIS.nScreenDPI * tnHeight / 960)
  67630. THIS.nPageWidth  = CEILING(THIS.nScreenDPI * tnWidth / 960)
  67631. THIS.nOutFile    = FCREATE(THIS.cTargetFileName) && .cOutFile)
  67632. LOCAL cHtml
  67633. cHtml = [<html><head><META http-equiv="Content-Type" content="text/html">] + ;
  67634.     [<title>] + This.cTargetFileName + [</title></head><body>]
  67635. FPUTS(THIS.nOutFile, cHtml)
  67636. LOCAL lnPgFrom, lnPgTo
  67637. lnPgFrom = _goHelper._ClausenRangeFrom && = loListener.COMMANDCLAUSES.RangeFrom
  67638. lnPgTo   = IIF(_goHelper._ClausenRangeTo = -1, 999999, _goHelper._ClausenRangeTo) && = loListener.COMMANDCLAUSES.RangeTo && -1 = All pages
  67639. * Initialize class
  67640. SELECT (tcOutputDBF)
  67641. IF This.QuietMode 
  67642.     SCAN
  67643.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  67644.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  67645.         ENDIF
  67646.     ENDSCAN
  67647. ELSE 
  67648.     LOCAL lnPercent, lnLastPercent, lnDelay, lnTotRecs, lnRec
  67649.     lnLastPercent = 0
  67650.     lnDelay       = 1
  67651.     lnTotRecs     = RECCOUNT()
  67652.     lnRec         = 0
  67653.     SCAN
  67654.         IF BETWEEN(Page, lnPgFrom, lnPgTo)
  67655.             lnRec = lnRec + 1
  67656.             lnPercent = CEILING(100*lnRec/lnTotRecs)
  67657.             IF (lnLastPercent > 0 AND ;
  67658.                     lnPercent - lnLastPercent < lnDelay  AND ;
  67659.                     lnPercent <> 100)
  67660.             ELSE 
  67661.                 =DoFoxyTherm(lnPercent, ;
  67662.                     ALLTRIM(TRANSFORM(lnPercent)) + "%  - " + TRANSFORM(FLOOR(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  67663.                     _goHelper._RunStatusText)
  67664.             ENDIF 
  67665.             This.Render(FRXRECNO, Left, Top, Width, Height, ContType, UNContents, 0)
  67666.         ENDIF
  67667.     ENDSCAN
  67668.     =DoFoxyTherm(100, ;
  67669.         "100%  - " + TRANSFORM(CEILING(SECONDS() - lnSecs)) + " " + _goHelper._SecondsText , ;
  67670.                 _goHelper._RunStatusText)
  67671. ENDIF 
  67672. * Finalize
  67673. This.AfterReport()
  67674. USE IN SELECT(tcOutputDBF)
  67675. * Restore DataSession, ALias
  67676. SET DATASESSION TO (lnOrigDataSession)
  67677. SELECT (lnSelect)
  67678. IF NOT This.QuietMode 
  67679.     =DoFoxyTherm()
  67680. ENDIF
  67681. RETURN
  67682. ENDPROC
  67683. PROCEDURE render
  67684. * 2011-07-14 CChalom:
  67685. * Introduced text alignment, Width and Height
  67686. * Adjusted positions
  67687. * Fixed transparent background texts
  67688. * Reduced FontSize in 2 points to make text fit in space
  67689. * Added lines
  67690. * Created separate methods to deal with different tasks
  67691. * Managing images and shapes
  67692. LPARAMETERS nFRXRecno, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage
  67693. This.nX0 = nLeft
  67694. This.nY0 = nTop
  67695. This.nW0 = nWidth
  67696. This.nH0 = nHeight
  67697. LOCAL lcDebugInfo, lcHTML
  67698. IF THIS.lDebug
  67699.     lcDebugInfo = [<!-- nLeft:] + TRANSFORM(nLeft) + [, nTop:] + TRANSFORM(nTop) + [, nWidth:] + ;
  67700.         TRANSFORM(nWidth) + [, nHeight:] + TRANSFORM(nHeight) + [, ContinuationType:] + ;
  67701.         THIS.GetContinuationType(nObjectContinuationType) + [, cContents:] + cContentsToBeRendered + [ -->]
  67702.     FPUTS(THIS.nOutFile, lcDebugInfo)
  67703. ENDIF
  67704. #Define OBJ_COMMENT                  0
  67705. #Define OBJ_LABEL                    5
  67706. #Define OBJ_LINE                     6
  67707. #Define OBJ_RECTANGLE                7
  67708. #Define OBJ_FIELD                    8
  67709. #Define OBJ_PICTURE                 17
  67710. #Define OBJ_VARIABLE                18
  67711. LOCAL lnAdjust
  67712. lnAdjust = 1.10
  67713. * dpi2pix
  67714. nLeft   = CEILING(CEILING(THIS.nScreenDPI * nLeft / 960) * lnAdjust)
  67715. nTop    = ROUND(THIS.nScreenDPI * nTop / 960, 0)
  67716. nWidth  = CEILING(CEILING(THIS.nScreenDPI * nWidth / 960) * lnAdjust)
  67717. nHeight = CEILING(THIS.nScreenDPI * nHeight / 960)
  67718. IF PAGE > 1
  67719.     nTop = THIS.nPageHeight * (PAGE - This.oActiveListener.CommandClauses.RangeFrom) + nTop && Original -1
  67720. ENDIF
  67721. DO CASE
  67722. CASE ObjType = OBJ_LINE
  67723.     lcHTML = This.ProcessLines(nLeft, nTop, nWidth, nHeight)
  67724. CASE ObjType = OBJ_RECTANGLE
  67725.     lcHTML = This.ProcessShapes(nLeft, nTop, nWidth, nHeight, nObjectContinuationType)
  67726.     *!* 2011-08-17 - Jacques Parent
  67727.     *!* Added nObjectContinuationType parameter
  67728. CASE INLIST(ObjType, OBJ_LABEL, OBJ_FIELD)
  67729.     lcHTML = This.ProcessText(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  67730. CASE ObjType = OBJ_PICTURE
  67731.     lcHTML = This.ProcessImages(nLeft, nTop, nWidth, nHeight, cContentsToBeRendered)
  67732. OTHERWISE
  67733.     RETURN
  67734. ENDCASE
  67735. IF VARTYPE(lcHTML) <> "C"
  67736.     RETURN 
  67737. ENDIF
  67738. IF NOT EMPTY(lcHTML)
  67739.     =FPUTS(THIS.nOutFile, lcHtml)
  67740. ENDIF
  67741. ENDPROC
  67742. PROCEDURE afterreport
  67743. *!*    * Determine the ".WaitForNextReport" status if using "lObjTypeMode"
  67744. *!*    IF This.lObjTypeMode
  67745. *!*        TRY 
  67746. *!*            This.WaitForNextReport = This.CommandClauses.NoPageEject
  67747. *!*        CATCH
  67748. *!*        ENDTRY 
  67749. *!*    ENDIF 
  67750. *!*    IF NOT This.WaitForNextReport 
  67751.     FPUTS(THIS.nOutFile, [</body></html>])
  67752.     LOCAL llSaved
  67753.     llSaved = FCLOSE(THIS.nOutFile)
  67754.     * Delete the pages image files
  67755.     LOCAL n, lcFile
  67756.     FOR m.n = 1 TO ALEN(This.aPagesImgs,1)
  67757.         lcFile = This.aPagesImgs(m.n)
  67758.         IF NOT EMPTY(lcFile)
  67759.             TRY 
  67760.                 DELETE FILE (lcFile)
  67761.             CATCH
  67762.             ENDTRY
  67763.         ENDIF
  67764.     ENDFOR
  67765.     This.oActiveListener = ""
  67766. *!*    ENDIF 
  67767. ENDPROC
  67768. PROCEDURE getbandname
  67769. LPARAMETERS nBandObjCode
  67770. DO CASE
  67771.     CASE nBandObjCode = FRX_OBJCOD_TITLE
  67772.         RETURN 'FRX_OBJCOD_TITLE'
  67773.     CASE nBandObjCode = FRX_OBJCOD_PAGEHEADER
  67774.         RETURN 'FRX_OBJCOD_PAGEHEADER'
  67775.     CASE nBandObjCode = FRX_OBJCOD_COLHEADER
  67776.         RETURN 'FRX_OBJCOD_COLHEADER'
  67777.     CASE nBandObjCode = FRX_OBJCOD_GROUPHEADER
  67778.         RETURN 'FRX_OBJCOD_GROUPHEADER'
  67779.     CASE nBandObjCode = FRX_OBJCOD_DETAIL
  67780.         RETURN 'FRX_OBJCOD_DETAIL'
  67781.     CASE nBandObjCode = FRX_OBJCOD_GROUPFOOTER
  67782.         RETURN 'FRX_OBJCOD_GROUPFOOTER'
  67783.     CASE nBandObjCode = FRX_OBJCOD_COLFOOTER
  67784.         RETURN 'FRX_OBJCOD_COLFOOTER'
  67785.     CASE nBandObjCode = FRX_OBJCOD_PAGEFOOTER
  67786.         RETURN 'FRX_OBJCOD_PAGEFOOTER'
  67787.     CASE nBandObjCode = FRX_OBJCOD_SUMMARY
  67788.         RETURN 'FRX_OBJCOD_SUMMARY'
  67789.     CASE nBandObjCode = FRX_OBJCOD_DETAILHEADER
  67790.         RETURN 'FRX_OBJCOD_DETAILHEADER'
  67791.     CASE nBandObjCode = FRX_OBJCOD_DETAILFOOTER
  67792.         RETURN 'FRX_OBJCOD_DETAILFOOTER'
  67793.     OTHERWISE
  67794.         RETURN ''
  67795. ENDCASE
  67796. ENDPROC
  67797. PROCEDURE getfontstyle
  67798. LPARAMETERS nFontStyle
  67799. LOCAL cStyle
  67800. cStyle = ''
  67801. * extended styles
  67802. IF nFontStyle = FRX_FONTSTYLE_UNDERLINED
  67803.     cStyle = 'U'
  67804.     nFontStyle = nFontStyle - FRX_FONTSTYLE_UNDERLINED
  67805. ENDIF
  67806. IF nFontStyle = FRX_FONTSTYLE_STRIKETHROUGH
  67807.     cStyle = cStyle + 'S'
  67808.     nFontStyle = nFontStyle - FRX_FONTSTYLE_STRIKETHROUGH
  67809. ENDIF
  67810. * standart styles
  67811. DO CASE
  67812.     CASE nFontStyle = FRX_FONTSTYLE_NORMAL
  67813.         cStyle = cStyle + 'N'
  67814.     CASE nFontStyle = FRX_FONTSTYLE_BOLD
  67815.         cStyle = cStyle + 'B'
  67816.     CASE nFontStyle = FRX_FONTSTYLE_ITALIC
  67817.         cStyle = cStyle + 'I'
  67818.     CASE nFontStyle = FRX_FONTSTYLE_BOLD + FRX_FONTSTYLE_ITALIC
  67819.         cStyle = cStyle + 'BI'
  67820. ENDCASE
  67821. RETURN cStyle
  67822. ENDPROC
  67823. PROCEDURE rgbtohex
  67824. LPARAMETERS nReg, nGreen, nBlue
  67825. RETURN [#] + RIGHT(TRANSFORM(MAX(nReg, 0), [@0]), 2) + ;
  67826.     RIGHT(TRANSFORM(MAX(nGreen, 0), [@0]), 2) + RIGHT(TRANSFORM(MAX(nBlue, 0), [@0]), 2)
  67827. ENDPROC
  67828. PROCEDURE afterband
  67829. LPARAMETERS nBandObjCode, nFRXRecno
  67830. LOCAL cBand
  67831. SET DATASESSION TO THIS.FRXDATASESSION
  67832. GO nFRXRecno IN frx
  67833. cBand = THIS.GetBandName(nBandObjCode)
  67834. IF THIS.lDebug
  67835.     FPUTS(THIS.nOutFile, '<!-- AfterBand:' + cBand + ' -->')
  67836. ENDIF
  67837. IF ATC('pagefooter', cBand) > 0
  67838. * fputs(This.nOutFile, '<hr color = black>')
  67839. ENDIF
  67840. SET DATASESSION TO THIS.CURRENTDATASESSION
  67841. ENDPROC
  67842. PROCEDURE beforeband
  67843. LPARAMETERS nBandObjCode, nFRXRecno
  67844. SET DATASESSION TO THIS.FRXDATASESSION
  67845. GO nFRXRecno IN frx
  67846. IF THIS.lDebug
  67847.     FPUTS(THIS.nOutFile, '<!-- BeforeBand:' + THIS.GetBandName(nBandObjCode) + ' -->')
  67848. ENDIF
  67849. SET DATASESSION TO THIS.CURRENTDATASESSION
  67850. ENDPROC
  67851. PROCEDURE getcontinuationtype
  67852. LPARAMETERS nObjectContinuationType
  67853. DO CASE
  67854.     CASE nObjectContinuationType = LISTENER_CONTINUATION_NONE
  67855.         RETURN 'LISTENER_CONTINUATION_NONE'
  67856.     CASE nObjectContinuationType = LISTENER_CONTINUATION_START
  67857.         RETURN 'LISTENER_CONTINUATION_START'
  67858.     CASE nObjectContinuationType = LISTENER_CONTINUATION_MIDDLE
  67859.         RETURN 'LISTENER_CONTINUATION_MIDDLE'
  67860.     CASE nObjectContinuationType = LISTENER_CONTINUATION_END
  67861.         RETURN 'LISTENER_CONTINUATION_END'
  67862.     OTHERWISE
  67863.         RETURN ''
  67864. ENDCASE
  67865. ENDPROC
  67866. PROCEDURE getpageimg
  67867. #DEFINE OutputJPEG     102
  67868. #DEFINE OutputPNG     104
  67869. LOCAL loListener as ReportListener 
  67870. * loListener = IIF(VARTYPE(This.oActiveListener)="O", This.oActiveListener, This)
  67871. loListener = This.oActiveListener
  67872. LOCAL lnPage
  67873. lnPage = PAGE - loListener.CommandClauses.RangeFrom + 1
  67874. DIMENSION This.aPagesImgs(lnPage)
  67875. IF EMPTY(This.aPagesImgs(lnPage))
  67876.     LOCAL lnDeviceType, lcFile, lnDeviceType, lnHandle
  67877.     lnDeviceType = OutputJpeg  && OutputPNG
  67878.     lcFile = ADDBS(GETENV("TEMP")) + SYS(2015) + ".JPG" && ".PNG"
  67879.     loListener.OutputPage(lnPage, lcFile, lnDeviceType)
  67880.     This.aPagesImgs(lnPage) = lcFile
  67881. ENDIF 
  67882. RETURN This.aPagesImgs(lnPage)
  67883. ENDPROC
  67884. PROCEDURE getpicturefromlistener
  67885. * 2011/02/25 CChalom
  67886. * When we can't access the image from the EXE or from a General field, we still can get 
  67887. * an image of the object, and draw it to the PDF document
  67888. LPARAMETERS tnX, tnY, tnWidth, tnHeight, tcFile
  67889. LOCAL lcFile
  67890. lcFile = This.GetPageImg()
  67891. IF EMPTY(lcFile)
  67892.     RETURN .F. && Could not load image
  67893. ENDIF 
  67894. * Horizontal and Vertical factors to divide to convert to the correct coordinate 
  67895. LOCAL lnHor, lnVert
  67896. lnHor  = 9.972
  67897. lnVert = 9.996
  67898. lcNewFile = This.CropImage(lcFile, tnX / lnHor, tnY / lnVert, tnWidth / lnHor, tnHeight / lnVert, tcFile)
  67899. RETURN lcNewFile
  67900. ENDPROC
  67901. PROCEDURE processimages
  67902. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  67903. * TODO:
  67904. * Manage new possibilities for storing images, using the new properties:
  67905. * cExternalFileLocation = ".\images"  
  67906. * lCopyImageFilesToExternalFileLocation = .T.
  67907. * Create Images directory
  67908. LOCAL lcFile, lcPath, lcShortPath, lcImageCopy, lcPathLocation
  67909. lcFile = This.cTargetFileName
  67910. IF EMPTY(This.cExternalFileLocation)
  67911.     lcPathLocation = JUSTSTEM(lcFile) + "_IMAGES"
  67912. ELSE 
  67913.     lcPathLocation = This.cExternalFileLocation
  67914. ENDIF
  67915. lcPath = ADDBS(JUSTPATH(lcFile)) + lcPathLocation
  67916. lcShortPath = lcPathLocation + "\" + JUSTFNAME(cContentsToBeRendered)
  67917. IF NOT DIRECTORY(lcPath)
  67918.     MKDIR (lcPath)
  67919. ENDIF
  67920. DO CASE
  67921. CASE EMPTY(cContentsToBeRendered)  && General field
  67922.     This.nImgCounter = This.nImgCounter + 1
  67923.     lcImageCopy = ADDBS(lcPath) + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  67924.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  67925.     lcShortPath = JUSTSTEM(lcFile) + "_IMAGES" + "\" + "_" + TRANSFORM(This.nImgCounter) + ".jpg"
  67926. CASE NOT EMPTY(SYS(2000, cContentsToBeRendered))  && File is accessible in the disk
  67927.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  67928.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  67929. *    IF NOT FILE(lcImageCopy)
  67930.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  67931.     ENDIF
  67932. CASE EMPTY(SYS(2000, cContentsToBeRendered))  && Image embedded in EXE
  67933.     lcImageCopy = ADDBS(lcPath) + JUSTFNAME(cContentsToBeRendered)
  67934.     This.GetPictureFromListener(This.nX0, This.nY0, This.nW0, This.nH0, lcImageCopy)
  67935.     IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  67936. *    IF NOT FILE(lcImageCopy)
  67937.         COPY FILE (cContentsToBeRendered) TO (lcImageCopy)
  67938.     ENDIF
  67939. OTHERWISE
  67940.     RETURN ""
  67941. ENDCASE
  67942. * If we could not generate the image copy, leave
  67943. IF PR_PathFileExists(lcImageCopy + CHR(0)) = 0 && PR_PathFileExists function in FoxyPreviewer.app
  67944.     RETURN ""
  67945. ENDIF    
  67946. LOCAL lcHTML, lcImgHTML
  67947. DO CASE
  67948. CASE General = 0        && Clip
  67949.     * Get the picture size
  67950.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  67951.     LOCAL loVFPImg as Image
  67952.     loVFPImg = CREATEOBJECT("Image")
  67953.     loVFPImg.Picture = lcImageCopy
  67954.     lnWidth = loVFPImg.Width
  67955.     lnHeight = loVFPImg.Height
  67956.     loVFPImg = NULL
  67957.     CLEAR RESOURCES (lcImageCopy)
  67958.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnWidth) + [" height="] + TRANSFORM(lnHeight) +  [">]
  67959.     lcHTML = ;
  67960.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  67961.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  67962.         [">] + ;
  67963.         lcImgHTML + ;
  67964.         [</span>]
  67965. *!*    img {    position: absolute;    
  67966. *!*    clip: rect(0 100px 200px 0);    
  67967. *!*    /* clip: shape(top right bottom left); NB 'rect' is the only available option */}
  67968. * <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>
  67969. CASE General = 1    && Isometric
  67970.     * Calculating the image size for isometric images
  67971.     * Get the picture size
  67972.     LOCAL lnWidth, lnHeight, lnPictWidth, lnPictHeight, lcHTML
  67973.     LOCAL loVFPImg as Image
  67974.     loVFPImg = CREATEOBJECT("Image")
  67975.     loVFPImg.Picture = lcImageCopy
  67976.     lnPictWidth  = loVFPImg.Width
  67977.     lnPictHeight = loVFPImg.Height
  67978.     loVFPImg     = NULL
  67979.     CLEAR RESOURCES (lcImageCopy)
  67980.     * Isometric Adjustment
  67981.     LOCAL lnHorFactor, lnVertFactor, lnResizeFactor, lnIsoWidth, lnIsoHeight
  67982.     m.lnHorFactor    = m.tnWidth  / m.lnPictWidth
  67983.     m.lnVertFactor   = m.tnHeight / m.lnPictHeight
  67984.     m.lnResizeFactor = MIN(m.lnHorFactor, m.lnVertFactor)
  67985.     m.lnIsoWidth     = m.lnPictWidth * m.lnResizeFactor
  67986.     m.lnIsoHeight = m.lnPictHeight * m.lnResizeFactor
  67987.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(lnIsoWidth) + [" height="] + TRANSFORM(lnIsoHeight) +  [">]
  67988.     lcHTML = ;
  67989.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  67990.         [clip: rect(0 ] + TRANSFORM(tnWidth) + [px ] + TRANSFORM(tnHeight) + [px 0);] + ;
  67991.         [">] + ;
  67992.         lcImgHTML + ;
  67993.         [</span>]
  67994. OTHERWISE 
  67995. *!*    CASE .General = 2    && Stretch
  67996.     lcImgHTML = [<img src="] + lcShortPath + [" width="] + TRANSFORM(tnWidth) + [" height="] + TRANSFORM(tnHeight) +  [">]
  67997.     lcHTML = ;
  67998.         [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;">] + ;
  67999.         lcImgHTML + ;
  68000.         [</span>]
  68001. ENDCASE 
  68002. RETURN lcHTML
  68003. ENDPROC
  68004. PROCEDURE processtext
  68005. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, cContentsToBeRendered
  68006. LOCAL lcHTML, lcText, lcOrigText
  68007. lcOrigText = ALLTRIM(STRCONV(cContentsToBeRendered, 6)) && STRCONV_UNICODE_UTF8) for Russian
  68008. IF EMPTY(lcOrigText)
  68009.     RETURN ""
  68010. ENDIF 
  68011. * Html special chars
  68012. lcText = STRTRAN(lcOrigText, [&], [&]) && first!
  68013. *lcText = STRTRAN(lcText, [ ], [ ])
  68014. lcText = STRTRAN(lcText, [<], [<])
  68015. lcText = STRTRAN(lcText, [>], [>])
  68016. * Alignment settings
  68017. *     Offset = 0 && Left Aligned
  68018. *     Offset = 1 && Right Aligned
  68019. *     Offset = 2 && Center Aligned
  68020. LOCAL lcAlign
  68021. DO CASE
  68022. CASE Offset = 0
  68023.     lcAlign = "text-align: left;"
  68024. CASE Offset = 1
  68025.     lcAlign = "text-align: right;"
  68026. CASE Offset = 2
  68027.     lcAlign = "text-align: center;"
  68028. OTHERWISE
  68029.     lcAlign = ""
  68030. ENDCASE
  68031. * css style for span to output
  68032. LOCAL lcFillHex, lcPreSpan, lcPostSpan, lcForeHex, lcPreFont, lcForeHex, lcPostFont 
  68033. * Mode: 0 = Opaque background; 1 = Transparent
  68034. DO CASE
  68035. *CASE (fillred = 255 AND fillgreen = 255 AND fillblue = 255) OR Mode = 1 && Transparent
  68036. *    lcFillHex = "" && white
  68037. CASE Mode = 1 && Transparent
  68038.     lcFillHex = "" && white
  68039. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  68040.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  68041. *    lcFillHex = "" && white
  68042. OTHERWISE
  68043.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  68044. ENDCASE
  68045. IF PenRed = -1
  68046.     lcForeHex = THIS.RgbToHex(0, 0, 0)
  68047. ELSE 
  68048.     lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  68049. ENDIF
  68050. IF Stretch
  68051.     lcWWrap = [white-space:normal;]
  68052. ELSE 
  68053.     * Get the quantity of lines needed
  68054.     LOCAL lnLines
  68055.     lnLines = 0
  68056.     lnLines = This.GetLinesCnt(lcOrigText, FontFace, FontSize, FontStyle, tnLeft, tnTop, tnWidth, tnHeight)
  68057.     IF lnLines <= 1
  68058.         lcWWrap = [overflow:hidden ;] + [white-space:nowrap;]
  68059.     ELSE 
  68060.         lcWWrap = [white-space:normal;]
  68061.     ENDIF 
  68062. ENDIF 
  68063. lcPreSpan = [<span style="] + ;
  68064.             [position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;] + ;
  68065.             [width:] + TRANSFORM(tnWidth) + [px;height:] + TRANSFORM(tnHeight) + [px;] + lcAlign + ;
  68066.             IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;]) + ;
  68067.             [font-family:] + ALLTRIM(FontFace) + [;] + [font-size:] + TRANSFORM(FONTSIZE+2) + [px;] + ;
  68068.             [color:] +  + lcForeHex + ";" + ;
  68069.             lcWWrap + ;
  68070.             [">]
  68071. lcPostSpan = [</span>]
  68072. *    [word-wrap:break-word;] + ;
  68073. *    [overflow:hidden ;] + ;
  68074. *    [white-space:normal;] + ;
  68075. *    [overflow: visible;] + ;
  68076. * Font attrib
  68077. lcForeHex = THIS.RgbToHex(penred, pengreen, penblue)
  68078. *lcPreFont = [<font face="] + ALLTRIM(FontFace) + [" fontsize=] + TRANSFORM(FONTSIZE-2) + [ color=] + lcForeHex + [>]
  68079. *lcPostFont = [</font>]
  68080. lcPreFont = ""
  68081. lcPostFont = ""
  68082. * Set Html font style
  68083. LOCAL lcFontStyle, lcPreStyle, lcPostStyle
  68084. lcFontStyle = THIS.GetFontStyle(FontStyle)
  68085. STORE '' TO lcPreStyle, lcPostStyle
  68086. IF AT('B', lcFontStyle) > 0
  68087.     lcPreStyle = [<b>]
  68088.     lcPostStyle = [</b>]
  68089. ENDIF
  68090. IF AT('I', lcFontStyle) > 0
  68091.     lcPreStyle = lcPreStyle + [<i>]
  68092.     lcPostStyle = [</i>] + lcPostStyle
  68093. ENDIF
  68094. IF AT('U', lcFontStyle) > 0
  68095.     lcPreStyle = lcPreStyle + [<u>]
  68096.     lcPostStyle = [</u>] + lcPostStyle
  68097. ENDIF
  68098. IF AT('S', lcFontStyle) > 0
  68099.     lcPreStyle = lcPreStyle + [<s>]
  68100.     lcPostStyle = [</s>] + lcPostStyle
  68101. ENDIF
  68102. * write to file
  68103. lcHtml = lcPreSpan + lcPreFont + lcPreStyle + lcText + lcPostStyle + lcPostFont + lcPostSpan
  68104. RETURN lcHTML
  68105. ENDPROC
  68106. PROCEDURE processlines
  68107. LPARAMETERS tnLeft, tnTop, tnWIdth, tnHeight
  68108. LOCAL lcHTML
  68109. *!*    lcHTML = ;
  68110. *!*        [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  68111. *!*        [height:1px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  68112. *!*        [<font face="Arial" fontsize=10 color=#000000></font></span>]
  68113. lcHTML = ;
  68114.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  68115.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;border:1px solid ] + THIS.RgbToHex(MAX(penred,0), MAX(pengreen,0), MAX(penblue,0)) + [;">] + ;
  68116.     [<font face="Arial" fontsize=10 color=#000000></font></span>]
  68117. RETURN lcHTML
  68118. ENDPROC
  68119. PROCEDURE processshapes
  68120. LPARAMETERS tnLeft, tnTop, tnWidth, tnHeight, tnObjectContinuationType
  68121. *!* 2011-08-17 - Jacques Parent
  68122. *!* Added tnObjectContinuationType parameter
  68123. * Process Background information
  68124. LOCAL lcFillHex
  68125. * Mode    : 0 = Opaque background; 1 = Transparent
  68126. * FillPat : 0 = Transparent; others fill patterns (opaque)
  68127. DO CASE
  68128. CASE ((Mode = 1) OR (FillPat = 0)) AND (FillRed = -1) && Transparent
  68129.     lcFillHex = "" && white
  68130. CASE fillred = -1   AND fillgreen = -1  AND fillblue = -1
  68131.     * lcFillHex = "" && White
  68132.     lcFillHex = THIS.RgbToHex(255,255,255) && White
  68133. OTHERWISE
  68134.     lcFillHex = THIS.RgbToHex(fillred, fillgreen, fillblue)
  68135. ENDCASE
  68136. lcFillHex = IIF(EMPTY(lcFillHex), "", [background-color:] + lcFillHex + [;])
  68137. * Process Border color
  68138. LOCAL lcBorderHex
  68139. lcBorderHex = ""
  68140. * PenPat: 0 = Transparent (no border)
  68141. DO CASE
  68142. CASE PenPat = 0 && Transparent
  68143. CASE PenRed = -1
  68144.     lcBorderHex = THIS.RgbToHex(0,0,0) && Black
  68145. OTHERWISE
  68146.     lcBorderHex = THIS.RgbToHex(PenRed, PenGreen, PenBlue)
  68147. ENDCASE
  68148. IF NOT EMPTY(lcBorderHex)
  68149.     *!* --------------------------------------------------------------------------------------------------------
  68150.     *!* --------------------------------------------------------------------------------------------------------
  68151.     *!* --------------------------------------------------------------------------------------------------------
  68152.     *!* 2011-08-17 - Jacques Parent
  68153.     *!* In case tnObjectContinuationType is <> 0, we must deactivate some borders...
  68154.     DO CASE
  68155.         CASE tnObjectContinuationType == 1    && Top of box only
  68156.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  68157.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  68158.                           [border-top:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  68159.         CASE tnObjectContinuationType == 2    && Middle of box only
  68160.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  68161.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  68162.         CASE tnObjectContinuationType == 3    && Bottom of box only
  68163.             lcBorderHex = [border-left:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  68164.                           [border-right:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;] +;
  68165.                           [border-bottom:] + TRANSFORM(PenSize) + [px ] + lcBorderHex + [ solid;]
  68166.         OTHERWISE    && Complete box
  68167.             lcBorderHex = [border:] + TRANSFORM(PenSize) + [px ] + ;
  68168.                 lcBorderHex + [ solid;]
  68169.             * border:1px solid 
  68170.     ENDCASE
  68171.     *!* --------------------------------------------------------------------------------------------------------
  68172.     *!* --------------------------------------------------------------------------------------------------------
  68173.     *!* --------------------------------------------------------------------------------------------------------
  68174. ENDIF 
  68175. LOCAL lcHTML
  68176. lcHTML = ;
  68177.     [<span style="position:absolute;left:] + TRANSFORM(tnLeft) + [px;top:] + TRANSFORM(tnTop) + [px;width:] + TRANSFORM(tnWidth) + [px;] + ;
  68178.     [height:] + TRANSFORM(tnHeight) + [px;text-align: left;] + ;
  68179.     lcBorderHex + ;
  68180.     lcFillHex + [">] + [ ] + ;
  68181.     [</span>]
  68182. RETURN lcHTML
  68183. ENDPROC
  68184. PROCEDURE getlinescnt
  68185. LPARAMETERS tcText, tcFontName, tnSize, tcStyle, tnLeft, tnTop, tnWidth, tnHeight
  68186. LOCAL loFont, lnChars, lnLines, lnHeight, lnWidth, lnFactor
  68187. LOCAL loRect as GpRectangle OF HOME() + "\ffc\_Gdiplus.vcx"
  68188. loRect = NEWOBJECT("GPRectangle", "_Gdiplus.vcx", "", 0, 0, tnWidth, tnHeight)
  68189. * Create a font object using the text object's settings.
  68190. loFont = NEWOBJECT("GPFont", "_Gdiplus.vcx")
  68191. loFont.Create(tcFontName, tnSize, tcStyle, 3)
  68192. LOCAL loGfx as GpGraphics OF HOME() + "\ffc\_Gdiplus.vcx"
  68193. loGfx  = NEWOBJECT("GpGraphics", "_Gdiplus.vcx")
  68194. lnFactor = 1 && 10
  68195. loGfx.CreateFromHWND(_Screen.HWnd)
  68196. loGfx.PageUnit  = 1
  68197. loGfx.PageScale = 0.3
  68198. loRect.w = tnWidth  / lnFactor
  68199. loRect.h = tnHeight / lnFactor
  68200. LOCAL loSize as GpSize OF HOME() + "\ffc\_Gdiplus.vcx"
  68201. loSize = loGfx.MeasureStringA(tcText, loFont, loRect.GdipRectF, .F., @lnChars, @lnLines)
  68202. lnWidth  = loSize.w
  68203. lnHeight = loSize.h
  68204. RETURN lnLines
  68205. * loGfx.SetHandle(0)
  68206. *RETURN (lnHeight / 960) * 72 * lnFactor
  68207. ENDPROC
  68208. PROCEDURE cropimage
  68209. Lparameters lcFile As String, tnX, tnY, lnWidth As Integer, lnHeight As Integer, tcNewFile
  68210. IF EMPTY(tcNewFile)
  68211.     tcNewFile = FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  68212. ENDIF
  68213. Local loBmp As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  68214. loBmp = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  68215. loBmp.CreateFromFile(lcFile)
  68216. lnHeight = MIN(lnHeight, loBmp.ImageHeight)
  68217. lnWidth  = MIN(lnWidth , loBmp.ImageWidth)
  68218. LOCAL lhBitmap, lnStatus
  68219. lhBitmap = 0
  68220. * Function used in the CropImage method
  68221. DECLARE Long GdipCloneBitmapAreaI IN GDIPLUS.DLL AS pdfxGdipCloneBitmapAreaI Long x, Long y, Long nWidth, Long Height, Long PixelFormat, Long srcBitmap, Long @dstBitmap
  68222. lnStatus = pdfxGdipCloneBitmapAreaI(tnX, tnY, lnWidth, lnHeight, loBmp.PixelFormat, loBmp.GetHandle(), @lhBitmap)
  68223. IF (lnStatus <> 0) OR (lhBitmap = 0)
  68224.     loBmp = NULL
  68225.     * lnHandle = 0
  68226.     RETURN ""
  68227. ENDIF 
  68228. LOCAL loCropped As gpBitmap OF HOME() + "ffc\_gdiplus.vcx"
  68229. loCropped = NEWOBJECT("GpBitmap", "_GdiPlus.vcx")
  68230. loCropped.SetHandle(lhBitmap, .T.)  && Owns handle, please destroy the Bmp object when releasing
  68231. loCropped.SetResolution(loBmp.HorizontalResolution, loBmp.VerticalResolution)
  68232. LOCAL lcEXT, lcEncoder
  68233. lcEXT = UPPER(JUSTEXT(lcFile))
  68234. lcEncoder = IIF(lcEXT = "PNG", "image/png", "image/jpeg")
  68235. LOCAL lcCroppedFile
  68236. lcCroppedFile = tcNewFile && FORCEEXT(This._cTempFolder + Sys(2015), lcEXT)
  68237. loCropped.SaveToFile(lcCroppedFile, lcEncoder)
  68238. loCropped = NULL
  68239. loBMP     = NULL
  68240. This.oImages.Add(lcCroppedFile)
  68241. RETURN lcCroppedFile
  68242. ENDPROC
  68243. PROCEDURE Init
  68244. * Author: aMaximum
  68245. * Class adapted from the class posted at www.foxclub.ru
  68246. * Original info:
  68247. **************************************************
  68248. *-- Class: html_listener (c:\projects\vfp9_preview\html_listener.vcx)
  68249. *-- ParentClass: reportlistener
  68250. *-- BaseClass: reportlistener
  68251. *-- Time Stamp: 06/18/04 03:09:01 PM
  68252. * http://forum.foxclub.ru/read.php?29,144472
  68253. * 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
  68254. * http://forum.foxclub.ru/read.php?29,144639,144728
  68255. * 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
  68256. * The report emerged, but the problem with the encoding of Russian letters. What is the trick?  
  68257. * Change in the method of render on strconv 
  68258. * cText = strconv (cContentsToBeRendered, 6)
  68259. *   Or changing 
  68260. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;">] + ; 
  68261. *   to 
  68262. * cHtml = [<html><head><META http-equiv="Content-Type" content="text/html;charset=utf-8">] + ;
  68263. * and then there is a UNICODE conversion to UTF-8
  68264. #define LOGPIXELSX 88
  68265. DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER HDC, INTEGER ITEM
  68266. DECLARE INTEGER GetDC IN WIN32API INTEGER HWND
  68267. LOCAL HDC, lnScreenDPI
  68268. HDC = GetDC(0)
  68269. lnScreenDPI = GetDeviceCaps( m.HDC, LOGPIXELSX )
  68270. THIS.nScreenDPI = lnScreenDPI
  68271. THIS.lDebug = .F. && VERSION(2) = 2
  68272. This._cTempFolder = ADDBS(SYS(2023)) && ADDBS(GETENV("TEMP"))
  68273. This.oImages = CREATEOBJECT("Collection")
  68274. ENDPROC
  68275. PROCEDURE Destroy
  68276. FCLOSE(This.nOutFile)
  68277. ENDPROC
  68278. _memberdata = 
  68279.     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>
  68280. noutfile = -1
  68281. npagewidth = 0
  68282. npageheight = 0
  68283. nscreendpi = 0
  68284. ldebug = .F.
  68285. ctargetfilename = 
  68286. oactivelistener = .NULL.
  68287. ldefaultmode = .F.
  68288. nimgcounter = 0
  68289. nx0 = 0
  68290. ny0 = 0
  68291. nw0 = 0
  68292. nh0 = 0
  68293. _ctempfolder = .F.
  68294. oimages = 
  68295. cexternalfilelocation = 
  68296. lcopyimagefilestoexternalfilelocation = .T.
  68297. quietmode = .F.
  68298. waitfornextreport = .F.
  68299. Name = "pr_htmllistener2"
  68300. custom    
  68301. Nve?A
  68302. Spreadsheet file
  68303. FilterName
  68304. MS Excel 97
  68305. TCSOURCE
  68306. TCDESTINATION
  68307. OOOOPENURL
  68308. OOOCONVERTTOURL
  68309. AONEARG
  68310. CFILE
  68311. OOOMAKEPROPERTYVALUE
  68312. STORETOURL
  68313. CLOSE
  68314. Hiddena
  68315. _blank
  68316. ANOARGS
  68317. OOOMAKEPROPERTYVALUE
  68318. ODESKTOP
  68319. OOOGETDESKTOP
  68320. LOADCOMPONENTFROMURL
  68321. com.sun.star.beans.PropertyValue
  68322. nHandleb
  68323. nStateb
  68324. CNAME
  68325. UVALUE
  68326. NHANDLE
  68327. NSTATE
  68328. OPROPERTYVALUE
  68329. OOOCREATESTRUCT
  68330. VALUE
  68331. HANDLE
  68332. STATE'
  68333. ERROR
  68334. = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
  68335. ON ERROR &cOldErrHandler
  68336. CTYPENAME
  68337. OSERVICEMANAGER
  68338. OOOGETSERVICEMANAGER
  68339. OSTRUCT
  68340. COLDERRHANDLER
  68341. BRIDGE_GETSTRUCT
  68342. __OOORELEASECACHEDVARS{
  68343. goOOoDesktopb
  68344. com.sun.star.frame.Desktop
  68345. GOOOODESKTOP 
  68346. OOOSERVICEMANAGER_CREATEINSTANCEs
  68347. goOOoServiceManagerb
  68348. com.sun.star.ServiceManager
  68349. GOOOOSERVICEMANAGER'
  68350. ERROR
  68351. = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
  68352. ON ERROR &cOldErrHandler
  68353. CSERVICENAME
  68354. OSERVICEMANAGER
  68355. OOOGETSERVICEMANAGER    
  68356. OINSTANCE
  68357. COLDERRHANDLER
  68358. CREATEINSTANCE
  68359. __OOORELEASECACHEDVARS
  68360. PNERROR
  68361. PCERRMESSAGE
  68362. PNLINENO
  68363. PCPROGRAMFILESYS16    
  68364. PCPROGRAM
  68365. PCERRORPARAMSYS2018
  68366. GOOOOSERVICEMANAGER
  68367. GOOOODESKTOP
  68368. GOOOOCOREREFLECTIONv
  68369. file://
  68370. CFILENAME
  68371. OOoOpenURL
  68372. OOoMakePropertyValue
  68373. OOoCreateStruct
  68374. OOoGetDesktop
  68375. OOoGetServiceManagerK
  68376. OOoServiceManager_CreateInstance
  68377. DoNothing__ErrorHandlerz
  68378. __OOoReleaseCachedVars
  68379. OOoConvertToURL?    
  68380. FOXYPREVIEWER - Report preview and exporting utility 
  68381. http://foxypreviewer.codeplex.com
  68382. --------------------------------------------------------------------
  68383. Created by Cesar Ch
  68384.     vfpimaging@hotmail.com
  68385.     http://weblogs.foxite.com/vfpimaging
  68386. Main Features:
  68387. - Preview miniature of pages
  68388. - Export to image files (Bmp, Png, Tiff, Emf, Jpeg or Gif)
  68389. - Export to HTML, PDF, RTF OR XLS
  68390. - Send reports to email
  68391. - Search texts in reports
  68392. - Specify the quantity of pages to be printed
  68393. - Change the printer and settings on the fly
  68394. - Translate all dialogs, captions and tooltips to other languages than English 
  68395. Full online documentation:
  68396. http://foxypreviewer.codeplex.com/documentation
  68397. Get the latest release:
  68398. http://foxypreviewer.codeplex.com/releases
  68399. This utility uses some terrific tools created by other Foxers, that were provided as free and open source. 
  68400. These tools have received several tweaks and fixes in order to work in "FoxyPreviewer" and to support its features.
  68401. 1 - PDFListener (for the PDF output)
  68402.     by Luis Navas
  68403.     PDFx Update Support for some SP2 Features
  68404.     http://weblogs.foxite.com/luisnavas/archive/2008/10/06/7025.aspx
  68405. 2 - RTFListener (for the RTF output)
  68406.     by Vladimir Zhuravlev
  68407.     http://www.foxite.com/downloads/default.aspx?id=166
  68408. 3 - Proof Miniatures sheet
  68409.     by Colin Nicholls
  68410.         published in the article:
  68411.     Exploring and Extending Report Previewing in VFP9
  68412.     http://spacefold.com/colin/archive/articles/reportpreview/rp_extend.html
  68413. 4 - Accessing the Printer settings window
  68414.     by Barbara Peisch posted in Foxite forum
  68415.     * http://www.foxite.com/archives/0000158197.htm
  68416. 5 - ExcelListener (for the XLS output)
  68417.     by Alejandro Sosa
  68418.     http://www.portalfox.com/index.php?name=News&file=article&sid=2322&mode=nested&order=0&thold=0
  68419.     http://www.universalthread.com/Report.aspx?Session=34485849353954544C2B4D3D204A377A5466623943753451502B72453358567A7544745843317A333869724B65
  68420. 6 - HTMLListener in the simplified mode, with help of Max Arlikh
  68421. 7 - Text search engine by Doug Hennig, based in his article: "Listening to a Report"
  68422. 8 - CDO2000 class to send emails and several printer procedures by Sergey Berezniker
  68423. 9 - The HARU PDF Library - used in the PDFListener by Luis Navas
  68424. * << Haru Free PDF Library 2.0.8 >>
  68425. * URL http://libharu.sourceforge.net/
  68426. * Copyright (c) 1999-2006 Takeshi Kanno
  68427. * Permission to use, copy, modify, distribute and sell this software
  68428. * and its documentation for any purpose is hereby granted without fee,
  68429. * provided that the above copyright notice appear in all copies and
  68430. * that both that copyright notice and this permission notice appear
  68431. * in supporting documentation.
  68432. * It is provided "as is" without express or implied warranty.BM6
  68433. zzzzzzzzzzzzzzz
  68434. OBJTYPE
  68435. OBJCODE
  68436. OBJNAME
  68437. OBJVALUE
  68438. OBJINFO
  68439. _NullFlags
  68440.                                                            
  68441. Title                                                      
  68442.                                                            
  68443. PH                                                         
  68444.                                                            
  68445. CH                                                         
  68446.                                                            
  68447. GH                                                         
  68448.                                                            
  68449. D                                                          
  68450.                                                            
  68451. GF                                                         
  68452.                                                            
  68453. CF                                                         
  68454.                                                            
  68455. PF                                                         
  68456.                                                            
  68457. Summary                                                    
  68458.                                                            
  68459. DH                                                         
  68460.                                                            
  68461. DF                                                         
  68462.                                                            
  68463. VFP-Report                                                 
  68464.                                                            
  68465. T                                                          
  68466.                                                            
  68467. E                                                          
  68468.                                                            
  68469. P                                                          
  68470.                                                            
  68471. S                                                          
  68472.                                                            
  68473. L                                                          
  68474.                                                            
  68475. V                                                          
  68476.                                                            
  68477. FontRes                                                    
  68478.                                                            
  68479. DataEnv                                                    
  68480.                                                            
  68481. DE-Cursor                                                      
  68482.                                                            
  68483. DE-Relation                                                
  68484.                                                            
  68485. Group                                                      
  68486.                                                            
  68487. Reports                                                    
  68488.                                                            
  68489. Data                                                       
  68490.                                                            
  68491. VFP-RDL                                                    
  68492.                                                            
  68493. Pages                                                      
  68494.                                                            
  68495. Columns                                                    
  68496. Column collection root nodename
  68497. Pages collection root nodename
  68498. Title Band nodename
  68499. Page Header Band nodename
  68500. Column Header Band nodename
  68501. Group Header Band nodename
  68502. Detail Band nodename
  68503. Group Footer Band nodename
  68504. Column Footer Band nodename
  68505. Page Footer Band nodename
  68506. Summary Band nodename
  68507. Detail Header Band nodename
  68508. Detail Footer Band nodename
  68509. Report root nodename
  68510. Text object nodename
  68511. Expression object nodename
  68512. Picture object nodename
  68513. Shape object nodename
  68514. Line object nodename
  68515. Variable nodename
  68516. FontResource nodename
  68517. DataEnvironment nodename
  68518. DE-Cursor nodename
  68519. DE-Relation nodename
  68520. Group selector nodename
  68521. XML Document root nodename
  68522. Report scope data root nodename
  68523. 3VFP-RDL raw-format layout description root nodename
  68524. NDELETEDVALUETYPENAMEOBJCODEFRXNODES
  68525. objtype
  68526. fec^]VUTSRQM
  68527. objcode
  68528. objname
  68529. objvalue
  68530. eportFP-RDLVitleTummarySReportsagesHFPLroupHGFFontResEEnvataHFRelationE-CursorDolumnsHCF
  68531. DELETED()
  68532. BCDEFGHIJKLMNOPQRSTUVWXYZ[\
  68533. objtype+objcode+IIF(objtype=1109,500,0)
  68534. LHD@<840,($
  68535. xt\XPH
  68536. PLATFORM
  68537. UNIQUEID
  68538. TIMESTAMP
  68539. CLASS
  68540. CLASSLOC
  68541. BASECLASS
  68542. OBJNAME
  68543. PARENT
  68544. PROPERTIES
  68545. PROTECTED
  68546. METHODS
  68547. OBJCODE
  68548. RESERVED1
  68549. RESERVED2
  68550. RESERVED3
  68551. RESERVED4
  68552. RESERVED5
  68553. RESERVED6
  68554. RESERVED7
  68555. RESERVED8
  68556.  COMMENT Class               
  68557.  WINDOWS _11W0RVA8Y 795638748
  68558.  COMMENT RESERVED            
  68559.  WINDOWS _1220YMYY4 795638870
  68560.  COMMENT RESERVED            
  68561.  WINDOWS _11R0OBRPZ 796152731
  68562.  COMMENT RESERVED            
  68563.  WINDOWS _11R0OANEG 815371681E
  68564.  COMMENT RESERVED            
  68565.  WINDOWS _12G0NNCGK 823373366
  68566.  COMMENT RESERVED            
  68567.  WINDOWS _1360UZUFV 875730233J
  68568.  COMMENT RESERVED            
  68569.  WINDOWS _11R0OJHC3 876772270
  68570.  COMMENT RESERVED            
  68571.  WINDOWS _1Q30Y83RB 876843690
  68572.  COMMENT RESERVED            
  68573.  WINDOWS _11R0O4T3U 878921974#
  68574.  COMMENT RESERVED            
  68575.  WINDOWS _11R0O3J0I 8789222024
  68576.  COMMENT RESERVED            
  68577.  WINDOWS _11R0OMVRT 879259511B
  68578.  COMMENT RESERVED            
  68579.  WINDOWS _11R0O2LAK 879259653
  68580.  COMMENT RESERVED            
  68581.  WINDOWS _11R0NJMU6 879259670:
  68582.  COMMENT RESERVED            
  68583.  WINDOWS _11R0NL795 879259682
  68584.  COMMENT RESERVED            
  68585.  WINDOWS _11R0OM4OS 879259826    
  68586.  COMMENT RESERVED            
  68587.  WINDOWS _11R0OKCMZ 879329451
  68588.  COMMENT RESERVED            
  68589. VERSION =   3.00
  68590. Pixels
  68591. 8Width = 200
  68592. Height = 112
  68593. BackStyle = 0
  68594. Name = "cnt"
  68595. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68596. Class
  68597. textbox
  68598. textbox
  68599. Class
  68600. resizegrabber
  68601. Pixels
  68602. Class
  68603. image
  68604. resizegrabber
  68605. image
  68606. Pixels
  68607. WFontName = "Tahoma"
  68608. FontSize = 8
  68609. Height = 22
  68610. Margin = 1
  68611. Width = 100
  68612. Name = "cbo"
  68613. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68614. Pixels
  68615. Class
  68616. label
  68617. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68618. +*resize Occurs when an object is resized.
  68619. Pixels
  68620. Class
  68621. OPicture = images\grabber.gif
  68622. Height = 12
  68623. Width = 12
  68624. Name = "resizegrabber"
  68625. commandbutton
  68626. *enabled_assign 
  68627. commandbutton
  68628. checkbox
  68629. Pixels
  68630. optiongroup
  68631. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68632. optiongroup
  68633. spinner
  68634. spinner
  68635. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68636. Pixels
  68637. Class
  68638. listbox
  68639. Class
  68640. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68641. Pixels
  68642. *incomingvalue
  68643. *action 
  68644. *resetincoming 
  68645. Pixels
  68646. Class
  68647. combobox
  68648. combobox
  68649. Pixels
  68650. hyperlabel
  68651. checkbox
  68652. Class
  68653. Class
  68654. Pixels
  68655. Class
  68656. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68657. optionbutton
  68658. optionbutton
  68659. Pixels
  68660. Class
  68661. shape
  68662. shape
  68663.     container
  68664.     pageframe
  68665. frxcontrols.vcx
  68666. editbox
  68667. label
  68668. listbox
  68669. Pixels
  68670. ;Height = 46
  68671. Width = 162
  68672. SpecialEffect = 0
  68673. Name = "shp"
  68674. Pixels
  68675. label
  68676. hyperlabel
  68677. currentpage
  68678. errored
  68679. Pixels
  68680. Class
  68681. Class
  68682. KFontName = "Tahoma"
  68683. FontSize = 8
  68684. Height = 78
  68685. Width = 174
  68686. Name = "lst"
  68687. Class
  68688.     container
  68689.     pageframe
  68690. Pixels
  68691. Class
  68692. editbox
  68693. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  68694. *enabled_assign 
  68695. AutoSize = .T.
  68696. FontUnderline = .T.
  68697. BackStyle = 0
  68698. Caption = "enter url here"
  68699. MousePointer = 15
  68700. ForeColor = 0,0,255
  68701. Name = "hyperlabel"
  68702. }FontName = "Tahoma"
  68703. FontSize = 8
  68704. BackStyle = 0
  68705. Caption = "prompt"
  68706. Height = 15
  68707. Width = 52
  68708. AutoSize = .T.
  68709. Name = "opt"
  68710. aFontName = "Tahoma"
  68711. FontSize = 8
  68712. Caption = "Caption"
  68713. Height = 187
  68714. Width = 187
  68715. Name = "pge"
  68716. lFontName = "Tahoma"
  68717. FontSize = 8
  68718. Height = 22
  68719. Margin = 1
  68720. SelectOnEntry = .T.
  68721. Width = 100
  68722. Name = "txt"
  68723. mAutoSize = .T.
  68724. FontName = "Tahoma"
  68725. FontSize = 8
  68726. Caption = "label"
  68727. Height = 15
  68728. Width = 24
  68729. Name = "lbl"
  68730. _Height = 25
  68731. Width = 75
  68732. FontName = "Tahoma"
  68733. FontSize = 8
  68734. Caption = "Caption"
  68735. Name = "cmd"
  68736. MemberClassLibrary = frxcontrols.vcx
  68737. MemberClass = "opt"
  68738. ButtonCount = 0
  68739. BackStyle = 0
  68740. BorderStyle = 1
  68741. Value = 0
  68742. Height = 66
  68743. Width = 117
  68744. Name = "opg"
  68745. NERROR
  68746. CMETHOD
  68747. NLINE
  68748. PARENT
  68749. ERROR
  68750. PARENT
  68751. RIGHTCLICK
  68752. Error,
  68753. RightClick
  68754. PROCEDURE Error
  68755. LPARAMETERS nError, cMethod, nLine
  68756. THIS.Parent.Error( nError, cMethod, nLine )
  68757. ENDPROC
  68758. PROCEDURE RightClick
  68759. THIS.Parent.RightClick()
  68760. ENDPROC
  68761. WFontName = "Tahoma"
  68762. FontSize = 8
  68763. Height = 53
  68764. Margin = 1
  68765. Width = 100
  68766. Name = "edt"
  68767. PROCEDURE enabled_assign
  68768. lparameters lEnabled
  68769. THIS.Enabled = m.lEnabled
  68770. ENDPROC
  68771. PROCEDURE Error
  68772. LPARAMETERS nError, cMethod, nLine
  68773. THIS.Parent.Error( nError, cMethod, nLine )
  68774. ENDPROC
  68775. readonly Specifies if the user can edit a control, or specifies if a table or view associated with a Cursor object allows updates.
  68776. *enabled_assign 
  68777. *readonly_assign 
  68778. *setfocus Sets the focus to a control.
  68779. PROCEDURE Error
  68780. LPARAMETERS nError, cMethod, nLine
  68781. THIS.Parent.Error( nError, cMethod, nLine )
  68782. ENDPROC
  68783. PROCEDURE RightClick
  68784. THIS.Parent.RightClick()
  68785. ENDPROC
  68786. jPROCEDURE KeyPress
  68787. lparameters iKey, iModifier
  68788. *----------------------------------
  68789. * Do not allow nulls to be entered
  68790. * with Ctrl-0 :
  68791. *----------------------------------
  68792. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  68793.     nodefault
  68794. endif
  68795. ENDPROC
  68796. PROCEDURE Error
  68797. LPARAMETERS nError, cMethod, nLine
  68798. THIS.Parent.Error( nError, cMethod, nLine )
  68799. ENDPROC
  68800. PROCEDURE Error
  68801. LPARAMETERS nError, cMethod, nLine
  68802. THIS.Parent.Error( nError, cMethod, nLine )
  68803. ENDPROC
  68804. PROCEDURE When
  68805. if THIS.Parent.ReadOnly
  68806.     return .F.
  68807. else 
  68808.     return .T.
  68809. endif
  68810. ENDPROC
  68811. PROCEDURE KeyPress
  68812. lparameters iKey, iModifier
  68813. *----------------------------------
  68814. * Do not allow nulls to be entered
  68815. * with Ctrl-0 :
  68816. *----------------------------------
  68817. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  68818.     nodefault
  68819. endif
  68820. ENDPROC
  68821. NERROR
  68822. CMETHOD
  68823. NLINE
  68824. PARENT
  68825. ERROR<
  68826. IKEY    
  68827. IMODIFIER
  68828. Error,
  68829. KeyPress
  68830. LENABLED
  68831. ENABLED.
  68832. NERROR
  68833. CMETHOD
  68834. NLINE
  68835. PARENT
  68836. ERROR
  68837. enabled_assign,
  68838. Errore
  68839. Width = 53
  68840. FontName = "Tahoma"
  68841. FontSize = 8
  68842. AutoSize = .T.
  68843. Alignment = 0
  68844. BackStyle = 0
  68845. Caption = "Check1"
  68846. Value = .F.
  68847. Name = "chk"
  68848. jPROCEDURE KeyPress
  68849. lparameters iKey, iModifier
  68850. *----------------------------------
  68851. * Do not allow nulls to be entered
  68852. * with Ctrl-0 :
  68853. *----------------------------------
  68854. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  68855.     nodefault
  68856. endif
  68857. ENDPROC
  68858. PROCEDURE Error
  68859. LPARAMETERS nError, cMethod, nLine
  68860. THIS.Parent.Error( nError, cMethod, nLine )
  68861. ENDPROC
  68862. PROCEDURE enabled_assign
  68863. lparameter lEnabled
  68864. for each optbut in THIS.Buttons
  68865.     optbut.Enabled = m.lEnabled
  68866. endfor
  68867. ENDPROC
  68868. PROCEDURE readonly_assign
  68869. lparameter lReadOnly
  68870. * Returning .F. in each button's .When() produces
  68871. * a more visually acceptable effect:
  68872. *for each optbut in this.Buttons 
  68873. *    optbut.Enabled = not m.lReadOnly
  68874. *endfor
  68875. THIS.ReadOnly = m.lReadOnly
  68876. ENDPROC
  68877. PROCEDURE setfocus
  68878. *----------------------------------------------------
  68879. * SetFocus() in containers doesn't work so well. This
  68880. * compensates for that bug by doing it manually:
  68881. *----------------------------------------------------
  68882. local oControl
  68883. for each oControl in this.Buttons
  68884.     if oControl.TabIndex = 1
  68885.         oControl.SetFocus()
  68886.         nodefault
  68887.         exit
  68888.     endif
  68889. endfor
  68890. ENDPROC
  68891. PROCEDURE RightClick
  68892. THIS.Parent.RightClick()
  68893. ENDPROC
  68894. PROCEDURE Error
  68895. LPARAMETERS nError, cMethod, nLine
  68896. THIS.Parent.Error( nError, cMethod, nLine )
  68897. ENDPROC
  68898. PROCEDURE enabled_assign
  68899. lparameter lEnabled
  68900. THIS.Enabled = m.lEnabled
  68901. ENDPROC
  68902. PROCEDURE Error
  68903. LPARAMETERS nError, cMethod, nLine
  68904. THIS.Parent.Error( nError, cMethod, nLine )
  68905. ENDPROC
  68906. PROCEDURE SetFocus
  68907. local oControl
  68908. for each oControl in this.Controls
  68909.     if type("oControl.TabIndex") = "N"
  68910.         if oControl.TabIndex = 1
  68911.             if pemstatus( m.oControl,"setFocus",5)
  68912.                 oControl.SetFocus()
  68913.                 nodefault
  68914.             endif
  68915.             exit
  68916.         endif
  68917.     endif
  68918. endfor
  68919. ENDPROC
  68920. PROCEDURE RightClick
  68921. THIS.Parent.RightClick()
  68922. ENDPROC
  68923. jPROCEDURE Error
  68924. LPARAMETERS nError, cMethod, nLine
  68925. THIS.Parent.Error( nError, cMethod, nLine )
  68926. ENDPROC
  68927. PROCEDURE KeyPress
  68928. lparameters iKey, iModifier
  68929. *----------------------------------
  68930. * Do not allow nulls to be entered
  68931. * with Ctrl-0 :
  68932. *----------------------------------
  68933. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  68934.     nodefault
  68935. endif
  68936. ENDPROC
  68937. PROCEDURE resetincoming
  68938. THIS.incomingValue = THIS.Value
  68939. ENDPROC
  68940. PROCEDURE LostFocus
  68941. if THIS.incomingValue <> THIS.Value
  68942.     this.action()
  68943. endif
  68944. ENDPROC
  68945. PROCEDURE UpClick
  68946. if THIS.incomingValue <> THIS.Value
  68947.     this.action()
  68948.     this.resetIncoming()
  68949. endif
  68950. ENDPROC
  68951. PROCEDURE DownClick
  68952. if THIS.incomingValue <> THIS.Value
  68953.     this.action()
  68954.     this.resetIncoming()
  68955. endif
  68956. ENDPROC
  68957. PROCEDURE Error
  68958. LPARAMETERS nError, cMethod, nLine
  68959. THIS.Parent.Error( nError, cMethod, nLine )
  68960. ENDPROC
  68961. PROCEDURE GotFocus
  68962. THIS.resetIncoming()
  68963. ENDPROC
  68964. PROCEDURE KeyPress
  68965. lparameters iKey, iModifier
  68966. *----------------------------------
  68967. * Do not allow nulls to be entered
  68968. * with Ctrl-0 :
  68969. *----------------------------------
  68970. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  68971.     nodefault
  68972. endif
  68973. ENDPROC
  68974. IKEY    
  68975. IMODIFIER.
  68976. NERROR
  68977. CMETHOD
  68978. NLINE
  68979. PARENT
  68980. ERROR
  68981. KeyPress,
  68982. Error}
  68983. jPROCEDURE Error
  68984. LPARAMETERS nError, cMethod, nLine
  68985. THIS.Parent.Error( nError, cMethod, nLine )
  68986. ENDPROC
  68987. PROCEDURE KeyPress
  68988. lparameters iKey, iModifier
  68989. *----------------------------------
  68990. * Do not allow nulls to be entered
  68991. * with Ctrl-0 :
  68992. *----------------------------------
  68993. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  68994.     nodefault
  68995. endif
  68996. ENDPROC
  68997. NERROR
  68998. CMETHOD
  68999. NLINE
  69000. PARENT
  69001. ERROR<
  69002. IKEY    
  69003. IMODIFIER
  69004. Error,
  69005. KeyPress
  69006. FontName = "Tahoma"
  69007. FontSize = 8
  69008. Height = 22
  69009. KeyboardLowValue = 0
  69010. Margin = 1
  69011. SelectOnEntry = .T.
  69012. SpinnerLowValue =   0.00
  69013. Width = 121
  69014. incomingvalue = 0
  69015. Name = "spn"
  69016. INCOMINGVALUE
  69017. VALUE+
  69018. INCOMINGVALUE
  69019. VALUE
  69020. ACTION8
  69021. INCOMINGVALUE
  69022. VALUE
  69023. ACTION
  69024. RESETINCOMING8
  69025. INCOMINGVALUE
  69026. VALUE
  69027. ACTION
  69028. RESETINCOMING.
  69029. NERROR
  69030. CMETHOD
  69031. NLINE
  69032. PARENT
  69033. ERROR
  69034. RESETINCOMING<
  69035. IKEY    
  69036. IMODIFIER
  69037. resetincoming,
  69038. LostFocusb
  69039. UpClick
  69040. DownClick$
  69041. Error
  69042. GotFocus
  69043. KeyPress
  69044. NERROR
  69045. CMETHOD
  69046. NLINE
  69047. PARENT
  69048. ERROR
  69049. PARENT
  69050. RIGHTCLICK
  69051. Error,
  69052. RightClick
  69053. IKEY    
  69054. IMODIFIER.
  69055. NERROR
  69056. CMETHOD
  69057. NLINE
  69058. PARENT
  69059. ERROR
  69060. KeyPress,
  69061. Error}
  69062. http://
  69063. http://
  69064. ShellExecute
  69065. SHELL32.dll
  69066. FindWindow
  69067. WIN32API
  69068. LCURL
  69069. CAPTION    
  69070. FORECOLOR
  69071. SHELLEXECUTE
  69072. SHELL32
  69073. FINDWINDOW
  69074. WIN32API
  69075. Click,
  69076. PARENT
  69077. RIGHTCLICKS
  69078. THIS.Controls[1]b
  69079. CONTROLS
  69080. SETFOCUS.
  69081. NERROR
  69082. CMETHOD
  69083. NLINE
  69084. PARENT
  69085. ERROR
  69086. RightClick,
  69087. Activate]
  69088. Error
  69089. THISFORM
  69090. HEIGHT
  69091. WIDTH
  69092. BORDERSTYLE
  69093. VISIBLEV
  69094. grabber.gif
  69095. grabber2k.gif
  69096. THEMES
  69097. PICTURE
  69098. resize,
  69099. IKEY    
  69100. IMODIFIER.
  69101. NERROR
  69102. CMETHOD
  69103. NLINE
  69104. PARENT
  69105. ERROR
  69106. KeyPress,
  69107. Error}
  69108. NERROR
  69109. CMETHOD
  69110. NLINE
  69111. PARENT
  69112. ERROR0
  69113. PARENT
  69114. READONLY<
  69115. IKEY    
  69116. IMODIFIER
  69117. Error,
  69118. KeyPress
  69119. LENABLED
  69120. OPTBUT
  69121. BUTTONS
  69122. ENABLED
  69123. LREADONLY
  69124. READONLYM
  69125. OCONTROL
  69126. BUTTONS
  69127. TABINDEX
  69128. SETFOCUS
  69129. PARENT
  69130. RIGHTCLICK.
  69131. NERROR
  69132. CMETHOD
  69133. NLINE
  69134. PARENT
  69135. ERROR
  69136. enabled_assign,
  69137. readonly_assign
  69138. setfocus
  69139. RightClickE
  69140. Errorv
  69141. LENABLED
  69142. ENABLED.
  69143. NERROR
  69144. CMETHOD
  69145. NLINE
  69146. PARENT
  69147. ERROR
  69148. oControl.TabIndexb
  69149. setFocus
  69150. OCONTROL
  69151. CONTROLS
  69152. TABINDEX
  69153. SETFOCUS
  69154. PARENT
  69155. RIGHTCLICK
  69156. enabled_assign,
  69157. Errore
  69158. SetFocus
  69159. RightClick
  69160. NERROR
  69161. CMETHOD
  69162. NLINE
  69163. PARENT
  69164. ERROR
  69165. PARENT
  69166. RIGHTCLICK
  69167. Error,
  69168. RightClick
  69169. #PROCEDURE RightClick
  69170. THIS.Parent.RightClick()
  69171. ENDPROC
  69172. PROCEDURE Activate
  69173. if type( "THIS.Controls[1]" ) = "O"
  69174.         THIS.Controls[1].SetFocus()
  69175.     catch
  69176.     endtry
  69177. endif
  69178. ENDPROC
  69179. PROCEDURE Error
  69180. LPARAMETERS nError, cMethod, nLine
  69181. THIS.Parent.Error( nError, cMethod, nLine )
  69182. ENDPROC
  69183. -PROCEDURE Click
  69184. local lcUrl
  69185. if left( lower(THIS.Caption), 7 ) = [http://]
  69186.     lcUrl = THIS.Caption
  69187.     lcUrl = [http://] + THIS.Caption
  69188. endif
  69189. THIS.ForeColor = RGB(128,0,128)
  69190. DECLARE INTEGER ShellExecute ;
  69191.     IN SHELL32.dll ;
  69192.     INTEGER nWinHandle,;
  69193.     STRING cOperation,;
  69194.     STRING cFileName,;
  69195.     STRING cParameters,;
  69196.     STRING cDirectory,;
  69197.     INTEGER nShowWindow
  69198. DECLARE INTEGER FindWindow ;
  69199.    IN WIN32API STRING cNull,STRING cWinName
  69200. =ShellExecute( FindWindow(0,_screen.Caption), "OPEN", m.lcUrl,"",sys(2023),1)
  69201. ENDPROC
  69202. aPROCEDURE resize
  69203. *=======================================================================
  69204. * Resize()
  69205. * Useage:
  69206. * In the form's resize event, call THIS.grabber.Resize() and the grabber
  69207. * image will relocate itself to the bottom right corner of the window
  69208. *=======================================================================
  69209. THIS.Top  = THISFORM.Height - THIS.Height
  69210. THIS.Left = THISFORM.Width  - THIS.Width
  69211. if THISFORM.BorderStyle<>3
  69212.     THIS.Visible = .F.
  69213. endif
  69214. ENDPROC
  69215. PROCEDURE Init
  69216. if _screen.Themes
  69217.     THIS.Picture = "grabber.gif"
  69218.     THIS.Picture = "grabber2k.gif"
  69219. endif
  69220. ENDPROC
  69221. PROCEDURE Error
  69222. LPARAMETERS nError, cMethod, nLine
  69223. THIS.Parent.Error( nError, cMethod, nLine )
  69224. ENDPROC
  69225. PROCEDURE RightClick
  69226. THIS.Parent.RightClick()
  69227. ENDPROC
  69228. ErasePage = .T.
  69229. MemberClassLibrary = frxcontrols.vcx
  69230. MemberClass = "pge"
  69231. PageCount = 0
  69232. TabStyle = 1
  69233. ActivePage = 0
  69234. Width = 241
  69235. Height = 169
  69236. currentpage = 0
  69237. errored = .F.
  69238. Name = "pgf"
  69239. jPROCEDURE KeyPress
  69240. lparameters iKey, iModifier
  69241. *----------------------------------
  69242. * Do not allow nulls to be entered
  69243. * with Ctrl-0 :
  69244. *----------------------------------
  69245. if m.iKey = 48 and 0 < bitand( m.iModifier, 2 )
  69246.     nodefault
  69247. endif
  69248. ENDPROC
  69249. PROCEDURE Error
  69250. LPARAMETERS nError, cMethod, nLine
  69251. THIS.Parent.Error( nError, cMethod, nLine )
  69252. ENDPROC
  69253. PLATFORM
  69254. UNIQUEID
  69255. TIMESTAMP
  69256. CLASS
  69257. CLASSLOC
  69258. BASECLASS
  69259. OBJNAME
  69260. PARENT
  69261. PROPERTIES
  69262. PROTECTED
  69263. METHODS
  69264. OBJCODE
  69265. RESERVED1
  69266. RESERVED2
  69267. RESERVED3
  69268. RESERVED4
  69269. RESERVED5
  69270. RESERVED6
  69271. RESERVED7
  69272. RESERVED8
  69273.  COMMENT Class               
  69274.  WINDOWS _1620OUFP8 819679853G
  69275.  COMMENT RESERVED            
  69276.  WINDOWS _19R0MDR54 819680088
  69277.  COMMENT RESERVED            
  69278.  WINDOWS _17X12M0M5 879329379
  69279.  WINDOWS _17X136SEA 8793293795
  69280.  WINDOWS _17X136SEQ 879329379
  69281.  WINDOWS _17X136SER 879329379@
  69282.  WINDOWS _17X136SES 879329379
  69283.  WINDOWS _17X136SET 879329379
  69284.  COMMENT RESERVED            
  69285.  WINDOWS _1S90NDO63 8822068228
  69286.  COMMENT RESERVED            
  69287.  WINDOWS _1800VSTVB 911434274
  69288.  COMMENT RESERVED            
  69289.  WINDOWS _1620OTOI2 911434517q
  69290.  COMMENT RESERVED            
  69291.  WINDOWS _1S90NDBMP 911784843(
  69292.  COMMENT RESERVED            
  69293.  WINDOWS _15L0YBYJT 926370639M
  69294.  WINDOWS _1620OUFP8 926370639
  69295.  WINDOWS _1MT10T1N1 926370639W
  69296.  COMMENT RESERVED            
  69297.  WINDOWS _15L0YNARZ1065729474
  69298.  WINDOWS _17L131CSM1065729474
  69299.  WINDOWS _17L131CSN 824659832
  69300.  WINDOWS _17L131CT2 824659832
  69301.  WINDOWS _15L0ZJMCW1065729474
  69302.  WINDOWS _17L131CT41065729474
  69303.  WINDOWS _17L131CT5 824659832
  69304.  WINDOWS _17L131CTH 824659832
  69305.  WINDOWS _17L131CTI1065729474@
  69306.  WINDOWS _1AU0YVMX51065729474
  69307.  WINDOWS _15L0ZJMDC1065729474"
  69308.  WINDOWS _15L0ZJMDD1065729474
  69309.  WINDOWS _15L0ZJMDR1065729474s
  69310.  WINDOWS _15L0ZJMDQ1065729474
  69311.  COMMENT RESERVED            
  69312.  WINDOWS _11R0TYA321065729481
  69313.  COMMENT RESERVED            
  69314. VERSION =   3.00
  69315. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  69316. Pixels
  69317. frxpreview.h
  69318. foxpro_reporting.h
  69319. frxpreview_loc.h
  69320. "Tahoma, 0, 8, 5, 13, 11, 23, 2, 0
  69321. frxbaseform
  69322. frxpreview.h
  69323. Pixels
  69324. Class
  69325. frxbaseform
  69326. frxpreviewastopform
  69327. Class
  69328. frxpreviewform
  69329. iscreendpi
  69330. *checkforlargefonts Called in the Init() to set font attributes if Large Fonts are detected.
  69331. frxpreviewastopform
  69332. frxpreview.vcx
  69333. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  69334. frxpreviewinscreen
  69335. Pixels
  69336. Class
  69337. frxpreviewform
  69338. frxpreviewinscreen
  69339. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  69340. frxpreview.h
  69341. frxpreview.vcx
  69342. frxpreviewform
  69343. lastzoomlevel
  69344. Pixels
  69345. ShowWindow = 2
  69346. DoCreate = .T.
  69347. MDIForm = .F.
  69348. topform = .T.
  69349. Name = "frxpreviewastopform"
  69350. spacer.Name = "spacer"
  69351. Label1.Name = "Label1"
  69352. Class
  69353. Label1
  69354. frxbaseform
  69355. frxpreviewform
  69356. frxpreviewform
  69357. Pixels
  69358. frxpreview.h
  69359. foxpro_reporting.h
  69360. frxpreview_loc.h
  69361. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  69362. frxpreviewindesktop
  69363. Class
  69364. frxpreviewform
  69365. PARENT
  69366. RIGHTCLICK
  69367. RightClick,
  69368. label
  69369. label
  69370. frxpreviewform
  69371. frxpreviewindesktop
  69372. frxpreview.vcx
  69373. PARENT
  69374. Click,
  69375. "Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
  69376. frxgotopageform
  69377. spacer
  69378. shape
  69379. shape
  69380. frxpreview.h
  69381. Pixels
  69382. Class
  69383. frxbaseform
  69384. Pixels
  69385. frxpreview.h
  69386. foxpro_reporting.h
  69387. frxpreview_loc.h
  69388. frxgotopageform
  69389. .PROCEDURE Click
  69390. THIS.Parent.Hide()
  69391. ENDPROC
  69392. frxgotopageform
  69393.     cmdCancel
  69394. commandbutton
  69395. frxpreview.vcx
  69396. gTop = 47
  69397. Left = 248
  69398. Width = 84
  69399. Cancel = .T.
  69400. Caption = "Cancel"
  69401. ZOrderSet = 4
  69402. Name = "cmdCancel"
  69403. frxcontrols.vcx
  69404. frxgotopageform
  69405. cmdOK
  69406. commandbutton
  69407. PTop = 32
  69408. Left = 28
  69409. Height = 10
  69410. Width = 19
  69411. BorderStyle = 0
  69412. Name = "spacer"
  69413. frxpreviewtoolbar
  69414. Class
  69415. PARENT
  69416. PAGENO    
  69417. SPNPAGENO
  69418. VALUE
  69419. Click,
  69420. `PROCEDURE Click
  69421. THIS.Parent.pageNo = THIS.Parent.spnPageNo.Value
  69422. THIS.Parent.Hide()
  69423. ENDPROC
  69424. frxcontrols.vcx
  69425. frxgotopageform
  69426. lblCaption
  69427. label
  69428. PARENT
  69429. PREVIEWFORM
  69430. ACTIONPRINT
  69431. Click,
  69432. Initn
  69433. frxpreview.h
  69434. foxpro_reporting.h
  69435. frxpreview_loc.h
  69436. "Tahoma, 0, 8, 5, 13, 11, 23, 2, 0
  69437. frxpreview.h
  69438. toolbar
  69439. frxpreviewtoolbar
  69440. Top = 3
  69441. Left = 473
  69442. Height = 22
  69443. Width = 85
  69444. Picture = images\print.bmp
  69445. Caption = " Print"
  69446. ToolTipText = "Print report"
  69447. SpecialEffect = 2
  69448. PicturePosition = 1
  69449. Name = "cmdPrint"
  69450. cmdPrint
  69451. frxpreview.vcx
  69452. frxpreviewtoolbar
  69453. frxcontrols.vcx
  69454. frxgotopageform
  69455.     spnPageno
  69456. `Top = 15
  69457. Left = 248
  69458. Width = 84
  69459. Caption = "OK"
  69460. Default = .T.
  69461. ZOrderSet = 3
  69462. Name = "cmdOK"
  69463. spinner
  69464. FontName = "Tahoma"
  69465. FontSize = 8
  69466. BackStyle = 0
  69467. Caption = "(build)"
  69468. Height = 17
  69469. Left = 2
  69470. Top = 1
  69471. Width = 40
  69472. ForeColor = 192,192,192
  69473. Name = "Label1"
  69474. commandbutton
  69475. frxcontrols.vcx
  69476. frxpreviewtoolbar
  69477. cmdClose
  69478. shapecanvas
  69479. Pixels
  69480. Class
  69481. shapecanvas
  69482. Name = "shapecanvas"
  69483. shape
  69484. frxcontrols.vcx
  69485. PARENT
  69486. PREVIEWFORM
  69487. ACTIONCLOSE
  69488. Click,
  69489. Initn
  69490. PROCEDURE Click
  69491. THIS.Parent.previewform.actionPrint()
  69492. ENDPROC
  69493. PROCEDURE Init
  69494. dodefault()
  69495. #IF USE_LOC_STRINGS_IN_UI
  69496.     THIS.Caption =     UI_TOOLBAR_PRINT_LOC
  69497.     THIS.ToolTipText = UI_TOOLBAR_TT_PRINT_LOC
  69498. #ENDIF
  69499. ENDPROC
  69500. PARENT
  69501. PREVIEWFORM
  69502. ACTIONGOLAST
  69503. Click,
  69504. Initr
  69505. PROCEDURE Click
  69506. THIS.Parent.previewform.actionClose()
  69507. ENDPROC
  69508. PROCEDURE Init
  69509. dodefault()
  69510. #IF USE_LOC_STRINGS_IN_UI
  69511.     THIS.Caption =     UI_TOOLBAR_CLOSE_LOC
  69512.     THIS.ToolTipText = UI_TOOLBAR_TT_CLOSE_LOC
  69513. #ENDIF
  69514. ENDPROC
  69515. Top = 3
  69516. Left = 388
  69517. Height = 22
  69518. Width = 85
  69519. Picture = images\preclose.bmp
  69520. Caption = " Close"
  69521. ToolTipText = "Close preview"
  69522. SpecialEffect = 2
  69523. PicturePosition = 1
  69524. Name = "cmdClose"
  69525. commandbutton
  69526. frxcontrols.vcx
  69527. frxpreviewtoolbar
  69528. opgPageCount
  69529. optiongroup
  69530. frxcontrols.vcx
  69531.     separator
  69532. imagecanvas
  69533. Class
  69534. frxpreviewtoolbar
  69535. image
  69536. imagecanvas
  69537. gTop = 15
  69538. Left = 12
  69539. Height = 66
  69540. Width = 224
  69541. BackStyle = 0
  69542. ZOrderSet = 0
  69543. Style = 3
  69544. Name = "Shp1"
  69545. ATop = 3
  69546. Left = 311
  69547. Height = 0
  69548. Width = 0
  69549. Name = "Separator4"
  69550. Separator4
  69551.     separator
  69552. Height = 22
  69553. Left = 204
  69554. Style = 2
  69555. TabStop = .F.
  69556. ToolTipText = "Choose page magnification"
  69557. Top = 3
  69558. DisplayCount = 5
  69559. Name = "cboZoom"
  69560. frxpreviewtoolbar
  69561. cboZoom
  69562. combobox
  69563. PROCEDURE InteractiveChange
  69564. THIS.Parent.ActionZoomLevel( THIS.Value )
  69565. ENDPROC
  69566. PROCEDURE Init
  69567. dodefault()
  69568. #IF USE_LOC_STRINGS_IN_UI
  69569.     THIS.ToolTipText = UI_TOOLBAR_TT_ZOOMLEVEL_LOC
  69570. #ENDIF
  69571. ENDPROC
  69572. ]Caption = " Go to page "
  69573. Left = 20
  69574. Top = 8
  69575. ZOrderSet = 2
  69576. Style = 3
  69577. Name = "lblCaption"
  69578. fHeight = 21
  69579. InputMask = "9999"
  69580. Left = 64
  69581. Top = 36
  69582. Width = 126
  69583. ZOrderSet = 1
  69584. Name = "spnPageno"
  69585. frxcontrols.vcx
  69586. frxpreviewtoolbar
  69587.     separator
  69588. Separator2
  69589. frxcontrols.vcx
  69590. PROCEDURE LostFocus
  69591. if THIS.Value < THIS.SpinnerLowValue
  69592.     THIS.Value = 1
  69593. endif
  69594. if THIS.Value > THIS.SpinnerHighValue
  69595.     THIS.Value = THIS.SpinnerHighValue
  69596. endif
  69597. dodefault()
  69598. ENDPROC
  69599. frxcontrols.vcx
  69600. frxgotopageform
  69601. shape
  69602.     separator
  69603. Height = 238
  69604. Width = 367
  69605. DoCreate = .T.
  69606. AutoCenter = .T.
  69607. Caption = "Form"
  69608. FontName = "Tahoma"
  69609. FontSize = 8
  69610. Icon = images\wwrite.ico
  69611. screendpi = 96
  69612. Name = "frxbaseform"
  69613. PARENT
  69614. ACTIONZOOMLEVEL
  69615. VALUE
  69616. InteractiveChange,
  69617. Inito
  69618. ATop = 3
  69619. Left = 204
  69620. Height = 0
  69621. Width = 0
  69622. Name = "Separator2"
  69623. PROCEDURE Click
  69624. THIS.Parent.Parent.previewform.actionGoLast()
  69625. ENDPROC
  69626. PROCEDURE Init
  69627. dodefault()
  69628. #IF USE_LOC_STRINGS_IN_UI
  69629.     THIS.ToolTipText = UI_TOOLBAR_TT_LAST_LOC
  69630. #ENDIF
  69631. ENDPROC
  69632.     cmdBottom
  69633. PARENT
  69634. PREVIEWFORM
  69635. ACTIONGONEXT
  69636. Click,
  69637. Initr
  69638. Top = 0
  69639. Left = 23
  69640. Height = 22
  69641. Width = 23
  69642. Picture = images\prelast.bmp
  69643. Caption = ""
  69644. ToolTipText = "Last page"
  69645. SpecialEffect = 2
  69646. Name = "cmdBottom"
  69647. frxpreviewtoolbar.cntNext
  69648. commandbutton
  69649. frxpreviewproxy
  69650. image
  69651. frxcontrols.vcx
  69652. PARENT
  69653. PREVIEWFORM
  69654. ACTIONGOTOPAGE
  69655. Click,
  69656. Initq
  69657. frxpreviewtoolbar.cntNext
  69658. cmdForward
  69659. Class
  69660. commandbutton
  69661. tempfile
  69662. cntNext
  69663. custom
  69664. Pixels
  69665. PROCEDURE Click
  69666. THIS.Parent.Parent.previewform.actionGoNext()
  69667. ENDPROC
  69668. PROCEDURE Init
  69669. dodefault()
  69670. #IF USE_LOC_STRINGS_IN_UI
  69671.     THIS.ToolTipText = UI_TOOLBAR_TT_NEXT_LOC
  69672. #ENDIF
  69673. ENDPROC
  69674. frxcontrols.vcx
  69675. frxpreviewtoolbar
  69676. frxpreviewproxy
  69677. frxpreview.h
  69678. QTop = 3
  69679. Left = 151
  69680. Width = 46
  69681. Height = 22
  69682. BorderWidth = 0
  69683. Name = "cntNext"
  69684.     container
  69685. frxcontrols.vcx
  69686. ShowWindow = 0
  69687. DoCreate = .T.
  69688. Name = "frxpreviewinscreen"
  69689. spacer.Name = "spacer"
  69690. canvas1.Name = "canvas1"
  69691. canvas2.Name = "canvas2"
  69692. canvas3.Name = "canvas3"
  69693. canvas4.Name = "canvas4"
  69694. Top = 0
  69695. Left = 0
  69696. Height = 22
  69697. Width = 23
  69698. Picture = images\prenext.bmp
  69699. Caption = ""
  69700. ToolTipText = "Next page"
  69701. SpecialEffect = 2
  69702. Name = "cmdForward"
  69703. PROCEDURE enabled_assign
  69704. lparameter lEnabled
  69705. THIS.cmdBottom.Enabled  = m.lEnabled
  69706. THIS.cmdForward.Enabled = m.lEnabled
  69707. dodefault(m.lEnabled)
  69708. ENDPROC
  69709. frxpreviewtoolbar
  69710. cmdGoToPage
  69711. commandbutton
  69712. frxcontrols.vcx
  69713. frxpreviewtoolbar.cntPrev
  69714. Pixels
  69715. custom
  69716. 2extensionhandler
  69717. previewformclass
  69718. getwindowref
  69719. 9PROCEDURE RightClick
  69720. THIS.Parent.RightClick()
  69721. ENDPROC
  69722. LENABLED
  69723. THIS    
  69724. CMDBOTTOM
  69725. ENABLED
  69726. CMDFORWARD
  69727. enabled_assign,
  69728. Top = 3
  69729. Left = 51
  69730. Height = 22
  69731. Width = 100
  69732. Picture = images\gotopage.bmp
  69733. Caption = " Go to page"
  69734. ToolTipText = "Go to page"
  69735. SpecialEffect = 2
  69736. PicturePosition = 1
  69737. Name = "cmdGoToPage"
  69738. OStretch = 2
  69739. Height = 116
  69740. Width = 100
  69741. tempfile = ("")
  69742. Name = "imagecanvas"
  69743. Desktop = .T.
  69744. DoCreate = .T.
  69745. Name = "frxpreviewintopform"
  69746. spacer.Name = "spacer"
  69747. canvas1.Name = "canvas1"
  69748. canvas2.Name = "canvas2"
  69749. canvas3.Name = "canvas3"
  69750. canvas4.Name = "canvas4"
  69751. PARENT
  69752. ACTIONPAGECOUNTg
  69753. OBUTTON
  69754. BUTTONS
  69755. AUTOSIZE
  69756. PICTUREPOSITION
  69757. HEIGHT
  69758. WIDTH
  69759. InteractiveChange,
  69760. Initb
  69761. Opt1.Init
  69762. Opt2.Init$
  69763. Opt3.Init4
  69764. PROCEDURE InteractiveChange
  69765. THIS.Parent.ActionPageCount()
  69766. ENDPROC
  69767. PROCEDURE Init
  69768. * Some kind of bug is re-sizing the buttons:
  69769. for each oButton in THIS.Buttons
  69770.     oButton.AutoSize = .F.
  69771.     oButton.PicturePosition = 13
  69772.     oButton.Top    = 0
  69773.     oButton.Height = 22
  69774.     oButton.Width  = 25
  69775. endfor
  69776. ENDPROC
  69777. PROCEDURE Opt1.Init
  69778. dodefault()
  69779. #IF USE_LOC_STRINGS_IN_UI
  69780.     THIS.ToolTipText = UI_TOOLBAR_TT_1PAGE_LOC
  69781. #ENDIF
  69782. ENDPROC
  69783. PROCEDURE Opt2.Init
  69784. dodefault()
  69785. #IF USE_LOC_STRINGS_IN_UI
  69786.     THIS.ToolTipText = UI_TOOLBAR_TT_2PAGES_LOC
  69787. #ENDIF
  69788. ENDPROC
  69789. PROCEDURE Opt3.Init
  69790. dodefault()
  69791. #IF USE_LOC_STRINGS_IN_UI
  69792.     THIS.ToolTipText = UI_TOOLBAR_TT_4PAGES_LOC
  69793. #ENDIF
  69794. ENDPROC
  69795. cmdBack
  69796. commandbutton
  69797. frxcontrols.vcx
  69798. frxpreviewtoolbar.cntPrev
  69799. cmdTop
  69800. frxpreview.h
  69801. foxpro_reporting.h
  69802. frxpreview_loc.h
  69803. PARENT
  69804. PREVIEWFORM
  69805. ACTIONGOPREV
  69806. Click,
  69807. Initr
  69808. PROCEDURE Click
  69809. THIS.Parent.previewform.actionGoToPage()
  69810. ENDPROC
  69811. PROCEDURE Init
  69812. dodefault()
  69813. #IF USE_LOC_STRINGS_IN_UI
  69814.     THIS.Caption =     UI_TOOLBAR_GOTOPAGE_LOC
  69815.     THIS.ToolTipText = UI_TOOLBAR_TT_GOTOPAGE_LOC
  69816. #ENDIF
  69817. ENDPROC
  69818. commandbutton
  69819. frxcontrols.vcx
  69820. frxpreviewtoolbar
  69821. cntPrev
  69822. |pageno Provides the current page number for report output.
  69823. pagetotal Provides a PageTotal for report output.
  69824. oparentform
  69825. Top = 14
  69826. Left = 12
  69827. Height = 92
  69828. Width = 345
  69829. ShowWindow = 1
  69830. DoCreate = .T.
  69831. AutoCenter = .F.
  69832. BorderStyle = 2
  69833. Closable = .F.
  69834. MaxButton = .F.
  69835. MinButton = .F.
  69836. AlwaysOnTop = .T.
  69837. AllowOutput = .F.
  69838. pageno = 0
  69839. pagetotal = 0
  69840. oparentform = (.NULL.)
  69841. Name = "frxgotopageform"
  69842. iButtonCount = 3
  69843. BorderStyle = 0
  69844. Height = 22
  69845. Left = 311
  69846. Top = 3
  69847. Width = 77
  69848. Name = "opgPageCount"
  69849. Opt1.Picture = images\1page.bmp
  69850. Opt1.PicturePosition = 13
  69851. Opt1.Caption = ""
  69852. Opt1.Height = 38
  69853. Opt1.Left = 0
  69854. Opt1.SpecialEffect = 2
  69855. Opt1.Style = 1
  69856. Opt1.ToolTipText = "One page"
  69857. Opt1.Top = 0
  69858. Opt1.Width = 32
  69859. Opt1.AutoSize = .F.
  69860. Opt1.Name = "Opt1"
  69861. Opt2.Picture = images\2page.bmp
  69862. Opt2.PicturePosition = 13
  69863. Opt2.Caption = ""
  69864. Opt2.Height = 38
  69865. Opt2.Left = 25
  69866. Opt2.SpecialEffect = 2
  69867. Opt2.Style = 1
  69868. Opt2.ToolTipText = "Two pages"
  69869. Opt2.Top = 0
  69870. Opt2.Width = 32
  69871. Opt2.AutoSize = .F.
  69872. Opt2.Name = "Opt2"
  69873. Opt3.Picture = images\4page.bmp
  69874. Opt3.PicturePosition = 13
  69875. Opt3.Caption = ""
  69876. Opt3.Height = 38
  69877. Opt3.Left = 50
  69878. Opt3.SpecialEffect = 2
  69879. Opt3.Style = 1
  69880. Opt3.ToolTipText = "Four pages"
  69881. Opt3.Top = 0
  69882. Opt3.Width = 32
  69883. Opt3.AutoSize = .F.
  69884. Opt3.Name = "Opt3"
  69885.     container
  69886. frxcontrols.vcx
  69887. PROCEDURE Init
  69888. *----------------------------------------------------
  69889. * For final release we'll make this invisible
  69890. *----------------------------------------------------
  69891. if type("SHOW_APPLICATION_VERSION") = "U"
  69892.     THIS.Visible = .F.
  69893. endif
  69894. THIS.Caption = PREVIEW_VERSION
  69895. ENDPROC
  69896. PARENT
  69897. PREVIEWFORM
  69898. ACTIONGOFIRST
  69899. Click,
  69900. Inits
  69901. PROCEDURE Click
  69902. THIS.Parent.Parent.previewform.actionGoPrev()
  69903. ENDPROC
  69904. PROCEDURE Init
  69905. dodefault()
  69906. #IF USE_LOC_STRINGS_IN_UI
  69907.     *THIS.Caption =    
  69908.     THIS.ToolTipText = UI_TOOLBAR_TT_BACK_LOC
  69909. #ENDIF
  69910. ENDPROC
  69911. Top = 0
  69912. Left = 23
  69913. Height = 22
  69914. Width = 23
  69915. Picture = images\preprev.bmp
  69916. Caption = ""
  69917. Enabled = .F.
  69918. ToolTipText = "Previous page"
  69919. SpecialEffect = 2
  69920. Name = "cmdBack"
  69921. SHOW_APPLICATION_VERSIONb
  69922. 9.5.0.0
  69923. VISIBLE
  69924. CAPTION
  69925. Init,
  69926. PROCEDURE Click
  69927. THIS.Parent.Parent.previewform.actionGoFirst()
  69928. ENDPROC
  69929. PROCEDURE Init
  69930. dodefault()
  69931. #IF USE_LOC_STRINGS_IN_UI
  69932.     *THIS.Caption =    
  69933.     THIS.ToolTipText = UI_TOOLBAR_TT_FIRST_LOC
  69934. #ENDIF
  69935. ENDPROC
  69936. Top = 0
  69937. Left = 0
  69938. Height = 22
  69939. Width = 23
  69940. Picture = images\prefirst.bmp
  69941. Caption = ""
  69942. Enabled = .F.
  69943. ToolTipText = "First page"
  69944. SpecialEffect = 2
  69945. Name = "cmdTop"
  69946. toolbar
  69947. PROCEDURE Show
  69948. LPARAMETERS nStyle
  69949. #IF DEBUG_METHOD_LOGGING 
  69950.     debugout space(program(-1)) + "frxGoToPageForm::Show(" + trans(m.nStyle) + ")"
  69951. #ENDIF
  69952. *-----------------------------------------
  69953. * Fix for SP1: Handle positioning in top-level form
  69954. * See frxPreviewForm::ActionGoToPage()
  69955. * Addresses bug# 474691
  69956. *-----------------------------------------
  69957. THIS.pageNo    = THIS.oParentForm.currentPage
  69958. THIS.pageTotal = THIS.oParentForm.pageTotal
  69959. THIS.Caption   = DEFAULT_MBOX_TITLE_LOC
  69960. THIS.lblCaption.Caption = REPORT_PREVIEW_GOTO_PAGE_LOC + " " + "(1-" + transform(THIS.pageTotal) + ")"
  69961. if THIS.oParentForm.ShowWindow = 2 && as top-level form
  69962.     *-----------------------------------
  69963.     * If parent preview window is a top-level form,
  69964.     * center the child window in the view port:
  69965.     *-----------------------------------
  69966.     THIS.AutoCenter = .F.
  69967.     THIS.Left = THIS.oParentForm.ViewPortLeft + int(THIS.oParentForm.Width/2  - THIS.Width/2)  
  69968.     THIS.Top  = THIS.oParentForm.ViewPortTop  + int(THIS.oParentForm.Height/2 - THIS.Height/2)
  69969.     THIS.AutoCenter = .T.
  69970. endif
  69971. *--------------
  69972. THIS.spnPageNo.SpinnerLowValue = 1
  69973. THIS.spnPageNo.SpinnerHighValue = THIS.pageTotal
  69974. *THIS.spnPageNo.KeyboardLowValue = 1
  69975. *THIS.spnPageNo.KeyboardHighValue = THIS.pageTotal
  69976. THIS.spnPageNo.Value = THIS.pageNo
  69977. dodefault(m.nStyle)
  69978. ENDPROC
  69979. PROCEDURE Init
  69980. dodefault()
  69981. #if USE_LOC_STRINGS_IN_UI
  69982.     THIS.cmdOK.Caption     = UI_CMD_OK_LOC
  69983.     THIS.cmdCancel.Caption = UI_CMD_CANCEL_LOC
  69984. #endif
  69985. ENDPROC
  69986. FontName
  69987. Segoe UI
  69988. FontSize
  69989. Margin
  69990. Margin
  69991. Margin
  69992. Editbox
  69993. Margin
  69994. Textbox
  69995. FontName
  69996. MS Shell Dlg 2
  69997. FontSize
  69998. FontName
  69999. Tahoma
  70000. FontSize
  70001. FontName
  70002. FontSize
  70003. FontSize
  70004. SETALL
  70005. FONTNAME
  70006. FONTSIZE    
  70007. SCREENDPI
  70008. ErrorHandler
  70009. pr_frxpreview.prg
  70010. IERROR
  70011. CMETHOD
  70012. ILINE
  70013. HANDLE
  70014. THIS    
  70015. CANCELLED    
  70016. SUSPENDED
  70017. GetDeviceCaps
  70018. WIN32API
  70019. GetDC
  70020. WIN32API
  70021. ReleaseDC
  70022. WIN32API
  70023. GETDEVICECAPS
  70024. WIN32API
  70025. GETDC    
  70026. RELEASEDC
  70027. SCREENDPI
  70028. CHECKFORLARGEFONTS
  70029. checkforlargefonts,
  70030. Error
  70031. LENABLED
  70032. CMDTOP
  70033. ENABLED
  70034. CMDBACK
  70035. enabled_assign,
  70036. Dcanvascount
  70037. canvasheight
  70038. canvaswidth
  70039. currentpage
  70040. frxfilename
  70041. lastpainted
  70042. oreport
  70043. pageheight Specifies the height of the Page.
  70044. pagewidth Specifies the width of the Page.
  70045. pagetotal Provides a PageTotal for report output.
  70046. toolbar
  70047. toolbarisvisible
  70048. unitconverter
  70049. zoomlevel
  70050. hidcommandwindow
  70051. isnowait
  70052. formcaption
  70053. startoffset
  70054. printonexit
  70055. suppressrendering
  70056. disabledoffscreenbmps
  70057. extensionhandler
  70058. _memberdata XML Metadata for customizable properties
  70059. allowprintfrompreview
  70060. lastzoomlevel
  70061. textontoolbar
  70062. tempstoprepaint
  70063. memberclass Specifies the name of a member default class to use when new members are added to the container.
  70064. memberclasslibrary Specifies the name of the class library containing the class associated with the MemberClass property.
  70065. topform
  70066. mouseflag
  70067. ignoremouseclickinmagnifycode
  70068. *actionclose 
  70069. *actiongofirst 
  70070. *actiongolast 
  70071. *actiongonext 
  70072. *actiongoprev 
  70073. *actiongotopage 
  70074. *actionprint 
  70075. *actionsetcanvascount 
  70076. *actionsetzoom 
  70077. *actiontoolbarvisibility 
  70078. *invokecontextmenu 
  70079. *renderpage 
  70080. *reset Resets the Timer control so that it starts counting from 0.
  70081. *setreport 
  70082. *showtoolbar 
  70083. *synchcanvases 
  70084. *synchpageno 
  70085. *synchtoolbar 
  70086. *setcurrentpage parameters: iPage
  70087. *actionshowinfo 
  70088. ^zoomlevels[1,2] 
  70089. *getzoompercent 
  70090. *renderpages 
  70091. *savetoresource 
  70092. *restorefromresource 
  70093. *getpixelsperdpi960 Returns the ratio between pixels and 960dpi  based on the current zoomlevel.
  70094. *createtoolbar 
  70095. *extensionhandler_assign 
  70096. *getpixelpageoffsets 
  70097. *showcommandwindow 
  70098. *hidecommandwindow 
  70099. *createcanvases 
  70100. *canvascount_assign 
  70101. *setzoomlevel 
  70102. *setcanvascount 
  70103. VALUE
  70104. SPINNERLOWVALUE
  70105. SPINNERHIGHVALUE    
  70106. LostFocus,
  70107. PROCEDURE enabled_assign
  70108. lparameter lEnabled
  70109. THIS.cmdTop.Enabled  = m.lEnabled
  70110. THIS.cmdBack.Enabled = m.lEnabled
  70111. dodefault(m.lEnabled)
  70112. ENDPROC
  70113. OTop = 3
  70114. Left = 5
  70115. Width = 46
  70116. Height = 22
  70117. BorderWidth = 0
  70118. Name = "cntPrev"
  70119. previewform
  70120. specialmousexcoord
  70121. *previewform_assign 
  70122. *synchcontrols 
  70123. *actionzoomlevel parameter: iZoomIndex
  70124. *getwindowref 
  70125. *actionpagecount 
  70126. Caption = "Toolbar1"
  70127. Height = 28
  70128. KeyPreview = .T.
  70129. Left = 0
  70130. Top = 0
  70131. Width = 563
  70132. ShowWindow = 1
  70133. previewform = .NULL.
  70134. specialmousexcoord = 0
  70135. Name = "frxpreviewtoolbar"
  70136. Report Preview
  70137. Go to page number:
  70138. NSTYLE
  70139. PAGENO
  70140. OPARENTFORM
  70141. CURRENTPAGE    
  70142. PAGETOTAL
  70143. CAPTION
  70144. LBLCAPTION
  70145. SHOWWINDOW
  70146. AUTOCENTER
  70147. VIEWPORTLEFT
  70148. WIDTH
  70149. VIEWPORTTOP
  70150. HEIGHT    
  70151. SPNPAGENO
  70152. SPINNERLOWVALUE
  70153. SPINNERHIGHVALUE
  70154. VALUE
  70155. Show,
  70156. oform Reference to the actual preview form. Not guaranteed to be valid available until after .Show() has been called.
  70157. oreport Reference to the ReportListener class assisting the report run. Assigned via .SetReport() automatically.
  70158. caption If not empty, this will override the default preview caption in the form title.
  70159. topform Indicates that the Preview Form should be a TopForm. Forces non-modal operation.
  70160. canvascount If not empty, overrides the initial number of pages shown in preview form. Valid values are 1,2, or 4.
  70161. currentpage If not empty, overrides the initial page displayed by the preview form. (Default will be first page rendered.) 
  70162. 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).
  70163. toolbarisvisible If not null, overrides the default initial visibility of the preview form's toolbar. .T. to force visible; .F. to force not visible.
  70164. extensionhandler Reference to an extension handler object, if one is assigned via the .SetExtensionHandler() method.
  70165. 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.
  70166. _memberdata XML Metadata for customizable properties
  70167. allowprintfrompreview If set to false, suppresses the Print action from the preview.
  70168. 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.
  70169. memberclass Specifies the name of a member default class to use when new members are added to the container.
  70170. memberclasslibrary Specifies the name of the class library containing the class associated with the MemberClass property.
  70171. *getwindowref Returns an object reference to the window with the specified title. Parameter: cWindowTitle
  70172. *hide Calls THIS.oForm.Hide(), if oForm is not null.
  70173. *release Calls THIS.oForm.Release() and nulls out the internal object references .oReport and .oForm.
  70174. *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)
  70175. *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.
  70176. *setcurrentpage Commands the active preview form to navigate to a specific page. (Parameter: iPageNo)
  70177. *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)
  70178. *setzoomlevel Commands the active preview window to change its zoom level to the speciified value. Valid values: 1-11. (Parameter: iZoomLevel)
  70179. *setextensionhandler Assign an object reference to handle preview extensions. (Parameter: oRef)
  70180. *binstringtoint 
  70181. oform = .NULL.
  70182. oreport = .NULL.
  70183. caption = ("")
  70184. canvascount = 0
  70185. currentpage = 0
  70186. zoomlevel = 0
  70187. toolbarisvisible = .NULL.
  70188. extensionhandler = .NULL.
  70189. previewformclass = frxPreviewForm
  70190. _memberdata = 
  70191.     1732<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  70192. <VFPData>
  70193. <memberdata name="allowprintfrompreview" type="Property" display="AllowPrintFromPreview"/>
  70194. <memberdata name="canvascount" type="Property" display="CanvasCount"/>
  70195. <memberdata name="caption" type="Property" display="Caption"/>
  70196. <memberdata name="currentpage" type="Property" display="CurrentPage"/>
  70197. <memberdata name="extensionhandler" type="Property" display="ExtensionHandler"/>
  70198. <memberdata name="oform" type="Property" display="oForm"/>
  70199. <memberdata name="oreport" type="Property" display="oReport"/>
  70200. <memberdata name="previewformclass" type="Property" display="PreviewFormClass"/>
  70201. <memberdata name="toolbarisvisible" type="Property" display="ToolbarIsVisible"/>
  70202. <memberdata name="topform" type="Property" display="TopForm"/>
  70203. <memberdata name="zoomlevel" type="Property" display="ZoomLevel"/>
  70204. <memberdata name="getwindowref" type="Method" display="GetWindowRef"/>
  70205. <memberdata name="hide" type="Method" display="Hide"/>
  70206. <memberdata name="release" type="Method" display="Release"/>
  70207. <memberdata name="setcanvascount" type="Method" display="SetCanvasCount"/>
  70208. <memberdata name="setcurrentpage" type="Method" display="SetCurrentPage"/>
  70209. <memberdata name="setextensionhandler" type="Method" display="SetExtensionHandler"/>
  70210. <memberdata name="setreport" type="Method" display="SetReport"/>
  70211. <memberdata name="setzoomlevel" type="Method" display="SetZoomLevel"/>
  70212. <memberdata name="show" type="Method" display="Show"/>
  70213. <memberdata name="textontoolbar"      type="Property" display="TextOnToolbar"/>
  70214. <memberdata name="memberclass"        type="Property" display="MemberClass"/>
  70215. <memberdata name="memberclasslibrary" type="Property" display="MemberClassLibrary"/>
  70216. </VFPData>
  70217. allowprintfrompreview = .T.
  70218. textontoolbar = .NULL.
  70219. memberclass = ("")
  70220. memberclasslibrary = ("")
  70221. Name = "frxpreviewproxy"
  70222. G(PROCEDURE getwindowref
  70223. *-----------------------------------------------------------------
  70224. * .GetWindowRef( cWindow )
  70225. * Given a window name from REPORT FORM.. WINDOW <cWindow>,
  70226. * return an object reference to the window
  70227. *-----------------------------------------------------------------
  70228. lparameter cWindow
  70229. *-----------------------------------
  70230. * Fixed for SP1: declare oForm local
  70231. *-----------------------------------
  70232. local cTitle, oRef, oForm
  70233. cTitle = wtitle(m.cWindow)
  70234. oRef   = null    
  70235. if not empty( m.cTitle )
  70236.     for each oForm in _screen.Forms
  70237.         if upper(oForm.Caption) == upper(m.cTitle) and ;
  70238.            ((oForm.Class = "Form" and oForm.Name = "") or ;
  70239.             (upper(oForm.Name) == upper(m.cWindow)))
  70240.             oRef = m.oForm
  70241.             exit
  70242.         endif
  70243.     endfor
  70244. endif
  70245. return m.oRef
  70246. ENDPROC
  70247. PROCEDURE hide
  70248. *-----------------------------------------------------------------
  70249. * .Hide()
  70250. *-----------------------------------------------------------------
  70251. #IF DEBUG_METHOD_LOGGING 
  70252.     debugout space(program(-1)) + "frxPreviewProxy::Hide()"
  70253. #ENDIF
  70254. if not isnull( THIS.oForm )
  70255.     THIS.oForm.Hide()
  70256. endif
  70257. ENDPROC
  70258. PROCEDURE release
  70259. *-----------------------------------------------------------------
  70260. * .Release()
  70261. *-----------------------------------------------------------------
  70262. #IF DEBUG_METHOD_LOGGING 
  70263.     debugout space(program(-1)) + "frxPreviewProxy::Release()"
  70264. #ENDIF
  70265. if not isnull( THIS.oForm )
  70266.     THIS.oForm.Release()
  70267. endif
  70268. THIS.ExtensionHandler = .null.
  70269. THIS.oReport = .null.
  70270. THIS.oForm   = .null.
  70271. ENDPROC
  70272. PROCEDURE setreport
  70273. *-----------------------------------------------------------------
  70274. * .SetReport( oRef )
  70275. * This method will be called by the report engine, giving the 
  70276. * PreviewContainer a reference to the active ReportListener so 
  70277. * that it can invoke rendering methods to render the pages. 
  70278. * This reference will need to be saved in an internal property, 
  70279. * and nulled out appropriately in the .Reset()/.Destroy() events.
  70280. *-----------------------------------------------------------------
  70281. parameter toReport
  70282. #IF DEBUG_METHOD_LOGGING 
  70283.     debugout ""
  70284.     debugout space(program(-1)) + "frxPreviewProxy::SetReport(" + trans(m.toReport) + ")"
  70285. #ENDIF
  70286. *------------------------------------------
  70287. * SET STATUS BAR OFF
  70288. * SET TALK ON
  70289. * ... get lots of stuff echoed to the screen
  70290. * so this will minimise it
  70291. *------------------------------------------
  70292. if set("TALK")="ON"
  70293.     THIS.Tag = " "
  70294.     set talk off
  70295. endif
  70296. if  not isnull( m.toReport )  and ;
  70297.     vartype( m.toReport ) = "O" 
  70298.     *-----------------------------------------------
  70299.     * Change in SP2: This is no longer a constraint:
  70300.     *-----------------------------------------------
  70301.     * and toReport.BaseClass = "Reportlistener"
  70302.     *-----------------------------------
  70303.     * it's a valid Report Listener:
  70304.     *-----------------------------------
  70305.     THIS.oReport = m.toReport
  70306.     *------------------------------------------
  70307.     * Support for a late addition to the 
  70308.     * report listener's commandClauses object:
  70309.     *------------------------------------------
  70310.     if vers(4) < "09.00.0000.2013"
  70311.         AddProperty( toReport.commandclauses, "IsDesignerProtected",.F.)
  70312.     endif
  70313.     *------------------------------------------
  70314.     * Interrogate report protection and disable
  70315.     * the print button
  70316.     *------------------------------------------
  70317.     if m.toReport.commandClauses.isDesignerProtected 
  70318.         local iCurrSession, iRec, iProtFlags
  70319.         iCurrSession = set("DATASESSION")
  70320.         set datasession to (toReport.FrxDataSession)
  70321.         iRec = iif( eof("frx"),-1,recno("frx"))
  70322.         go top in frx
  70323.         iProtFlags = this.BinstringToInt( frx.ORDER )
  70324.         if m.iRec = -1
  70325.             go bottom in frx
  70326.             skip in frx
  70327.         else
  70328.             go m.iRec in frx
  70329.         endif
  70330.         set datasession to (m.iCurrSession)
  70331.         if bittest( m.iProtFlags, FRX_PROTECT_REPORT_NO_PRINT )
  70332.             THIS.AllowPrintFromPreview = .F.
  70333.         endif
  70334.     endif
  70335.     *-----------------------------------
  70336.     * We're being passed a null reference
  70337.     * so clean up:
  70338.     *-----------------------------------
  70339.     if not isnull( THIS.oForm )
  70340.         THIS.oForm.setReport( .NULL. )
  70341. *        THIS.oForm.Release()
  70342.     endif
  70343.     THIS.oReport = .NULL.
  70344.                     
  70345. endif    
  70346. *------------------------------------------
  70347. * SET STATUS BAR OFF
  70348. * SET TALK ON
  70349. * ... get lots of stuff echoed to the screen
  70350. * so this will minimise it
  70351. *------------------------------------------
  70352. if THIS.Tag == " "
  70353.     THIS.Tag = ""
  70354.     set talk on
  70355. endif
  70356. ENDPROC
  70357. PROCEDURE show
  70358. *-----------------------------------------------------------------
  70359. * .Show( imode )
  70360. * The Report engine / Listener object will invoke .Show() when 
  70361. * it is ready for the user to interact with the Preview UI.
  70362. *-----------------------------------------------------------------
  70363. lparameter iStyle
  70364. #IF DEBUG_METHOD_LOGGING 
  70365.     debugout ""
  70366.     debugout space(program(-1)) + "frxPreviewProxy::Show(" + trans(m.iStyle) + ")"
  70367. #ENDIF
  70368. *------------------------------------------
  70369. * Check for valid ReportListener reference.
  70370. * We can not proceed if we don't have a 
  70371. * valid ReportListener guy:
  70372. *------------------------------------------
  70373. if isnull(THIS.oReport)
  70374.     *-------------------------------------
  70375.     * Error. Show() may not be called
  70376.     * prior to .setReport()
  70377.     *-------------------------------------
  70378.     =messagebox(RP_INVALID_INITIALIZATION_LOC, 16, DEFAULT_MBOX_TITLE_LOC )
  70379.     return
  70380. endif
  70381. *------------------------------------------
  70382. * SET STATUS BAR OFF
  70383. * SET TALK ON
  70384. * ... get lots of stuff echoed to the screen
  70385. * so this will minimise it
  70386. *------------------------------------------
  70387. if set("TALK")="ON"
  70388.     THIS.Tag = " "
  70389.     set talk off
  70390. endif
  70391. *------------------------------------------
  70392. * Ensure that Show() with no parameters is 
  70393. * handled correctly (we pass the param on)
  70394. *------------------------------------------
  70395. if type("iStyle") = "L"
  70396.     iStyle = 0
  70397. endif
  70398. #define DEFAULT_PREVIEW_CLASS    "frxPreviewForm"
  70399. local lcFormClass
  70400. lcFormClass = DEFAULT_PREVIEW_CLASS        && In current top form
  70401. *------------------------------------------
  70402. * Determine the correct form class to instantiate:
  70403. *------------------------------------------
  70404. do case
  70405. case THIS.oReport.commandClauses.InScreen
  70406.     *--------------------------------------------
  70407.     * Ensure the screen is visible and normal preview:
  70408.     *--------------------------------------------
  70409.     lcFormClass = "frxPreviewInScreen"
  70410. case THIS.oReport.commandClauses.InWindow = "SCREEN"
  70411.     *--------------------------------------------
  70412.     * Just in case IN WINDOW SCREEN is resolved
  70413.     * as this clause instead:
  70414.     *--------------------------------------------
  70415.     lcFormClass = "frxPreviewInScreen"
  70416. case not empty( THIS.oReport.commandClauses.Window )
  70417.     *--------------------------------------------
  70418.     * Determine the kind of target window:
  70419.     *--------------------------------------------
  70420.     local host
  70421.     host = THIS.getWindowRef( THIS.oReport.commandClauses.Window )        
  70422.     if not isnull( m.host ) and (host.Desktop or not empty(host.MacDesktop))
  70423.         lcFormClass = "frxPreviewInDesktop"
  70424.     endif        
  70425. case THIS.TopForm
  70426.     *--------------------------------------------
  70427.     * Not IN SCREEN, not IN WINDOW <name>, and 
  70428.     * explicitly asked for topform support:
  70429.     * Warning: Experimental!
  70430.     *--------------------------------------------
  70431.     lcFormClass = "frxPreviewAsTopForm"
  70432. endcase
  70433. THIS.previewFormClass = m.lcFormClass
  70434. *------------------------------------------
  70435. * Activate any other window involved in the 
  70436. * command. (e.g. to respect the IN WINDOW <name> clause)
  70437. *------------------------------------------
  70438. do case
  70439. case THIS.oReport.commandClauses.InScreen
  70440.     *--------------------------------------------
  70441.     * Ensure the screen is visible and normal preview:
  70442.     *--------------------------------------------
  70443.     activate window screen
  70444. case THIS.oReport.commandClauses.InWindow = "SCREEN"
  70445.     *--------------------------------------------
  70446.     * Just in case IN WINDOW SCREEN is resolved
  70447.     * as this clause instead:
  70448.     *--------------------------------------------
  70449.     activate window screen
  70450. case not empty( THIS.oReport.commandClauses.InWindow )
  70451.     *--------------------------------------------
  70452.     * Determine the kind of host window:
  70453.     *--------------------------------------------
  70454.     local host
  70455.     host = THIS.getWindowRef( THIS.oReport.commandClauses.InWindow )        
  70456.     if not isnull( m.host ) 
  70457.         *--------------------------------------------
  70458.         * Make sure it is active:
  70459.         *--------------------------------------------
  70460.         activate window (THIS.oReport.commandClauses.InWindow)
  70461.     endif
  70462.     release host
  70463. endcase
  70464. *------------------------------------------
  70465. * Instantiate the preview form, if necessary:
  70466. *------------------------------------------
  70467. local lReUse
  70468. lReUse = .T.
  70469. *------------------------------------------
  70470. * What prevents us from re-using the form?
  70471. *------------------------------------------
  70472. do case
  70473. case isnull( THIS.oForm )
  70474.     *-------------------------------------
  70475.     * We don't have a form to re-use:
  70476.     *-------------------------------------
  70477.     lReUse = .F.
  70478. case THIS.oForm.WindowType <> m.iStyle    
  70479.     *-------------------------------------
  70480.     * We can't change modality on the fly
  70481.     *-------------------------------------
  70482.     lReUse = .F.
  70483. case upper(THIS.oForm.Class) <> upper(THIS.PreviewFormClass)
  70484.     *-------------------------------------
  70485.     * It's the wrong class
  70486.     *-------------------------------------
  70487.     lReUse = .F.
  70488. endcase                
  70489. if not m.lReUse
  70490.     if not isnull( THIS.oForm )
  70491.         *--------------------------------------
  70492.         * Dispose of the current form:
  70493.         *--------------------------------------
  70494.         THIS.oForm.ExtensionHandler = null
  70495.         THIS.oForm.oReport = null
  70496.         THIS.oForm.Hide
  70497.         THIS.oForm = .null.
  70498.     endif    
  70499.     *--------------------------------------
  70500.     * Create a new form instance:
  70501.     *--------------------------------------
  70502.     THIS.oForm = newobject(THIS.previewFormClass,"frxPreview")
  70503. endif
  70504. *------------------------------------------
  70505. * The new form needs a new reference to the listener:
  70506. *------------------------------------------
  70507. THIS.oForm.setReport( THIS.oReport )
  70508. THIS.oForm.RestoreFromResource()
  70509. *------------------------------------------
  70510. * Decorate the window: 
  70511. *------------------------------------------
  70512. do case
  70513. case THIS.oReport.commandClauses.IsDesignerLoaded
  70514.     *------------------------------------------
  70515.     * Called from the Report Designer. We can't use 
  70516.     * IF WEXIST("REPORT DESIGNER") because it is possible
  70517.     * to use MODI REPORT ... WINDOW X where X has a different title.
  70518.     *------------------------------------------
  70519.     local cDesignerWindow
  70520.     cDesignerWindow = wontop()     
  70521.     if not empty(m.cDesignerWindow)
  70522.         cParent = wparent(m.cDesignerWindow)
  70523.         if empty(m.cParent)
  70524.             cParent = "SCREEN"
  70525.         endif
  70526.         local iRowPix, iColPix
  70527.         *--------------------------------------------------
  70528.         * Calculate the co-ordinates of the Report Designer
  70529.         * in the parent window:
  70530.         *--------------------------------------------------
  70531.         iRowPix = fontmetric(1, wfont(1,m.cParent), wfont(2,m.cParent), wfont(3,m.cParent) )
  70532.         iColPix = fontmetric(6, wfont(1,m.cParent), wfont(2,m.cParent), wfont(3,m.cParent) )
  70533.         THIS.oForm.Top     = int( wlrow(m.cDesignerWindow) * m.iRowPix )
  70534.         THIS.oForm.Left    = int( wlcol(m.cDesignerWindow) * m.iColPix )
  70535.         *--------------------------------------------------
  70536.         * Calculate the width/height of the Report Designer:
  70537.         *--------------------------------------------------
  70538.         iRowPix = fontmetric(1, wfont(1,m.cDesignerWindow), wfont(2,m.cDesignerWindow), wfont(3,m.cDesignerWindow) )
  70539.         iColPix = fontmetric(6, wfont(1,m.cDesignerWindow), wfont(2,m.cDesignerWindow), wfont(3,m.cDesignerWindow) )
  70540.         THIS.oForm.Width   = int( wcols(m.cDesignerWindow) * m.iColPix )
  70541.         THIS.oForm.Height  = int( wrows(m.cDesignerWindow) * m.iRowPix )    
  70542.         THIS.oForm.Caption = m.cDesignerWindow
  70543. *        if wmaximum(m.cDesignerWindow)
  70544. *            THIS.oForm.WindowState = 2
  70545. *        endif
  70546.     endif
  70547. case not empty( THIS.oReport.commandClauses.Window )
  70548.     *------------------------------------------
  70549.     * Respect the WINDOW <name> clause
  70550.     *------------------------------------------
  70551.     local template
  70552.     template = THIS.getWindowRef( THIS.oReport.commandClauses.Window )
  70553.     if not isnull( m.template )
  70554.         with THIS.oForm
  70555.             .Caption             = template.Caption
  70556.             .Top                 = template.Top
  70557.             .Left                 = template.Left
  70558.             .Width               = template.Width
  70559.             .Height              = template.Height
  70560.             .WindowState        = template.WindowState  && not minimised?
  70561.             .BorderStyle        = template.BorderStyle
  70562.             .HalfHeightCaption  = template.HalfHeightCaption
  70563.         endwith    
  70564.         release template
  70565.     endif
  70566. otherwise
  70567.     with THIS.oForm
  70568.         *-------------------------------------
  70569.         * Fix for SP2: Test for -1 
  70570.         * rather than 0 because otherwise you
  70571.         * can't override and set to 0.
  70572.         * Now of course, you can't set to -1.
  70573.         *-------------------------------------
  70574.         if THIS.Top > -1
  70575.             .Top = THIS.Top
  70576.         endif
  70577.         if THIS.Left > -1
  70578.             .Left = THIS.Left
  70579.         endif
  70580.         *-------------------------------------
  70581.         if THIS.Width > 0
  70582.             .Width = THIS.Width
  70583.         endif
  70584.         if THIS.Height > 0
  70585.             .Height = THIS.Height
  70586.         endif
  70587.         if not empty( THIS.Caption )
  70588.             .Caption = THIS.Caption
  70589.         endif
  70590.     endwith
  70591. endcase
  70592. *------------------------------------------
  70593. * Changed for SP1: These have nothing to do
  70594. * with the size and shape of the window:
  70595. *------------------------------------------
  70596. with THIS.oForm
  70597.     *--------------------------------------------
  70598.     * New in SP2:
  70599.     *--------------------------------------------
  70600.     .MemberClass        = THIS.MemberClass
  70601.     .MemberClassLibrary = THIS.MemberClassLibrary
  70602.     *--------------------------------------------
  70603.     if THIS.canvasCount > 0
  70604.         .canvasCount = THIS.canvasCount
  70605.     endif
  70606.     if THIS.currentPage > 0
  70607.         .currentPage = THIS.currentPage
  70608.     endif
  70609.     if THIS.zoomLevel > 0
  70610.         .zoomLevel = THIS.zoomLevel
  70611.     endif
  70612.     if not isnull( THIS.toolbarIsVisible )
  70613.         .toolbarIsVisible = THIS.toolbarIsVisible
  70614.     endif
  70615.     if not isnull( THIS.TextOnToolbar )
  70616.         .TextOnToolbar = THIS.TextOnToolbar
  70617.     endif
  70618.     .AllowPrintFromPreview = THIS.AllowPrintFromPreview
  70619. endwith
  70620. *-------------------------------
  70621. * Hook in the extension handler:
  70622. *-------------------------------
  70623. if not isnull( THIS.ExtensionHandler )
  70624.     THIS.oForm.extensionHandler = THIS.ExtensionHandler 
  70625. endif
  70626. *-------------------------------
  70627. * Show the form:
  70628. *-------------------------------
  70629. if THIS.oForm.ShowWindow = 2 
  70630.     *-----------------------------------
  70631.     * We're launching a top form which 
  70632.     * must always be modeless.
  70633.     *-----------------------------------
  70634.     iStyle = 0
  70635. endif
  70636. if m.iStyle = 1
  70637.     *------------------------------------------
  70638.     * Modal: We can show the form, then reset
  70639.     * the TALK setting:
  70640.     *------------------------------------------
  70641.     THIS.oForm.Show(1)
  70642.     *------------------------------------------
  70643.     * SET STATUS BAR OFF
  70644.     * SET TALK ON
  70645.     * ... get lots of stuff echoed to the screen
  70646.     * so this will minimise it
  70647.     *------------------------------------------
  70648.     if THIS.Tag == " "
  70649.         THIS.Tag = ""
  70650.         set talk on
  70651.     endif
  70652.     *------------------------------------------
  70653.     * Modeless. Restore TALK prior to showing
  70654.     *------------------------------------------
  70655.     *------------------------------------------
  70656.     * SET STATUS BAR OFF
  70657.     * SET TALK ON
  70658.     * ... get lots of stuff echoed to the screen
  70659.     * so this will minimise it
  70660.     *------------------------------------------
  70661.     if THIS.Tag == " "
  70662.         THIS.Tag = ""
  70663.         set talk on
  70664.     endif
  70665.     THIS.oForm.Show()
  70666. endif
  70667. ENDPROC
  70668. PROCEDURE setcurrentpage
  70669. *-----------------------------------------------------------------
  70670. * .SetCurrentPage( iPage )
  70671. *-----------------------------------------------------------------
  70672. lparameter iPage
  70673. THIS.currentPage = m.iPage
  70674. if not isnull( THIS.oForm )
  70675.     THIS.oForm.setCurrentPage( THIS.currentPage )
  70676.     THIS.oForm.renderPages()
  70677.     return .T.
  70678.     return .F.
  70679. endif
  70680. ENDPROC
  70681. PROCEDURE setcanvascount
  70682. *-----------------------------------------------------------------
  70683. * .SetCanvasCount( iCount )
  70684. *-----------------------------------------------------------------
  70685. lparameter iCount
  70686. THIS.canvasCount = m.iCount
  70687. if not isnull( THIS.oForm )
  70688.     THIS.oForm.actionSetCanvasCount( THIS.canvasCount )
  70689.     THIS.oForm.renderPages()
  70690.     return .T.
  70691.     return .F.
  70692. endif
  70693. ENDPROC
  70694. PROCEDURE setzoomlevel
  70695. *-----------------------------------------------------------------
  70696. * .SetZoomLevel( iLevel )
  70697. *-----------------------------------------------------------------
  70698. lparameter iLevel
  70699. THIS.zoomLevel = m.iLevel
  70700. if not isnull( THIS.oForm )
  70701.     THIS.oForm.actionSetZoom( THIS.zoomLevel )
  70702.     return .F.
  70703. endif
  70704. ENDPROC
  70705. PROCEDURE setextensionhandler
  70706. *-----------------------------------------------------------------
  70707. * .SetExtensionHandler( oRef )
  70708. *-----------------------------------------------------------------
  70709. lparameter oRef
  70710. THIS.ExtensionHandler = m.oRef
  70711. if not isnull( THIS.oForm )
  70712.     THIS.oForm.ExtensionHandler = THIS.ExtensionHandler
  70713.     return .T.
  70714.     return .F.
  70715. endif
  70716. ENDPROC
  70717. PROCEDURE binstringtoint
  70718. *=======================================================
  70719. * BinstringToInt( char )
  70720. * Returns a numeric equivalent of a binary data in string
  70721. * form.
  70722. * BinChar & Integer conversion, based on code by RS
  70723. *=======================================================
  70724. lparameter cByte
  70725. local iReturn, i, b
  70726. iReturn = 0
  70727. for m.i = len( m.cByte ) to 1 step -1
  70728.     b = asc( substr( m.cByte, m.i, 1 ))
  70729.     iReturn = (m.iReturn*256) + m.b
  70730. endfor
  70731. return m.iReturn
  70732. ENDPROC
  70733. PROCEDURE Init
  70734. #IF DEBUG_METHOD_LOGGING 
  70735.     debugout space(program(-1)) + "frxPreviewProxy::Init()"
  70736. #ENDIF
  70737. THIS.Width = 0
  70738. THIS.Height = 0
  70739. * New in SP1:
  70740. THIS.Top = -1
  70741. THIS.Left = -1
  70742. ENDPROC
  70743. PROCEDURE Destroy
  70744. *-----------------------------------------------------------------
  70745. * .Destroy()
  70746. *-----------------------------------------------------------------
  70747. #IF DEBUG_METHOD_LOGGING 
  70748.     debugout space(program(-1)) + "frxPreviewProxy::Destroy()"
  70749. #ENDIF
  70750. *--------------------------------------------
  70751. * Try this to ensure no hanging references...
  70752. *--------------------------------------------
  70753. if not isnull( THIS.oForm )
  70754.     THIS.oForm.Release()
  70755. endif
  70756. ENDPROC
  70757. OPREVIEWFORM
  70758. PREVIEWFORM
  70759. CBOZOOM
  70760. CLEAR
  70761. ZOOMLEVELS
  70762. ADDITEM
  70763. DISPLAYCOUNT 
  70764. CBOZOOM
  70765. VALUE
  70766. PREVIEWFORM    
  70767. ZOOMLEVEL
  70768. IPAGESALLOWED
  70769. ZOOMLEVELS
  70770. OPGPAGECOUNT
  70771. ENABLED
  70772. CANVASCOUNT
  70773. CURRENTPAGE
  70774. CNTPREV
  70775. CMDTOP
  70776. CMDBACK    
  70777. PAGETOTAL
  70778. CNTNEXT
  70779. CMDFORWARD    
  70780. CMDBOTTOM
  70781. CMDGOTOPAGE
  70782. IZOOMINDEX
  70783. OFORM
  70784. PREVIEWFORM    
  70785. ZOOMLEVEL
  70786. ACTIONSETZOOM
  70787. IGNOREMOUSECLICKINMAGNIFYCODE
  70788. CPOINT
  70789. GETMOUSEPOINTERPOS
  70790. CAPTION
  70791. CBOZOOM
  70792. WIDTH
  70793. HEIGHT
  70794. FONTNAME
  70795. FONTSIZE
  70796. VALUE
  70797. SETMOUSEPOINTERPOS
  70798. CWINDOW
  70799. CTITLE
  70800. OFORM
  70801. FORMS
  70802. CAPTION
  70803. CLASS
  70804. OPGPAGECOUNT
  70805. VALUE
  70806. PREVIEWFORM
  70807. ACTIONSETCANVASCOUNT
  70808. cmdPrint
  70809. Caption
  70810. AutoSizea
  70811. AutoSize-
  70812. Height
  70813. PREVIEWFORM
  70814. CAPTION
  70815. FORMCAPTION
  70816. CMDPRINT
  70817. VISIBLE
  70818. ALLOWPRINTFROMPREVIEW
  70819. TEXTONTOOLBAR
  70820. OCONTROL
  70821. CONTROLS
  70822. SETALL
  70823. Print Preview
  70824. PreviewToolbar
  70825. GetCursorPos
  70826. user32Q
  70827. GetMousePointerPos
  70828. SetCursorPos
  70829. user32Q
  70830. SetMousePointerPos
  70831. CAPTION
  70832. GETCURSORPOS
  70833. USER32
  70834. GETMOUSEPOINTERPOS
  70835. SETCURSORPOS
  70836. SETMOUSEPOINTERPOS+
  70837. PREVIEWFORM
  70838. TOOLBARISVISIBLE
  70839. ErrorHandler
  70840. pr_frxpreview.prg
  70841. IERROR
  70842. CMETHOD
  70843. ILINE
  70844. HANDLE
  70845. THIS    
  70846. CANCELLED    
  70847. SUSPENDED
  70848. previewform_assign,
  70849. synchcontrols.
  70850. actionzoomlevel*
  70851. getwindowref
  70852. actionpagecount(
  70853. Refresh
  70854. Destroy
  70855. Error
  70856. SUPPRESSRENDERING
  70857. RELEASE-
  70858. SETCURRENTPAGE
  70859. RENDERPAGES
  70860. SYNCHTOOLBAR<
  70861. SETCURRENTPAGE    
  70862. PAGETOTAL
  70863. CANVASCOUNT
  70864. RENDERPAGES
  70865. SYNCHTOOLBAR
  70866. CURRENTPAGE
  70867. CANVASCOUNT
  70868. OREPORT
  70869. OUTPUTPAGECOUNT
  70870. SETCURRENTPAGE
  70871. SUPPRESSRENDERING
  70872. RENDERPAGES
  70873. SYNCHTOOLBARj
  70874. CURRENTPAGE
  70875. SETCURRENTPAGE
  70876. CANVASCOUNT
  70877. RENDERPAGES
  70878. SYNCHTOOLBAR
  70879. frxGoToPageForm
  70880. frxPreview.vcx
  70881. LOFORM
  70882. IPAGENO
  70883. OPARENTFORM
  70884. SHOWTOOLBAR
  70885. PAGENO
  70886. CURRENTPAGE
  70887. SETCURRENTPAGE
  70888. 09.00.0000.3504
  70889. OREPORT
  70890. COMMANDCLAUSES
  70891. NOWAIT
  70892. PRINTCACHEDPAGES
  70893. SUPPRESSRENDERING
  70894. PRINTONEXIT
  70895. RELEASE!
  70896. ICOUNT
  70897. SETCANVASCOUNT!
  70898. IZOOMLEVEL
  70899. SETZOOMLEVEL
  70900. TOOLBAR
  70901. TOOLBARISVISIBLE
  70902. CREATETOOLBAR
  70903. SHOWTOOLBAR
  70904. First page
  70905. prefirst.bmp
  70906. Previous
  70907. preprev.bmp
  70908. First page
  70909. prefirst.bmp
  70910. Previous
  70911. preprev.bmp
  70912. prenext.bmp
  70913. Last page
  70914. prelast.bmp
  70915. prenext.bmp
  70916. Last page
  70917. prelast.bmp
  70918. Go to page...
  70919. preview.bmp
  70920. Pages to display
  70921. Toolbar
  70922. 09.00.0000.3301
  70923. Print
  70924. print.bmp
  70925. Close
  70926. preclose.bmp
  70927. oRef.actionGoFirst()
  70928. oRef.actionGoPrev()
  70929. oRef.actionGoNext()
  70930. oRef.actionGoLast()
  70931. oRef.actionGoToPage()
  70932. ON BAR 7 OF (m.cShortcut) ACTIVATE POPUP &cZoom
  70933. ON BAR 8 OF (m.cShortcut) ACTIVATE POPUP &cPages
  70934. oRef.actionToolbarVisibility()
  70935. oRef.actionPrint()
  70936. oRef.actionClose()
  70937. About...
  70938. oRef.actionShowInfo()
  70939. oref.actionSetZoom( bar() )
  70940. 1 page
  70941. 2 pages
  70942. 2 pages
  70943. 4 pages
  70944. 4 pages
  70945. oRef.actionSetCanvasCount(1)
  70946. oRef.actionSetCanvasCount(2)
  70947. oRef.actionSetCanvasCount(4)
  70948. AddBarsToMenu
  70949. LVIAKEYPRESS
  70950. ALLOWOUTPUT
  70951. OPREVIEWCONTAINER    
  70952. CSHORTCUT
  70953. CZOOM
  70954. CPAGES
  70955. SHOWWINDOW
  70956. CURRENTPAGE
  70957. CANVASCOUNT    
  70958. PAGETOTAL
  70959. TOOLBAR
  70960. TOOLBARISVISIBLE
  70961. WINDOWTYPE
  70962. ALLOWPRINTFROMPREVIEW
  70963. ZOOMLEVELS    
  70964. ZOOMLEVEL
  70965. IPAGESALLOWED
  70966. EXTENSIONHANDLER
  70967. ADDBARSTOMENU
  70968. IGNOREMOUSECLICKINMAGNIFYCODE3
  70969. Image
  70970. An exception ocurred invoking .OutputPage():C
  70971. Report Preview
  70972. Image
  70973. IPAGE
  70974. OCANVAS
  70975. OREPORT
  70976. OUTPUTPAGECOUNT    
  70977. BASECLASS
  70978. VISIBLE
  70979. OUTPUTPAGE
  70980. MESSAGE
  70981. TOREPORT
  70982. OREPORT
  70983. FRXFILENAME
  70984. COMMANDCLAUSES
  70985. LENABLED
  70986. TOOLBAR
  70987. CONTROLS
  70988. ENABLED
  70989. SYNCHTOOLBAR
  70990. SHOWWINDOW
  70991. CAPTION
  70992. Image
  70993. Image
  70994. Image
  70995. SUPPRESSRENDERING
  70996. SPACER    
  70997. BACKCOLOR
  70998. WIDTH
  70999. HEIGHT
  71000. ILEFT
  71001. IWIDTH
  71002. IHEIGHT
  71003. IZOOMPERCENT
  71004. GETZOOMPERCENT    
  71005. PAGEWIDTH    
  71006. SCREENDPI
  71007. PAGEHEIGHT    
  71008. ZOOMLEVEL
  71009. ZOOMLEVELS
  71010. SCROLLBARS
  71011. CANVASCOUNT
  71012. CANVAS1    
  71013. BASECLASS
  71014. VISIBLE
  71015. CANVAS2
  71016. CANVAS3
  71017. CANVAS4
  71018.  - Page 
  71019.  - Page 
  71020. ICURRENTPAGE
  71021. CURRENTPAGE
  71022. STARTOFFSET
  71023. OREPORT
  71024. COMMANDCLAUSES
  71025. WINDOW
  71026. CANVASCOUNT
  71027. LASTPAGE    
  71028. PAGETOTAL
  71029. CAPTION
  71030. FORMCAPTION*
  71031. TOOLBAR
  71032. SYNCHCONTROLS
  71033. IPAGE
  71034. CURRENTPAGE
  71035. OREPORT
  71036. OUTPUTPAGECOUNT
  71037. SYNCHPAGENO
  71038. RENDERPAGES
  71039. SYNCHTOOLBARZ
  71040. Preview version: 
  71041. 9.5.0.0
  71042. .pageTotal   = 
  71043. .currentPage = 
  71044. .canvasCount = 
  71045. .pageHeight  = 
  71046. .pageWidth   = 
  71047. _PAGENO      = 
  71048. THIS.oReport.commandClauses:
  71049. THIS.oReport.commandClauses.C
  71050. Report Preview
  71051. CTEXT
  71052. THIS    
  71053. PAGETOTAL
  71054. CURRENTPAGE
  71055. CANVASCOUNT
  71056. PAGEHEIGHT    
  71057. PAGEWIDTH
  71058. OREPORT
  71059. COMMANDCLAUSES
  71060. CFIELD
  71061. IZOOMPERCENT
  71062. THIS    
  71063. ZOOMLEVEL
  71064. ZOOMLEVELS
  71065. NPREVIEWFORMASPECTRATIO
  71066. NPAGEASPECTRATIO
  71067. IREQUIREDHEIGHT
  71068. IREQUIREDWIDTH
  71069. WIDTH
  71070. HEIGHT
  71071. CANVASCOUNT    
  71072. PAGEWIDTH
  71073. PAGEHEIGHT    
  71074. SCREENDPI
  71075. RenderPages
  71076. SUPPRESSRENDERING
  71077. IPAGETORENDER
  71078. CURRENTPAGE
  71079. CANVASCOUNT
  71080. RENDERPAGE
  71081. CANVAS1
  71082. CANVAS2
  71083. CANVAS3
  71084. CANVAS4
  71085. EXTENSIONHANDLER
  71086. RENDERPAGES
  71087. NOTIFY
  71088. NOTIFYv
  71089. TALKv
  71090. ResourceManager
  71091. frxcommon.prg
  71092. 92REPREVIEWC
  71093. PreviewForm.Top
  71094. PreviewForm.Left
  71095. PreviewForm.Width
  71096. PreviewForm.Width
  71097. PreviewForm.Height
  71098. PreviewForm.Height
  71099. PreviewForm.WindowState
  71100. PreviewForm.ToolbarIsVisible
  71101. PreviewForm.CanvasCount
  71102. PreviewForm.ZoomLevel
  71103. PreviewToolbar.Top
  71104. PreviewToolbar.Left
  71105. PreviewToolbar.Width
  71106. PreviewToolbar.Height
  71107. PreviewToolbar.DockPosition
  71108. 92REPREVIEWC
  71109. LSETNOTIFY
  71110. LSETNOTIFY2
  71111. LSETTALK
  71112. ICURRENTSTATE
  71113. WINDOWSTATE
  71114. LOADRESOURCE
  71115. FRXFILENAME
  71116. OREPORT
  71117. COMMANDCLAUSES
  71118. ISDESIGNERLOADED
  71119. WIDTH
  71120. VIEWPORTWIDTH
  71121. HEIGHT
  71122. VIEWPORTHEIGHT
  71123. TOOLBARISVISIBLE
  71124. CANVASCOUNT    
  71125. ZOOMLEVEL
  71126. TOOLBAR
  71127. DOCKPOSITION
  71128. SAVERESOURCE
  71129. ResourceManager
  71130. frxcommon.prg
  71131. 92REPREVIEWC
  71132. PreviewForm.Top
  71133. PreviewForm.Left
  71134. PreviewForm.Width
  71135. PreviewForm.Height
  71136. PreviewForm.WindowState
  71137. PreviewForm.ToolbarIsVisible
  71138. PreviewForm.CanvasCount
  71139. PreviewForm.ZoomLevel
  71140. PreviewToolbar.Top
  71141. PreviewToolbar.Left
  71142. PreviewToolbar.Width
  71143. PreviewToolbar.Height
  71144. PreviewToolbar.DockPosition
  71145. ICURRENTSTATE
  71146. CVALUE
  71147. LOADRESOURCE
  71148. FRXFILENAME
  71149. WIDTH
  71150. HEIGHT
  71151. OREPORT
  71152. COMMANDCLAUSES
  71153. ISDESIGNERLOADED
  71154. WINDOWSTATE
  71155. TOOLBARISVISIBLE
  71156. CANVASCOUNT    
  71157. ZOOMLEVEL
  71158. TOOLBAR
  71159. SHOWWINDOW
  71160. CANVAS1
  71161. WIDTH    
  71162. PAGEWIDTH
  71163. frxPreviewToolbar
  71164. frxPreview.vcx
  71165. InitializeToolbar
  71166. TOOLBAR
  71167. PREVIEWFORM
  71168. EXTENSIONHANDLER
  71169. INITIALIZETOOLBAR
  71170. REFRESH
  71171. PreviewForm
  71172. OEXTHANDLER
  71173. EXTENSIONHANDLER
  71174. PREVIEWFORM
  71175. Empty
  71176. CONVERSIONFACTOR
  71177. GETPIXELSPERDPI960
  71178. CANVAS1
  71179. OFFSETG
  71180. Command
  71181. STARTMODE
  71182. HIDCOMMANDWINDOW
  71183. COMMAND`
  71184. Command
  71185. STARTMODE
  71186. COMMAND
  71187. HIDCOMMANDWINDOW
  71188. Canvas1
  71189. Canvas2
  71190. Canvas3
  71191. Canvas4
  71192. Canvas1
  71193. Canvas2
  71194. Canvas3
  71195. Canvas4
  71196. Canvas1
  71197. ShapeCanvas
  71198. Canvas2
  71199. ShapeCanvas
  71200. Canvas3
  71201. ShapeCanvas
  71202. Canvas4
  71203. ShapeCanvas
  71204. CreateCanvases
  71205. MEMBERCLASS
  71206. MEMBERCLASSLIBRARY    
  71207. NEWOBJECT
  71208. CLASSLIBRARY
  71209. CANVAS1
  71210. VISIBLE
  71211. CANVAS2
  71212. CANVAS3
  71213. CANVAS4
  71214. EXTENSIONHANDLER
  71215. CREATECANVASES8
  71216. THIS.Canvas1b
  71217. Shape
  71218. ICANVASCOUNT
  71219. CANVASCOUNT
  71220. CANVAS1    
  71221. BASECLASS
  71222. CANVAS2
  71223. VISIBLE
  71224. CANVAS3
  71225. CANVAS49
  71226. IZOOMLEVEL
  71227. ZOOMLEVELS    
  71228. ZOOMLEVEL
  71229. SETVIEWPORT
  71230. IPAGESALLOWED
  71231. CANVASCOUNT
  71232. TEMPSTOPREPAINT
  71233. SYNCHCANVASES
  71234. RENDERPAGES
  71235. SYNCHPAGENO
  71236. SYNCHTOOLBAR
  71237. SCROLLBARS
  71238. ICOUNT
  71239. CANVASCOUNT
  71240. SUPPRESSRENDERING
  71241. SETVIEWPORT
  71242. SYNCHCANVASES
  71243. RENDERPAGES
  71244. SYNCHPAGENO
  71245. SYNCHTOOLBAR
  71246. IBUTTON
  71247. NSHIFT
  71248. NXCOORD
  71249. NYCOORD
  71250. IGNOREMOUSECLICKINMAGNIFYCODE
  71251. CANVAS1
  71252. WIDTH
  71253. HEIGHT    
  71254. ZOOMLEVEL
  71255. ZOOMLEVELS
  71256. CLICKXOFFSETPERCENT
  71257. CLICKYOFFSETPERCENT
  71258. ACTIONSETZOOM
  71259. NEWVIEWPORTX
  71260. NEWVIEWPORTY
  71261. SETVIEWPORT    
  71262. MOUSEFLAG8
  71263. TOOLBAR
  71264. TOOLBARISVISIBLE2
  71265. TOOLBARISVISIBLE
  71266. SHOWTOOLBAR
  71267. RESIZE'
  71268. TOOLBARISVISIBLE
  71269. TOOLBAR
  71270. Destroy
  71271. EXTENSIONHANDLER
  71272. DESTROY
  71273. TOOLBAR
  71274. PREVIEWFORM
  71275. OREPORT%
  71276. Whole Page
  71277. Fit to Width
  71278. ZOOMLEVELS
  71279. CREATETOOLBAR
  71280. MINWIDTH    
  71281. MINHEIGHT
  71282. HandledKeyPress
  71283. NKEYCODE
  71284. NSHIFTALTCTRL
  71285. LHANDLEDKEYPRESS
  71286. IPAGESALLOWED
  71287. ZOOMLEVELS    
  71288. ZOOMLEVEL
  71289. EXTENSIONHANDLER
  71290. HANDLEDKEYPRESS
  71291. ACTIONCLOSE
  71292. INVOKECONTEXTMENU
  71293. ACTIONSETZOOM
  71294. ACTIONGOTOPAGE
  71295. SETVIEWPORT
  71296. VIEWPORTLEFT
  71297. VIEWPORTTOP
  71298. ACTIONGOPREV
  71299. ACTIONGONEXT
  71300. ACTIONGOFIRST
  71301. ACTIONGOLAST
  71302. ACTIONSETCANVASCOUNT
  71303. Image
  71304. Paint
  71305. TEMPSTOPREPAINT
  71306. CANVAS1    
  71307. BASECLASS
  71308. RENDERPAGES
  71309. EXTENSIONHANDLER
  71310. PAINT
  71311. RELEASE
  71312. Release
  71313. 09.00.0000.1800
  71314. OREPORT
  71315. EXTENSIONHANDLER
  71316. RELEASE
  71317. SAVETORESOURCE
  71318. COMMANDCLAUSES
  71319. PRINTPAGECURRENT
  71320. CURRENTPAGE
  71321. ONPREVIEWCLOSE
  71322. PRINTONEXIT
  71323. SHOWCOMMANDWINDOW
  71324. HIDE4
  71325. THIS    
  71326. ZOOMLEVEL
  71327. ZOOMLEVELS
  71328. SYNCHCANVASES
  71329. INVOKECONTEXTMENUs
  71330. InitializeToolbar
  71331. There are no pages available to preview.
  71332. Report Preview
  71333. Report Preview
  71334. 09.00.0000.3301
  71335. ISTYLE
  71336. EXTENSIONHANDLER
  71337. INITIALIZETOOLBAR    
  71338. PAGETOTAL
  71339. OREPORT
  71340. OUTPUTPAGECOUNT
  71341. STARTOFFSET
  71342. CANVASCOUNT
  71343. ISNOWAIT
  71344. CAPTION
  71345. COMMANDCLAUSES
  71346. ISDESIGNERLOADED
  71347. WINDOW
  71348. PRINTJOBNAME
  71349. FRXFILENAME
  71350. FORMCAPTION
  71351. SETCURRENTPAGE
  71352. CURRENTPAGE
  71353. SHOWWINDOW
  71354. TOOLBARISVISIBLE
  71355. TOOLBAR
  71356. REFRESH
  71357. SHOWTOOLBAR
  71358. IWIDTH
  71359. IHEIGHT
  71360. GETPAGEWIDTH
  71361. GETPAGEHEIGHT    
  71362. PAGEWIDTH
  71363. PAGEHEIGHT
  71364. CREATECANVASES
  71365. SYNCHCANVASES    
  71366. MINBUTTON
  71367. HIDECOMMANDWINDOW
  71368. RENDERPAGES
  71369. INWINDOW
  71370. HandledError
  71371. IERROR
  71372. CMETHOD
  71373. ILINE
  71374. EXTENSIONHANDLER
  71375. HANDLEDERROR
  71376. actionclose,
  71377. actiongofirstp
  71378. actiongolast
  71379. actiongonext[
  71380. actiongoprev
  71381. actiongotopage\
  71382. actionprint
  71383. actionsetcanvascount
  71384. actionsetzoom
  71385. actiontoolbarvisibility3
  71386. invokecontextmenu
  71387. renderpage
  71388. setreportU
  71389. showtoolbar
  71390. synchcanvases
  71391. synchpagenoc
  71392. synchtoolbar
  71393. setcurrentpage
  71394. actionshowinfo
  71395. getzoompercent
  71396. renderpages$(
  71397. savetoresourceB*
  71398. restorefromresourcei0
  71399. getpixelsperdpi960\6
  71400. createtoolbar
  71401. extensionhandler_assign
  71402. getpixelpageoffsetsr8
  71403. showcommandwindow
  71404. hidecommandwindowI:
  71405. createcanvases
  71406. canvascount_assign
  71407. setzoomlevel
  71408. setcanvascountiA
  71409. MouseUp
  71410. HidewE
  71411. Activate
  71412. Deactivate=F
  71413. Destroy
  71414. InitnG
  71415. KeyPress
  71416. Paint
  71417. QueryUnload
  71418. Release
  71419. Resize
  71420. RightClick
  71421. Show3V
  71422. Error
  71423. PROCEDURE actionclose
  71424. *---------------------------------------------------------------
  71425. * .ActionClose() - called from toolbar/context menu
  71426. * The action we take depends on whether we're hiding or releasing...
  71427. *---------------------------------------------------------------
  71428. THIS.suppressRendering = .T.
  71429. THIS.Release()
  71430. ENDPROC
  71431. PROCEDURE actiongofirst
  71432. *--------------------------------------------------------------
  71433. * ActionGoFirst()
  71434. *--------------------------------------------------------------
  71435. THIS.setCurrentPage(1)
  71436. THIS.RenderPages()
  71437. THIS.synchToolbar()
  71438. ENDPROC
  71439. PROCEDURE actiongolast
  71440. *--------------------------------------------------------------
  71441. * ActionGoLast()
  71442. *--------------------------------------------------------------
  71443. THIS.setCurrentPage(THIS.pageTotal - (THIS.canvasCount - 1))
  71444. THIS.RenderPages()
  71445. THIS.synchToolbar()
  71446. ENDPROC
  71447. PROCEDURE actiongonext
  71448. *--------------------------------------------------------------
  71449. * ActionGoNext()
  71450. *--------------------------------------------------------------
  71451. if (THIS.currentPage + THIS.canvasCount > THIS.oReport.OutputPageCount)
  71452.     ?? chr(7)
  71453.     THIS.setCurrentPage( THIS.currentPage + THIS.canvasCount )
  71454.     if (THIS.oReport.OutputPageCount - THIS.currentPage) < (THIS.CanvasCount - 1)
  71455.         *------------------------------------------------
  71456.         * Clear the form to remove unused canvas images
  71457.         * that will not be re-rendered:
  71458.         *------------------------------------------------
  71459.         THIS.SuppressRendering = .T.
  71460.         THIS.Cls()
  71461.         THIS.SuppressRendering = .F.
  71462.     endif    
  71463.     THIS.RenderPages()
  71464.     THIS.synchToolbar()
  71465. endif
  71466. ENDPROC
  71467. PROCEDURE actiongoprev
  71468. *--------------------------------------------------------------
  71469. * ActionGoPrev()
  71470. *--------------------------------------------------------------
  71471. if THIS.currentPage > 1
  71472.     THIS.setCurrentPage( max( THIS.currentPage - THIS.canvasCount, 1 ))
  71473.     THIS.RenderPages()
  71474.     THIS.synchToolbar()
  71475.     ?? chr(7)
  71476. endif
  71477. ENDPROC
  71478. PROCEDURE actiongotopage
  71479. *-----------------------------------------------------------
  71480. * ActionGoToPage()
  71481. *-----------------------------------------------------------
  71482. #IF DEBUG_METHOD_LOGGING 
  71483.     debugout space(program(-1)) + "frxPreviewForm::ActionGoToPage()"
  71484. #ENDIF
  71485. local loForm, iPageNo
  71486. loForm = newobject("frxGoToPageForm","frxPreview.vcx")
  71487. *-----------------------------------------
  71488. * Fix for SP1: Pass it a ref to this form
  71489. * Addresses bug# 474691
  71490. * See frxGoToPageForm::Show()
  71491. *-----------------------------------------
  71492. loForm.oParentForm = THIS
  71493. THIS.ShowToolbar(.F.)
  71494. loForm.Show( WINDOWTYPE_MODAL )
  71495. THIS.ShowToolbar(.T.)
  71496. iPageNo = loForm.PageNo
  71497. release m.loForm
  71498. *------------------------------------
  71499. * Fix for SP1:
  71500. * Ensure this form gets keypresses
  71501. * after showing the child dialog:
  71502. *------------------------------------
  71503. activate Window (THIS.Name)
  71504. if m.iPageNo <> THIS.currentPage
  71505.     THIS.setCurrentPage( m.iPageNo )
  71506. endif
  71507. ENDPROC
  71508. PROCEDURE actionprint
  71509. *---------------------------------------------------------------
  71510. * ActionPrint() - called from toolbar or context menu
  71511. *---------------------------------------------------------------
  71512. *----------------------------------------------
  71513. * Enhancement for SP2:
  71514. *----------------------------------------------
  71515. if version(4) > "09.00.0000.3504" 
  71516.     *----------------------------------------------------
  71517.     * SP2 behavior: If NOWAIT, print without terminating:
  71518.     *----------------------------------------------------
  71519.     if THIS.oReport.commandClauses.NOWAIT
  71520.         THIS.oReport.PrintCachedPages()    
  71521.     else
  71522.         * Terminate:
  71523.         THIS.suppressRendering = .T.
  71524.         THIS.printOnExit       = .T.
  71525.         THIS.Release()
  71526.     endif
  71527.     *----------------------------------------------------
  71528.     * Pre-SP2 behavior: terminate:
  71529.     *----------------------------------------------------
  71530.     THIS.suppressRendering = .T.
  71531.     THIS.printOnExit       = .T.
  71532.     THIS.Release()
  71533. endif
  71534. ENDPROC
  71535. PROCEDURE actionsetcanvascount
  71536. *-----------------------------------------------------
  71537. * ActionSetCanvasCount()
  71538. *-----------------------------------------------------
  71539. lparameter iCount
  71540. #IF DEBUG_METHOD_LOGGING 
  71541.     debugout space(program(-1)) + "frxPreviewForm::ActionSetCanvasCount()"
  71542. #ENDIF
  71543. THIS.SetCanvasCount( m.iCount )
  71544. return
  71545. ENDPROC
  71546. PROCEDURE actionsetzoom
  71547. *-----------------------------------------------------
  71548. * ActionSetZoom()
  71549. *-----------------------------------------------------
  71550. lparameters iZoomLevel
  71551. #IF DEBUG_METHOD_LOGGING 
  71552.     debugout space(program(-1)) + "frxPreviewForm::ActionSetZoom()"
  71553. #ENDIF
  71554. THIS.SetZoomLevel( m.iZoomLevel )
  71555. return
  71556. ENDPROC
  71557. PROCEDURE actiontoolbarvisibility
  71558. *--------------------------------------------------
  71559. * .ActionToolbarVisibility() - called from menu
  71560. *--------------------------------------------------
  71561. if isnull( THIS.toolbar )
  71562.     THIS.ToolbarIsVisible = .F.
  71563.     THIS.CreateToolbar()
  71564. endif        
  71565. if THIS.ToolbarIsVisible 
  71566.     * Hide the toolbar:
  71567.     THIS.Toolbar.Hide()
  71568.     THIS.ToolbarIsVisible = .F.
  71569.     * Show the toolbar:
  71570.     THIS.ShowToolbar(.T.)    
  71571.     THIS.ToolbarIsVisible = .T.
  71572. endif
  71573. ENDPROC
  71574. PROCEDURE invokecontextmenu
  71575. *=======================================================================
  71576. * .InvokeContextMenu()
  71577. * Show the default context menu for the preview window:
  71578. *=======================================================================
  71579. lparameter lViaKeypress
  71580. #IF DEBUG_METHOD_LOGGING 
  71581.     debugout space(program(-1)) + "frxPreviewForm::InvokeContextMenu()"
  71582. #ENDIF
  71583. THIS.AllowOutput = .T.
  71584. activate window (THIS.Name)
  71585. *----------------------------------------------
  71586. * Enh for SP2: oPreviewContainer is also available
  71587. *----------------------------------------------
  71588. private oRef, oPreviewContainer
  71589. store THIS to ;
  71590.     oRef, oPreviewContainer
  71591. local cShortcut, cZoom, cPages
  71592. cShortcut = sys(2015)
  71593. cZoom     = sys(2015)
  71594. cPages    = sys(2015)
  71595. if oRef.ShowWindow = SHOWWINDOW_AS_TOPFORM
  71596.     if m.lViaKeypress
  71597.         define popup (m.cShortcut) ;
  71598.             shortcut ;
  71599.             relative ;
  71600.             in window (oRef.Name) ;
  71601.             from 1,1
  71602.     else
  71603.         define popup (m.cShortcut) ;
  71604.             shortcut ;
  71605.             relative ;
  71606.             in window (oRef.Name) ;            
  71607.             from mrow(oRef.Name),mcol(oRef.Name)            
  71608.     endif    
  71609.     if m.lViaKeypress
  71610.         *-------------------------------
  71611.         * Fix in SP1: no in window clause 
  71612.         *-------------------------------
  71613.         define popup (m.cShortcut) ;
  71614.             shortcut ;
  71615.             relative ;
  71616.             from 1,1
  71617.     else
  71618.         define popup (m.cShortcut) ;
  71619.             shortcut ;
  71620.             relative ;
  71621.             from mrow(), mcol()
  71622.     endif
  71623. endif
  71624. if (THIS.currentPage > THIS.canvasCount )
  71625.     DEFINE BAR 1 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_FIRST_PAGE_LOC  picture "prefirst.bmp"
  71626.     DEFINE BAR 2 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_PREVIOUS_LOC    picture "preprev.bmp"
  71627.     DEFINE BAR 1 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_FIRST_PAGE_LOC  picture "prefirst.bmp"
  71628.     DEFINE BAR 2 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_PREVIOUS_LOC    picture "preprev.bmp"
  71629. endif
  71630. if ( THIS.currentPage < (THIS.pageTotal - (THIS.canvasCount-1) )) 
  71631.     DEFINE BAR 3 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_NEXT_LOC        picture "prenext.bmp"
  71632.     DEFINE BAR 4 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_LAST_PAGE_LOC   picture "prelast.bmp"
  71633.     DEFINE BAR 3 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_NEXT_LOC       picture "prenext.bmp"
  71634.     DEFINE BAR 4 OF (m.cShortcut) PROMPT "\"+CONTEXT_MENU_PROMPT_LAST_PAGE_LOC  picture "prelast.bmp"
  71635. endif
  71636. DEFINE BAR 5 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_GO_TO_PAGE_LOC
  71637. DEFINE BAR 6 OF (m.cShortcut) PROMPT "\-"
  71638. DEFINE BAR 7 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_ZOOM_LOC  picture "preview.bmp"
  71639. DEFINE BAR 8 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_PAGES_TO_DISPLAY_LOC 
  71640. DEFINE BAR 9 OF (m.cShortcut) PROMPT "\-"
  71641. DEFINE BAR 10 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_TOOLBAR_LOC 
  71642. if isnull( THIS.toolbar ) or THIS.ToolbarIsVisible = .F.
  71643.     set Mark of bar 10 of (m.cShortcut) to .F.
  71644.     set Mark of bar 10 of (m.cShortcut) to .T.
  71645. endif        
  71646. *----------------------------------------------
  71647. * Fix for versions earlier than SP1: Bug# 475109
  71648. *----------------------------------------------
  71649. if version(4) < "09.00.0000.3301"
  71650.     if oRef.WindowType = WINDOWTYPE_MODAL and ;
  71651.        oRef.ShowWindow = SHOWWINDOW_IN_TOPFORM and ;
  71652.        not empty(wparent(THIS.Name))
  71653.         * if we are modal and inside a topform app,
  71654.         * the toolbar will be unavailable, so don't 
  71655.         * let it be shown:
  71656.        set Skip of bar 10 of (m.cShortCut) .T.
  71657.     endif
  71658. endif
  71659. DEFINE BAR 11 OF (m.cShortcut) PROMPT "\-"
  71660. DEFINE BAR 12 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_PRINT_LOC  picture "print.bmp"
  71661. DEFINE BAR 13 OF (m.cShortcut) PROMPT CONTEXT_MENU_PROMPT_CLOSE_LOC  picture "preclose.bmp"
  71662. ON SELECTION BAR 1 OF (m.cShortcut) oRef.actionGoFirst()
  71663. ON SELECTION BAR 2 OF (m.cShortcut) oRef.actionGoPrev()
  71664. ON SELECTION BAR 3 OF (m.cShortcut) oRef.actionGoNext()
  71665. ON SELECTION BAR 4 OF (m.cShortcut) oRef.actionGoLast()
  71666. ON SELECTION BAR 5 OF (m.cShortcut) oRef.actionGoToPage()
  71667. ON BAR 7 OF (m.cShortcut) ACTIVATE POPUP &cZoom
  71668. ON BAR 8 OF (m.cShortcut) ACTIVATE POPUP &cPages
  71669. ON SELECTION BAR 10 OF (m.cShortcut) oRef.actionToolbarVisibility()
  71670. ON SELECTION BAR 12 OF (m.cShortcut) oRef.actionPrint()
  71671. ON SELECTION BAR 13 OF (m.cShortcut) oRef.actionClose()
  71672. *------------------------------------------------------
  71673. * Fix for SP1: include "About..." option if via keypress
  71674. *------------------------------------------------------
  71675. if DEBUG_MENU_INFO_OPTION or m.lViaKeypress
  71676.     DEFINE Bar 14 of (m.cShortcut) prompt CONTEXT_MENU_PROMPT_INFODEBUG_LOC 
  71677.     ON SELECTION BAR 14 OF (m.cShortcut) oRef.actionShowInfo()
  71678. endif
  71679. if not THIS.AllowPrintFromPreview
  71680.     release bar 12 of (m.cShortcut)
  71681. endif
  71682. *------------------------------- Set the mark:
  71683. set Mark of bar 10 of (m.cShortcut) to oRef.ToolbarIsVisible
  71684. *------------------------------------------------------
  71685. * Define the Page Count popup:
  71686. *------------------------------------------------------
  71687. DEFINE POPUP (m.cZoom) SHORTCUT RELATIVE
  71688. local i
  71689. for i = 1 to alen(THIS.zoomLevels,1)
  71690.     define Bar m.i of(m.cZoom) prompt THIS.zoomLevels[m.i,ZOOM_LEVEL_PROMPT]
  71691.     on Selection Bar m.i of (m.cZoom) oref.actionSetZoom( bar() )
  71692. endfor
  71693. *---------------------- Set the mark:
  71694. set mark of bar (THIS.ZoomLevel) of (m.cZoom) to .T.
  71695. *------------------------------------------------------
  71696. * Define the Page Count popup:
  71697. *------------------------------------------------------
  71698. DEFINE POPUP (m.cPages) SHORTCUT RELATIVE
  71699. DEFINE BAR 1 OF (m.cPages) PROMPT CONTEXT_MENU_PROMPT_1PAGE_LOC
  71700. *---------------------- Disable multi-page view for high zoom levels:
  71701. local iPagesAllowed
  71702. iPagesAllowed = THIS.zoomLevels[ THIS.zoomLevel, ZOOM_LEVEL_CANVAS ]
  71703. if m.iPagesAllowed > 1
  71704.     DEFINE BAR 2 OF (m.cPages) PROMPT CONTEXT_MENU_PROMPT_2PAGES_LOC 
  71705.     DEFINE BAR 2 OF (m.cPages) PROMPT "\"+CONTEXT_MENU_PROMPT_2PAGES_LOC 
  71706. endif
  71707. if m.iPagesAllowed > 2
  71708.     DEFINE BAR 3 OF (m.cPages) PROMPT CONTEXT_MENU_PROMPT_4PAGES_LOC
  71709.     DEFINE BAR 3 OF (m.cPages) PROMPT "\"+CONTEXT_MENU_PROMPT_4PAGES_LOC
  71710. endif
  71711. ON SELECTION BAR 1 OF (m.cPages) oRef.actionSetCanvasCount(1)
  71712. ON SELECTION BAR 2 OF (m.cPages) oRef.actionSetCanvasCount(2)
  71713. ON SELECTION BAR 3 OF (m.cPages) oRef.actionSetCanvasCount(4)
  71714. *---------------------- Set the mark:
  71715. do case
  71716. case THIS.canvasCount = 1
  71717.     set Mark of bar 1 of (m.cPages) to .T.
  71718. case THIS.canvasCount = 2
  71719.     set Mark of bar 2 of (m.cPages) to .T.
  71720. case THIS.canvasCount = 4
  71721.     set Mark of bar 3 of (m.cPages) to .T.
  71722. endcase
  71723. *---------------------------------------------------
  71724. * Plug in extension handler:
  71725. *------------------------------------------------------
  71726. if not isnull( THIS.Extensionhandler )
  71727.     *-----------------------------------
  71728.     * Fixed for SP1: Only invoke the method 
  71729.     * if it is defined:
  71730.     *-----------------------------------
  71731.     if pemstatus( THIS.ExtensionHandler, "AddBarsToMenu", 5 )    
  71732.         #IF DEBUG_METHOD_LOGGING 
  71733.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::AddBarsToMenu()"
  71734.         #ENDIF
  71735.         *---------------------------------------------
  71736.         * The form is available in commands as m.oRef
  71737.         *---------------------------------------------
  71738.         THIS.ExtensionHandler.AddBarsToMenu( m.cShortcut, 15 )
  71739.     endif
  71740. endif
  71741. *----------------------------------------------
  71742. * Fix in SP3
  71743. * See previewForm.MouseUp for code that respects this:
  71744. *----------------------------------------------
  71745. THIS.IgnoreMouseClickInMagnifyCode = .T.
  71746. #IF DEBUG_METHOD_LOGGING 
  71747.     debugout space(program(-1)) + " activating popup " + m.cShortcut
  71748. #ENDIF
  71749. *------------------------------------------------------
  71750. * Display the menu:
  71751. *------------------------------------------------------
  71752. activate popup (m.cShortcut)
  71753. #IF DEBUG_METHOD_LOGGING 
  71754.     debugout space(program(-1)) + " releasing popup"
  71755. #ENDIF
  71756. *------------------------------------------------------
  71757. *  Cleanup:
  71758. *------------------------------------------------------
  71759. release popup (m.cShortcut)
  71760. release popup (m.cPages)
  71761. release popup (m.cZoom)
  71762. THIS.AllowOutput = .F.
  71763. ENDPROC
  71764. PROCEDURE renderpage
  71765. *---------------------------------------------------------
  71766. * .RenderPage()
  71767. * New in SP2: Support for Image canvas classes.
  71768. *---------------------------------------------------------
  71769. lparameters iPage, oCanvas
  71770. #IF DEBUG_METHOD_LOGGING 
  71771.     debugout space(program(-1)) + "frxPreviewForm::RenderPage("+ trans( m.iPage ) + ")"
  71772. #ENDIF
  71773. if between( m.iPage, 1, THIS.oReport.OutputPageCount )
  71774.         if m.oCanvas.BaseClass = "Image" and m.oCanvas.Visible = .F.
  71775.             oCanvas.Visible = .T.
  71776.         endif
  71777.         THIS.oReport.OutputPage( m.iPage, m.oCanvas, 2 )
  71778.     catch to oErr
  71779.         =messagebox( RP_OUTPUTPAGE_ERROR_LOC + c_CR2 + oErr.Message, 0+16, DEFAULT_MBOX_TITLE_LOC )
  71780.     endtry
  71781.     if oCanvas.BaseClass = "Image"
  71782.         oCanvas.Visible = .F.
  71783.     endif
  71784. endif
  71785. ENDPROC
  71786. PROCEDURE setreport
  71787. *---------------------------------------------------------------
  71788. * This method will be called by the report engine, giving the 
  71789. * PreviewUI a reference to the Listener so that it can invoke 
  71790. * rendering methods to render the pages. This reference will 
  71791. * need to be saved in an internal property, and nulled out 
  71792. * appropriately in the .Destroy() event.
  71793. *---------------------------------------------------------------
  71794. parameter toReport
  71795. #IF DEBUG_METHOD_LOGGING 
  71796.     debugout space(program(-1)) + "frxPreviewForm::SetReport(" + trans(m.toReport) + ")"
  71797. #ENDIF
  71798. if  not isnull( m.toReport )  and ;
  71799.     vartype( m.toReport ) = "O" 
  71800.     *-----------------------------------------------
  71801.     * Change in SP2: This is no longer a constraint:
  71802.     *-----------------------------------------------
  71803.     * and toReport.BaseClass = "Reportlistener"
  71804.     *-----------------------------------
  71805.     * it's a valid Report Listener:
  71806.     *-----------------------------------
  71807.     THIS.oReport = m.toReport
  71808.     *-------------------------------
  71809.     * What report file are we running?
  71810.     *-------------------------------
  71811.     THIS.frxFilename = lower(justfname( THIS.oReport.commandclauses.file ))
  71812.     *-----------------------------------
  71813.     * Cleanup:
  71814.     *-----------------------------------
  71815.     THIS.oReport = .NULL.
  71816.     *---------------------------------------
  71817.     * Without a reportListener to communicate with,
  71818.     * We have no reason to be visible:
  71819.     *---------------------------------------
  71820.     THIS.Hide()
  71821. endif
  71822. ENDPROC
  71823. PROCEDURE showtoolbar
  71824. *---------------------------------------------------------------
  71825. * ShowToolbar() - called from .Show()
  71826. *---------------------------------------------------------------
  71827. lparameter lEnabled
  71828. #IF DEBUG_METHOD_LOGGING 
  71829.     debugout space(program(-1)) + "frxPreviewForm::ShowToolbar(" + trans(m.lEnabled) + ")"
  71830. #ENDIF
  71831. if m.lEnabled
  71832.     * Show the toolbar, enabled and visible
  71833.     * Enable controls on the toolbar:
  71834.     local x
  71835.     for each x in THIS.toolbar.Controls
  71836.         x.Enabled = .T.
  71837.     endfor
  71838.     THIS.synchToolbar()
  71839.     *------------------------------------------
  71840.     * Support for topforms:
  71841.     *------------------------------------------
  71842.     if THIS.ShowWindow = SHOWWINDOW_AS_TOPFORM
  71843.         * Topforms are always modeless:
  71844.         if not upper(wontop())==upper(THIS.Name)
  71845.             activate window (THIS.Name) 
  71846.         endif
  71847.         activate Window (THIS.toolbar.caption) in window (this.Name)
  71848.         *------------------------------------------
  71849.         * Dock the toolbar if we're a topform:
  71850.         *------------------------------------------
  71851.         this.toolbar.dock(0)
  71852.     else
  71853.         this.toolbar.Show()
  71854.     endif
  71855.     *-----------------------------------
  71856.     * Disable controls on the toolbar:
  71857.     *-----------------------------------
  71858.     local x
  71859.     for each x in THIS.toolbar.Controls
  71860.         x.Enabled = .F.
  71861.     endfor
  71862. endif
  71863. ENDPROC
  71864. PROCEDURE synchcanvases
  71865. *---------------------------------
  71866. * SynchCanvases() - 
  71867. * re-arrange the Shapes on the page to match the 
  71868. * current settings:
  71869. *---------------------------------
  71870. #IF DEBUG_METHOD_LOGGING 
  71871.     debugout space(program(-1)) + "frxPreviewForm::SynchCanvases()"
  71872. #ENDIF
  71873. with THIS
  71874.     *-----------------------------------------------------
  71875.     * Prevent .RenderPages() from being called from within
  71876.     * the .Paint() event:
  71877.     *-----------------------------------------------------
  71878.     .SuppressRendering = .T.
  71879.     *-----------------------------------------------------
  71880.     * Use a spacer to allow the scrolling to have a 
  71881.     * a border to the right and bottom of the window:
  71882.     *-----------------------------------------------------
  71883.     .Spacer.BackColor = .BackColor
  71884.     .Spacer.Width  = CANVAS_LEFT_OFFSET_PIXELS
  71885.     .Spacer.Height = CANVAS_TOP_OFFSET_PIXELS
  71886.     local iLeft, iWidth, iHeight, iZoomPercent
  71887.     iZoomPercent = THIS.getZoomPercent()
  71888.     iWidth       = int( .pageWidth  * .screenDPI * (m.iZoomPercent/100) )
  71889.     iHeight      = int( .pageHeight * .screenDPI * (m.iZoomPercent/100) )
  71890.     do case
  71891.     case THIS.ZoomLevel < alen(THIS.zoomLevels,1)-1
  71892.         *---------------------------------------------------
  71893.         * Enable scrollbars for arbitary zoom:
  71894.         *---------------------------------------------------
  71895.         if THIS.ScrollBars <> 3
  71896.             THIS.ScrollBars = 3
  71897.         endif
  71898.     case THIS.ZoomLevel = alen(THIS.ZoomLevels,1)-1
  71899.         *---------------------------------------------------
  71900.         * Turn off scrollbars for fit to page
  71901.         *---------------------------------------------------
  71902.         if THIS.ScrollBars > 0
  71903.             THIS.ScrollBars = 0
  71904.         endif
  71905.     otherwise
  71906.         *---------------------------------------------------
  71907.         * Just vertical for fit to width
  71908.         *---------------------------------------------------
  71909.         if THIS.ScrollBars <> 2
  71910.             THIS.ScrollBars = 2    
  71911.         endif
  71912.     endcase
  71913.     *--------------------------------
  71914.     * Arrange the shapes on the page:
  71915.     *  [1][2]
  71916.     *  [3][4]
  71917.     *--------------------------------
  71918.     do case
  71919.     case .canvasCount = 1
  71920.         if this.Canvas1.Baseclass = "Image"
  71921.             store .T. to this.Canvas1.Visible
  71922.             store .F. to ;
  71923.                 this.Canvas2.Visible,;
  71924.                 this.Canvas3.Visible,;
  71925.                 this.Canvas4.Visible
  71926.         endif                
  71927.         if THIS.zoomLevel = alen(THIS.zoomLevels,1)
  71928.             *-------------------------------------------
  71929.             * Auto-zoom mode, center the page:
  71930.             *-------------------------------------------
  71931.             iLeft = int((.Width - m.iWidth)/2)
  71932.         else
  71933.             iLeft = CANVAS_LEFT_OFFSET_PIXELS
  71934.         endif
  71935.         .canvas1.Move(  m.iLeft, ;
  71936.                         CANVAS_TOP_OFFSET_PIXELS, ;
  71937.                         m.iWidth, m.iHeight )
  71938.         .spacer.Move( m.iLeft + m.iWidth, CANVAS_TOP_OFFSET_PIXELS + m.iHeight )
  71939.     case .canvasCount = 2
  71940.         if this.Canvas1.Baseclass = "Image"
  71941.             store .T. to ;
  71942.                 this.Canvas1.Visible, ;
  71943.                 this.Canvas2.Visible
  71944.             store .F. to ;
  71945.                 this.Canvas3.Visible,;
  71946.                 this.Canvas4.Visible
  71947.         endif
  71948.         .canvas1.Move(  CANVAS_LEFT_OFFSET_PIXELS, ;
  71949.                         CANVAS_TOP_OFFSET_PIXELS, ;
  71950.                         m.iWidth, m.iHeight )
  71951.         .canvas2.Move(  CANVAS_LEFT_OFFSET_PIXELS + m.iWidth + CANVAS_HORIZONTAL_GAP_PIXELS, ;
  71952.                         CANVAS_TOP_OFFSET_PIXELS, ;
  71953.                         m.iWidth, m.iHeight )
  71954.         .spacer.Move(     .canvas2.Left + .canvas2.Width, ;
  71955.                         .canvas2.Top + .canvas2.Height )    
  71956.     case .canvasCount = 4
  71957.         if this.Canvas1.Baseclass = "Image"
  71958.             store .T. to ;
  71959.                 this.Canvas1.Visible, ;
  71960.                 this.Canvas2.Visible, ;
  71961.                 this.Canvas3.Visible, ;
  71962.                 this.Canvas4.Visible
  71963.         endif                
  71964.         .canvas1.Move(  CANVAS_LEFT_OFFSET_PIXELS, ;
  71965.                         CANVAS_TOP_OFFSET_PIXELS, ;
  71966.                         m.iWidth, m.iHeight )
  71967.         .canvas2.Move(  CANVAS_LEFT_OFFSET_PIXELS + m.iWidth + CANVAS_HORIZONTAL_GAP_PIXELS, ;
  71968.                         CANVAS_TOP_OFFSET_PIXELS, ;
  71969.                         m.iWidth, m.iHeight )
  71970.         .canvas3.Move(    CANVAS_LEFT_OFFSET_PIXELS, ;
  71971.                         CANVAS_TOP_OFFSET_PIXELS + m.iHeight + CANVAS_VERTICAL_GAP_PIXELS, ;
  71972.                         m.iWidth, m.iHeight )
  71973.         .canvas4.Move(  CANVAS_LEFT_OFFSET_PIXELS + m.iWidth + CANVAS_HORIZONTAL_GAP_PIXELS, ;
  71974.                         CANVAS_TOP_OFFSET_PIXELS + m.iHeight + CANVAS_VERTICAL_GAP_PIXELS, ;
  71975.                         m.iWidth, m.iHeight )
  71976.         .spacer.Move(  .canvas4.Left + .canvas4.Width, ;
  71977.                        .canvas4.Top + .canvas4.Height )
  71978.     endcase    
  71979.     .SuppressRendering = .F.
  71980. endwith
  71981. ENDPROC
  71982. PROCEDURE synchpageno
  71983. *-----------------------------------------------
  71984. * .SynchPageNo()
  71985. *-----------------------------------------------
  71986. local iCurrentPage
  71987. iCurrentPage = THIS.currentPage + THIS.startOffset
  71988. #IF DEBUG_METHOD_LOGGING 
  71989.     debugout space(program(-1)) + "frxPreviewForm::SynchPageNo()"
  71990. #ENDIF
  71991. *-----------------------------------
  71992. * Fix for SP2: 
  71993. * Only enhance the preview window title caption
  71994. * if user has not specfied a target window:
  71995. *-----------------------------------
  71996. if empty( THIS.oReport.commandClauses.Window )
  71997.     if THIS.canvasCount > 1
  71998.         local lastPage
  71999.         lastPage  = min( m.iCurrentPage+THIS.canvasCount-1, THIS.pagetotal )
  72000.         THIS.Caption = THIS.formCaption ;
  72001.                      + REPORT_PREVIEW_PAGE_CAPTION ;
  72002.                      + transform( m.iCurrentPage ) + " - " + transform( m.lastPage )
  72003.     else
  72004.         THIS.Caption = THIS.formCaption ;
  72005.                      + REPORT_PREVIEW_PAGE_CAPTION ;
  72006.                      + transform( m.iCurrentPage )
  72007.     endif
  72008. endif
  72009. ENDPROC
  72010. PROCEDURE synchtoolbar
  72011. *----------------------------------------------------------
  72012. * .SynchToolbar()
  72013. *----------------------------------------------------------
  72014. #IF DEBUG_METHOD_LOGGING 
  72015.     debugout space(program(-1)) + "frxPreviewForm::SynchToolbar()"
  72016. #ENDIF
  72017. if not isnull( THIS.toolbar )
  72018.     THIS.toolbar.SynchControls()
  72019. endif
  72020. ENDPROC
  72021. PROCEDURE setcurrentpage
  72022. *----------------------------------------------------------------------
  72023. * .SetCurrentPage() - 
  72024. *----------------------------------------------------------------------
  72025. lparameter iPage
  72026. #IF DEBUG_METHOD_LOGGING 
  72027.     debugout space(program(-1)) + "frxPreviewForm::SetCurrentPage()"
  72028. #ENDIF
  72029. if THIS.CurrentPage <> m.iPage
  72030.     if between( m.iPage, 1, THIS.oReport.OutputPageCount )
  72031.         THIS.currentPage = m.iPage
  72032.         THIS.synchPageNo()    
  72033.         * Fix in SP2: Add call to RenderPages:
  72034.         THIS.RenderPages()
  72035.         THIS.SynchToolbar()
  72036.     endif
  72037.     * Fix in SP2: update the caption on the first display:
  72038.     THIS.SynchPageNo()
  72039. endif
  72040. ENDPROC
  72041. PROCEDURE actionshowinfo
  72042. *=======================================================
  72043. * ToString()
  72044. * Returns a string representation of the event properties.
  72045. *=======================================================
  72046. local cText
  72047. cText = ""
  72048. cText = m.cText + "Preview version: " + PREVIEW_VERSION + chr(13) + chr(13)
  72049. cText = m.cText + ".pageTotal   = " + transform(THIS.pageTotal)   + chr(13) 
  72050. cText = m.cText + ".currentPage = " + transform(THIS.currentPage) + chr(13)
  72051. cText = m.cText + ".canvasCount = " + transform(THIS.canvasCount) + chr(13)
  72052. cText = m.cText + ".pageHeight  = " + transform(THIS.pageHeight) + chr(13)
  72053. cText = m.cText + ".pageWidth   = " + transform(THIS.pageWidth)  + chr(13)
  72054. cText = m.cText + "_PAGENO      = " + transform(_PAGENO) + chr(13) + chr(13)
  72055. cText = m.cText + "THIS.oReport.commandClauses:" + chr(13)
  72056. amembers( ac, this.oReport.commandClauses )
  72057. for each cField in ac
  72058.     cText = m.cText + "  " + m.cField+ " = " + trans(eval("THIS.oReport.commandClauses."+trim(m.cField))) + chr(13)
  72059. endfor
  72060. =messagebox(m.cText,64, DEFAULT_MBOX_TITLE_LOC )
  72061. return m.cText
  72062. ENDPROC
  72063. PROCEDURE getzoompercent
  72064. *-----------------------------------------------------------------------
  72065. * adjust this to suit THIS.zoomLevels[] array
  72066. *-----------------------------------------------------------------------
  72067. local iZoomPercent
  72068. do case
  72069. case THIS.zoomLevel < alen(THIS.zoomLevels,1)-1
  72070.     *---------------------------------------------------
  72071.     * Use a preset percentage
  72072.     *---------------------------------------------------
  72073.     iZoomPercent = THIS.zoomLevels[ THIS.zoomLevel,ZOOM_LEVEL_PERCENT] 
  72074. case THIS.ZoomLevel = alen(THIS.zoomLevels,1)-1    
  72075.     *---------------------------------------------------
  72076.     * Calculate zoom percent from current window size:
  72077.     * to procure a "fit to page" effect.
  72078.     * depends on:
  72079.     *   - page aspect ratio
  72080.     *   - .pageWidth   in inches
  72081.     *   - .pageHeight  in inches
  72082.     *    - .canvasCount 
  72083.     *    - form aspect ratio
  72084.     *    - .Width       of form in pixels
  72085.     *   - .Height      of form in pixels
  72086.     *    CANVAS_TOP_OFFSET_PIXELS          15        
  72087.     *    CANVAS_LEFT_OFFSET_PIXELS         15
  72088.     *    CANVAS_VERTICAL_GAP_PIXELS        10
  72089.     *    CANVAS_HORIZONTAL_GAP_PIXELS      10
  72090.     *    
  72091.     *---------------------------------------------------
  72092.     local nPreviewFormAspectRatio, nPageAspectRatio
  72093.     local iRequiredHeight, iRequiredWidth
  72094.     nPreviewFormAspectRatio = THIS.Width/THIS.Height
  72095.     if THIS.canvasCount = 2
  72096.         * Two pages aside:
  72097.         nPageAspectRatio        = (THIS.PageWidth*2)/THIS.PageHeight
  72098.     else
  72099.         nPageAspectRatio        = THIS.PageWidth/THIS.PageHeight
  72100.     endif    
  72101.     do case
  72102.     case m.nPreviewFormAspectRatio <= m.nPageAspectRatio
  72103.         * Preview Form is taller, skinnier than the pages
  72104.         * limit by page width:    
  72105.         do case
  72106.         case THIS.canvasCount = 1
  72107.             iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2)
  72108.             iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  72109.         case THIS.canvasCount = 2
  72110.             iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  72111.             iRequiredWidth = int(m.iRequiredWidth/2)
  72112.             iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  72113.         case THIS.canvasCount = 4
  72114.             iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  72115.             iRequiredWidth = int(m.iRequiredWidth/2)
  72116.             iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  72117.         endcase        
  72118.     case m.nPreviewFormAspectRatio > m.nPageAspectRatio
  72119.         * pages are taller, skinnier than preview area.
  72120.         * limit by page height:    
  72121.         do case
  72122.         case THIS.canvasCount = 1
  72123.             iRequiredHeight = THIS.Height - ( CANVAS_TOP_OFFSET_PIXELS * 2 )
  72124.             iZoomPercent =     (m.iRequiredHeight * 100)/(THIS.pageHeight * .screenDPI)
  72125.         case THIS.canvasCount = 2
  72126.             iRequiredHeight = THIS.Height - ( CANVAS_TOP_OFFSET_PIXELS * 2 )
  72127.             iZoomPercent =     (m.iRequiredHeight * 100)/(THIS.pageHeight * .screenDPI)
  72128.         case THIS.canvasCount = 4
  72129.             iRequiredHeight = THIS.Height - ( CANVAS_TOP_OFFSET_PIXELS * 2 ) - CANVAS_VERTICAL_GAP_PIXELS
  72130.             iRequiredHeight = int(m.iRequiredHeight/2)        
  72131.             iZoomPercent =     (m.iRequiredHeight * 100)/(THIS.pageHeight * .screenDPI)
  72132.         endcase        
  72133.     endcase
  72134. otherwise
  72135.     *---------------------------------------------------
  72136.     * Calculate zoom percent from current window width:
  72137.     *---------------------------------------------------
  72138.     local iRequiredHeight, iRequiredWidth
  72139.     do case
  72140.     case THIS.canvasCount = 1
  72141.         iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2)
  72142.         iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  72143.     case THIS.canvasCount = 2
  72144.         iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  72145.         iRequiredWidth = int(m.iRequiredWidth/2)
  72146.         iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  72147.     case THIS.canvasCount = 4
  72148.         iRequiredWidth = THIS.Width - (CANVAS_LEFT_OFFSET_PIXELS * 2) - CANVAS_HORIZONTAL_GAP_PIXELS
  72149.         iRequiredWidth = int(m.iRequiredWidth/2)
  72150.         iZoomPercent =     (m.iRequiredWidth * 100)/(THIS.pageWidth  * .screenDPI)
  72151.     endcase        
  72152. endcase
  72153. return m.iZoomPercent
  72154. ENDPROC
  72155. PROCEDURE renderpages
  72156. if THIS.suppressRendering
  72157.     return 
  72158. endif
  72159. #IF DEBUG_METHOD_LOGGING 
  72160.     debugout space(program(-1)) + "frxPreviewForm::RenderPages()"
  72161. #ENDIF
  72162. local iPageToRender
  72163. iPageToRender = THIS.currentPage
  72164. do case
  72165. case THIS.canvasCount = 1
  72166.     THIS.RenderPage( m.iPageToRender,   THIS.canvas1 )
  72167. case THIS.canvasCount = 2
  72168.     THIS.RenderPage( m.iPageToRender,   THIS.canvas1 )
  72169.     THIS.RenderPage( m.iPageToRender+1, THIS.canvas2 )
  72170. case THIS.canvasCount = 4
  72171.     THIS.RenderPage( m.iPageToRender,   THIS.canvas1 )
  72172.     THIS.RenderPage( m.iPageToRender+1, THIS.canvas2 )
  72173.     THIS.RenderPage( m.iPageToRender+2, THIS.canvas3 )
  72174.     THIS.RenderPage( m.iPageToRender+3, THIS.canvas4 )
  72175. endcase
  72176. if not isnull( THIS.Extensionhandler )
  72177.     *-----------------------------------
  72178.     * New in SP2: 
  72179.     *-----------------------------------
  72180.     if pemstatus( THIS.ExtensionHandler, "RenderPages", 5 )    
  72181.         #IF DEBUG_METHOD_LOGGING 
  72182.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::RenderPages()"
  72183.         #ENDIF    
  72184.         THIS.ExtensionHandler.RenderPages()
  72185.     endif
  72186. endif
  72187. ENDPROC
  72188. PROCEDURE savetoresource
  72189. #IF DEBUG_METHOD_LOGGING 
  72190.     debugout space(program(-1)) + "frxPreviewForm::SaveToResource()"
  72191. #ENDIF
  72192. *--------------------------------------------------------------
  72193. * Turn off the cursor notification in the status bar:
  72194. *--------------------------------------------------------------
  72195. local lSetNotify, lSetNotify2, lSetTalk
  72196. lSetNotify  = (set("NOTIFY",1) = "ON")
  72197. lSetNotify2 = (set("NOTIFY")   = "ON")
  72198. lSetTalk    = (set("TALK")     = "ON")
  72199. if m.lSetNotify
  72200.     set notify cursor off
  72201. endif
  72202. if m.lSetNotify
  72203.     set notify off
  72204. endif
  72205. if m.lSetTalk
  72206.     set talk off
  72207. endif
  72208. local x, iCurrentState
  72209. x = newobject( "ResourceManager", FRXCOMMON_PRG_CLASSLIB )
  72210. iCurrentState = THIS.WindowState
  72211. if THIS.WindowState <> 0
  72212.     THIS.WindowState = 0
  72213. endif
  72214. if x.LoadResource( REPORTPREVIEW_RESOURCE_ID, upper(THIS.FrxFileName) )
  72215.     if not THIS.oReport.commandClauses.isDesignerLoaded
  72216.         x.Set("PreviewForm.Top",    THIS.Top )
  72217.         x.Set("PreviewForm.Left",   THIS.Left )
  72218.         *------------------------------------------
  72219.         * Fix for SP2:
  72220.         * form width,height does not include width
  72221.         * of scrollbars, if visible. Therefore add
  72222.         * back into saved value if applicable:
  72223.         *------------------------------------------
  72224.         if (THIS.Width < THIS.ViewPortWidth)
  72225.             * Vertical Scrollbar is visible. Add to window size:
  72226.             x.Set("PreviewForm.Width",  THIS.Width + sysmetric(5) )
  72227.         else
  72228.             x.Set("PreviewForm.Width",  THIS.Width )
  72229.         endif
  72230.         if (THIS.Height < THIS.ViewPortHeight)
  72231.             * Horizontal Scrollbar is visible. Add to window size:
  72232.             x.Set("PreviewForm.Height", THIS.Height + sysmetric(8) )
  72233.         else
  72234.             x.Set("PreviewForm.Height", THIS.Height )
  72235.         endif
  72236.         *-------------------------------------
  72237.     endif
  72238.     x.Set("PreviewForm.WindowState",      m.iCurrentState )
  72239.     x.Set("PreviewForm.ToolbarIsVisible", THIS.ToolbarIsVisible )
  72240.     x.Set("PreviewForm.CanvasCount",      THIS.CanvasCount )
  72241.     x.Set("PreviewForm.ZoomLevel",        THIS.ZoomLevel )
  72242.     if not isnull( THIS.Toolbar )
  72243.         *-------------------------------------------------------
  72244.         * Only if toolbar is available:
  72245.         *-------------------------------------------------------
  72246.         x.Set("PreviewToolbar.Top",          THIS.Toolbar.Top )
  72247.         x.Set("PreviewToolbar.Left",         THIS.Toolbar.Left )
  72248.         x.Set("PreviewToolbar.Width",        THIS.Toolbar.Width )
  72249.         x.Set("PreviewToolbar.Height",       THIS.Toolbar.Height )
  72250.         x.Set("PreviewToolbar.DockPosition", THIS.Toolbar.DockPosition )
  72251.     endif
  72252.     if x.SaveResource( REPORTPREVIEW_RESOURCE_ID, upper(THIS.FrxFileName) )
  72253.         * well, success. If not, well, not.
  72254.     endif
  72255. endif
  72256. *--------------------------------------------------------------
  72257. * SP2: Don't leave the windowState toggled. It interferes with
  72258. *      other windows in the application:
  72259. *--------------------------------------------------------------
  72260. if THIS.WindowState <> m.iCurrentState
  72261.     THIS.WindowState = m.iCurrentState
  72262. endif
  72263. release x
  72264. *--------------------------------------------------------------
  72265. * Restore SET NOTIFY CURSOR status:
  72266. *--------------------------------------------------------------
  72267. if m.lSetNotify
  72268.     set notify cursor on
  72269. endif
  72270. if m.lSetNotify2
  72271.     set notify on
  72272. endif
  72273. if m.lSetTalk
  72274.     set talk on
  72275. endif
  72276. ENDPROC
  72277. PROCEDURE restorefromresource
  72278. #IF DEBUG_METHOD_LOGGING 
  72279.     debugout space(program(-1)) + "frxPreviewForm::RestoreFromResource()"
  72280. #ENDIF
  72281. local x, iCurrentState, cValue
  72282. x = newobject( "ResourceManager", FRXCOMMON_PRG_CLASSLIB )
  72283. if x.LoadResource( REPORTPREVIEW_RESOURCE_ID, upper(THIS.FrxFileName) )
  72284.     cValue = x.Get("PreviewForm.Top")
  72285.     if not empty( m.cValue )
  72286.         THIS.Top = int(val(m.cValue ))
  72287.     endif
  72288.     cValue = x.Get("PreviewForm.Left")
  72289.     if not empty( m.cValue )
  72290.         THIS.Left = int(val(m.cValue ))
  72291.     endif
  72292.     cValue = x.Get("PreviewForm.Width")
  72293.     if not empty( m.cValue )
  72294.         THIS.Width = int(val(m.cValue ))
  72295.     endif
  72296.     cValue = x.Get("PreviewForm.Height")
  72297.     if not empty( m.cValue )
  72298.         THIS.Height = int(val(m.cValue ))
  72299.     endif
  72300.     if not THIS.oReport.commandClauses.IsDesignerLoaded
  72301.         cValue = x.Get("PreviewForm.WindowState")
  72302.         if not empty( m.cValue )
  72303.             THIS.WindowState = int(val(m.cValue ))
  72304.         endif
  72305.     endif
  72306.     cValue = x.Get("PreviewForm.ToolbarIsVisible")
  72307.     if not empty( m.cValue )
  72308.         THIS.ToolbarIsVisible = ( m.cValue = ".T.")
  72309.     endif
  72310.     cValue = x.Get("PreviewForm.CanvasCount")
  72311.     if not empty( m.cValue )
  72312.         THIS.CanvasCount = int(val(m.cValue ))
  72313.     endif
  72314.     cValue = x.Get("PreviewForm.ZoomLevel")
  72315.     if not empty( m.cValue )
  72316.         THIS.ZoomLevel = int(val(m.cValue ))
  72317.     endif
  72318.     cValue = x.Get("PreviewToolbar.Top")
  72319.     if not empty( m.cValue )
  72320.         THIS.toolbar.Top = int(val(m.cValue ))
  72321.     endif
  72322.     cValue = x.Get("PreviewToolbar.Left")
  72323.     if not empty( m.cValue )
  72324.         THIS.toolbar.Left = int(val(m.cValue ))
  72325.     endif
  72326.     cValue = x.Get("PreviewToolbar.Width")
  72327.     if not empty( m.cValue )
  72328.         THIS.toolbar.Width = int(val(m.cValue ))
  72329.     endif
  72330.     cValue = x.Get("PreviewToolbar.Height")
  72331.     if not empty( m.cValue )
  72332.         THIS.toolbar.Height = int(val(m.cValue ))
  72333.     endif
  72334.     cValue = x.Get("PreviewToolbar.DockPosition")
  72335.     if not empty( m.cValue )
  72336.         if between( int(val( m.cValue )), 0, 3 ) and THIS.ShowWindow <> 2
  72337.             THIS.toolbar.Dock( int(val( m.cValue )) )
  72338.         endif
  72339.     endif
  72340. endif
  72341. release x
  72342. ENDPROC
  72343. PROCEDURE getpixelsperdpi960
  72344. *-----------------------------------------------------------
  72345. * We need a conversion factor between 960dpi and pixels.
  72346. * pixels/dpi960 = THIS.Canvas1.Width/(THIS.PageWidth * 960)
  72347. *-----------------------------------------------------------
  72348. return THIS.Canvas1.Width/(THIS.PageWidth * 960)
  72349. ENDPROC
  72350. PROCEDURE createtoolbar
  72351. #IF DEBUG_METHOD_LOGGING 
  72352.     debugout space(program(-1)) + "frxPreviewForm::CreateToolbar()"
  72353. #ENDIF
  72354. THIS.toolbar = newobject( "frxPreviewToolbar","frxPreview.vcx")
  72355. THIS.toolbar.PreviewForm = THIS
  72356. *----------------------------------------------------
  72357. * Fixed in SP1: Extension handler .InitializeToolbar()
  72358. *----------------------------------------------------
  72359. if not isnull( THIS.Extensionhandler )
  72360.     if pemstatus( THIS.ExtensionHandler, "InitializeToolbar", 5 )    
  72361.         #IF DEBUG_METHOD_LOGGING 
  72362.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::InitializeToolbar()"
  72363.         #ENDIF
  72364.         THIS.ExtensionHandler.InitializeToolbar()
  72365.     endif
  72366. endif
  72367. *--------------------------------------------------------------
  72368. * Bug #441419 (Fixed for SP1):
  72369. *--------------------------------------------------------------
  72370. THIS.Toolbar.Refresh()
  72371. *--------------------------------------------------------------
  72372. ENDPROC
  72373. PROCEDURE extensionhandler_assign
  72374. *---------------------------------------------------
  72375. * Give the extension handler object a reference to
  72376. * the preview form. Remove the reference if we are 
  72377. * nulling out the extension handler:
  72378. *---------------------------------------------------
  72379. lparameters oExtHandler
  72380. if not isnull( m.oExtHandler )
  72381.     THIS.ExtensionHandler = m.oExtHandler
  72382.     AddProperty( oExtHandler, "PreviewForm" )
  72383.     oExtHandler.PreviewForm = THIS
  72384.     if not isnull( THIS.ExtensionHandler )
  72385.         THIS.ExtensionHandler.PreviewForm = .NULL.
  72386.     endif
  72387.     THIS.ExtensionHandler = .NULL.
  72388. endif
  72389. return
  72390. ENDPROC
  72391. PROCEDURE getpixelpageoffsets
  72392. *----------------------------------------
  72393. * GetPixelPageOffset( x, y )
  72394. *----------------------------------------
  72395. lparameters x960, y960
  72396. if empty( m.x960 )
  72397.     x960 = 0
  72398. endif
  72399. if empty( m.y960 )
  72400.     y960 = 0
  72401. endif
  72402. local x, y, conversionFactor
  72403. conversionFactor = THIS.GetPixelsPerDpi960()
  72404. x                = THIS.Canvas1.Left + int(m.x960 * m.conversionFactor) && - THIS.ViewPortLeft
  72405. y                = THIS.Canvas1.Top  + int(m.y960 * m.conversionFactor) && - THIS.ViewPortTop
  72406. offset = newobject("Empty")
  72407. AddProperty( m.offset, "x", m.x )
  72408. AddProperty( m.offset, "y", m.y )
  72409. return m.offset
  72410. ENDPROC
  72411. PROCEDURE showcommandwindow
  72412. if _vfp.StartMode = 0
  72413.     *------------------------------------------------
  72414.     * un-hide the command window, if we hid it
  72415.     *------------------------------------------------
  72416.     if this.hidCommandWindow and not wvisible("Command")
  72417.         show window command
  72418.     endif
  72419. endif
  72420. ENDPROC
  72421. PROCEDURE hidecommandwindow
  72422. if _vfp.StartMode = 0
  72423.     if wvisible("Command")
  72424.         hide Window command
  72425.         THIS.hidCommandWindow = .T.
  72426.     else
  72427.         THIS.hidCommandWindow = .F.    
  72428.     endif
  72429. endif
  72430. ENDPROC
  72431. PROCEDURE createcanvases
  72432. *=========================================
  72433. * CreateCanvases() - 
  72434. * New in SP2
  72435. * Create the canvas objects
  72436. *=========================================
  72437. #IF DEBUG_METHOD_LOGGING 
  72438.     debugout space(program(-1)) + "frxPreviewForm::CreateCanvases()"
  72439. #ENDIF
  72440. do case
  72441. case not empty(THIS.MemberClass) and ;
  72442.      not empty(THIS.MemberClassLibrary)
  72443.     THIS.NewObject("Canvas1", THIS.MemberClass, THIS.MemberClassLibrary)
  72444.     THIS.NewObject("Canvas2", THIS.MemberClass, THIS.MemberClassLibrary)
  72445.     THIS.NewObject("Canvas3", THIS.MemberClass, THIS.MemberClassLibrary)
  72446.     THIS.NewObject("Canvas4", THIS.MemberClass, THIS.MemberClassLibrary)
  72447. case not empty(THIS.MemberClass) 
  72448.     THIS.NewObject("Canvas1", THIS.MemberClass)
  72449.     THIS.NewObject("Canvas2", THIS.MemberClass)
  72450.     THIS.NewObject("Canvas3", THIS.MemberClass)
  72451.     THIS.NewObject("Canvas4", THIS.MemberClass)
  72452. otherwise
  72453.     THIS.NewObject("Canvas1", "ShapeCanvas", THIS.ClassLibrary )
  72454.     THIS.NewObject("Canvas2", "ShapeCanvas", THIS.ClassLibrary )
  72455.     THIS.NewObject("Canvas3", "ShapeCanvas", THIS.ClassLibrary )
  72456.     THIS.NewObject("Canvas4", "ShapeCanvas", THIS.ClassLibrary )
  72457. endcase
  72458. store .F. to ;
  72459.     THIS.Canvas1.Visible, ;
  72460.     THIS.Canvas2.Visible, ;
  72461.     THIS.Canvas3.Visible, ;
  72462.     THIS.Canvas4.Visible
  72463. *----------------------------------------------------
  72464. * New in SP2:
  72465. *----------------------------------------------------
  72466. if not isnull( THIS.Extensionhandler )
  72467.     if pemstatus( THIS.ExtensionHandler, "CreateCanvases", 5 )    
  72468.         #IF DEBUG_METHOD_LOGGING 
  72469.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::CreateCanvases()"
  72470.         #ENDIF
  72471.         THIS.ExtensionHandler.CreateCanvases()
  72472.     endif
  72473. endif
  72474. return
  72475. ENDPROC
  72476. PROCEDURE canvascount_assign
  72477. *----------------------------------------------
  72478. * CanvasCount_Assign()
  72479. *----------------------------------------------
  72480. lparameter iCanvasCount
  72481. if iCanvasCount <> THIS.CanvasCount
  72482.     if type("THIS.Canvas1")="O"
  72483.         if THIS.Canvas1.BaseClass <> "Shape"
  72484.             *----------------------------------------------
  72485.             * Set the canvas visibility:
  72486.             *----------------------------------------------
  72487.             do case
  72488.             case m.iCanvasCount = 1
  72489.                 store .F. to ;
  72490.                     THIS.Canvas2.Visible, ;
  72491.                     THIS.Canvas3.Visible, ;
  72492.                     THIS.Canvas4.Visible
  72493.                     
  72494.             case m.iCanvasCount = 2
  72495.                 store .T. to ;
  72496.                     THIS.Canvas2.Visible
  72497.                 store .F. to ;
  72498.                     THIS.Canvas3.Visible, ;
  72499.                     THIS.Canvas4.Visible
  72500.             case m.iCanvasCount = 4
  72501.                 store .T. to ;
  72502.                     THIS.Canvas2.Visible, ;
  72503.                     THIS.Canvas3.Visible, ;
  72504.                     THIS.Canvas4.Visible
  72505.             endcase
  72506.         endif
  72507.     endif        
  72508. endif
  72509. THIS.CanvasCount = m.iCanvasCount
  72510. ENDPROC
  72511. PROCEDURE setzoomlevel
  72512. *-----------------------------------------------------
  72513. * SetZoomLevel()
  72514. * new in SP2
  72515. *-----------------------------------------------------
  72516. lparameter iZoomLevel
  72517. iZoomLevel = min( alen(THIS.zoomLevels,1), max( 1, m.iZoomLevel ))
  72518. if THIS.zoomLevel <> m.iZoomLevel
  72519.     THIS.zoomLevel = m.iZoomLevel
  72520.     THIS.SetViewPort( 0, 0 )
  72521.     local iPagesAllowed
  72522.     iPagesAllowed = THIS.zoomLevels[ m.iZoomLevel, ZOOM_LEVEL_CANVAS]
  72523.     if THIS.canvasCount > m.iPagesAllowed
  72524.         * Reduce the canvas count at high levels of zoom:
  72525.         THIS.canvasCount = m.iPagesAllowed    
  72526.     endif
  72527.     THIS.TempStopRepaint = .T.
  72528.     THIS.Cls()
  72529.     THIS.SetViewPort(0,0)
  72530.     THIS.synchCanvases()
  72531.     THIS.RenderPages()
  72532.     THIS.synchPageNo()
  72533.     THIS.synchToolbar()
  72534.     * Fix the scrollbar refresh problem:
  72535.     THIS.Scrollbars = 0
  72536.     THIS.ScrollBars = 3
  72537. endif
  72538. ENDPROC
  72539. PROCEDURE setcanvascount
  72540. *-----------------------------------------------------
  72541. * SetCanvasCount()
  72542. * new in SP2
  72543. *-----------------------------------------------------
  72544. lparameter iCount
  72545. iCount = min(4, max(1, m.iCount ))
  72546. if iCount = 3
  72547.     iCount = 2
  72548. endif
  72549. if THIS.canvasCount <> m.iCount
  72550.     THIS.SuppressRendering = .T.
  72551.     *------------------------------------------------
  72552.     * Only clear the form if there are potentially
  72553.     * extra canvas images that need to be erased:
  72554.     *------------------------------------------------
  72555.     if THIS.CanvasCount > m.iCount        
  72556.         THIS.Cls()
  72557.     endif
  72558.     THIS.canvasCount = m.iCount
  72559.     THIS.SetViewPort(0,0)
  72560.     THIS.synchCanvases()
  72561.     THIS.SuppressRendering = .F.
  72562.     THIS.RenderPages()
  72563.     THIS.synchPageNo()
  72564.     THIS.synchToolbar()
  72565. endif
  72566. ENDPROC
  72567. PROCEDURE MouseUp
  72568. lparameters iButton, nShift, nXCoord, nYCoord
  72569. *--------------------------------------------------
  72570. * ENH for SP2:
  72571. * Allow magnify when clicking on page
  72572. * See Toolbar.zoomCombo.interactiveChange() for code 
  72573. * that sets this flag:
  72574. *--------------------------------------------------
  72575. if not this.IgnoreMouseClickInMagnifyCode
  72576.     do case
  72577.     case m.iButton <> 1
  72578.         *--------------------------------------------------
  72579.         * Wasn't a left click so do nothing:
  72580.         *--------------------------------------------------
  72581.     case m.nXCoord > (CANVAS_LEFT_OFFSET_PIXELS + THIS.Canvas1.Width)    ;
  72582.       or m.nYCoord > (CANVAS_TOP_OFFSET_PIXELS + THIS.Canvas1.Height)    
  72583.         *--------------------------------------------------
  72584.         * CLicked outside the page so do nothing:
  72585.         *--------------------------------------------------
  72586.     case (THIS.ZoomLevel >= alen(THIS.zoomLevels,1)-1) ;
  72587.       or (THIS.ZoomLevel < 5)
  72588.         *--------------------------------------------------
  72589.         * The current zoom level is "Whole page" 
  72590.         * or less than 100%, so go to 100% and set view port 
  72591.         * to be oriented on the clicked portion of the page:
  72592.         *--------------------------------------------------
  72593.         ClickXOffsetPercent = (nXCoord - CANVAS_LEFT_OFFSET_PIXELS)/THIS.Canvas1.Width 
  72594.         ClickYOffsetPercent = (nYCoord - CANVAS_TOP_OFFSET_PIXELS)/THIS.Canvas1.Height
  72595.         THIS.ActionSetZoom( 5 )        
  72596.         * Do we need to center the offset point?
  72597.         NewViewPortX = (THIS.Canvas1.Width*ClickXOffsetPercent) - THIS.Width/2 - CANVAS_LEFT_OFFSET_PIXELS
  72598.         NewViewPortY = (THIS.Canvas1.Height*ClickYOffsetPercent) - THIS.Height/2 - CANVAS_TOP_OFFSET_PIXELS
  72599.         THIS.SetViewPort( max(NewViewPortX,0), max(NewViewPortY,0) )
  72600.     otherwise
  72601.         *--------------------------------------------------
  72602.         * The current zoom level is not "Whole page" so 
  72603.         * go to "Whole page" zoom:
  72604.         *--------------------------------------------------
  72605.         THIS.ActionSetZoom( alen(THIS.zoomLevels,1)-1 )        
  72606.     endcase
  72607.     THIS.MouseFlag = .F.
  72608.     THIS.IgnoreMouseClickInMagnifyCode = .F.
  72609. endif
  72610. ENDPROC
  72611. PROCEDURE Hide
  72612. #IF DEBUG_METHOD_LOGGING 
  72613.     debugout space(program(-1)) + "frxPreviewForm::Hide()"
  72614. #ENDIF
  72615. if not isnull( THIS.toolbar )
  72616.     * Hide the toolbar:
  72617.     THIS.Toolbar.Hide()
  72618.     THIS.ToolbarIsVisible = .F.
  72619. endif
  72620. ENDPROC
  72621. PROCEDURE Activate
  72622. #IF DEBUG_METHOD_LOGGING 
  72623.     debugout space(program(-1)) + "frxPreviewForm::Activate()"
  72624. #ENDIF
  72625. *---------------------------------------------------------------
  72626. * Ensure the toolbar is visible
  72627. *---------------------------------------------------------------
  72628. if THIS.ToolbarIsVisible
  72629.     THIS.ShowToolbar(.T.)
  72630. endif
  72631. *---------------------------------------------------------------
  72632. * Fix for SP2: Ensure the scrollbars are respected 
  72633. * by SynchCanvases()
  72634. *---------------------------------------------------------------
  72635. THIS.Resize()
  72636. ENDPROC
  72637. PROCEDURE Deactivate
  72638. #IF DEBUG_METHOD_LOGGING 
  72639.     debugout space(program(-1)) + "frxPreviewForm::Deactivate()"
  72640. #ENDIF
  72641. *---------------------------------------------------------------
  72642. * Deactivate()
  72643. *---------------------------------------------------------------
  72644. if THIS.ToolbarIsVisible
  72645.     THIS.Toolbar.Show()
  72646. *    THIS.ShowToolBar(.F.)
  72647. endif
  72648. ENDPROC
  72649. PROCEDURE Destroy
  72650. #IF DEBUG_METHOD_LOGGING 
  72651.     debugout space(program(-1)) + "frxPreviewForm::Destroy()"
  72652. #ENDIF
  72653. *---------------------------------------------------------------
  72654. * New in SP2: 
  72655. *---------------------------------------------------------------
  72656. if not isnull( THIS.Extensionhandler )
  72657.     *-----------------------------------
  72658.     * New in SP2: 
  72659.     *-----------------------------------
  72660.     if pemstatus( THIS.ExtensionHandler, "Destroy", 5 )    
  72661.         #IF DEBUG_METHOD_LOGGING 
  72662.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Destroy()"
  72663.         #ENDIF    
  72664.         THIS.ExtensionHandler.Destroy()
  72665.     endif
  72666. endif
  72667. *---------------------------------------------------------------
  72668. * Get rid of that toolbar:
  72669. *---------------------------------------------------------------
  72670. if not isnull( THIS.toolbar )
  72671.     THIS.toolbar.PreviewForm = null
  72672.     THIS.toolbar = null
  72673. endif
  72674. THIS.oReport = null
  72675. dodefault()
  72676. ENDPROC
  72677. PROCEDURE Init
  72678. *---------------------------------------------------------------
  72679. * Init()
  72680. *---------------------------------------------------------------
  72681. dodefault()
  72682. *----------------------------------
  72683. * Build zoom level array:
  72684. *  Menu Prompt
  72685. *  percentage zoom
  72686. *  no. of pages to display
  72687. *----------------------------------
  72688. dimension THIS.zoomLevels[11,3]
  72689. *---------------------------------------------------
  72690. * Prompt
  72691. *---------------------------------------------------
  72692. THIS.zoomLevels[ 1,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_10_LOC
  72693. THIS.zoomLevels[ 2,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_25_LOC
  72694. THIS.zoomLevels[ 3,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_50_LOC
  72695. THIS.zoomLevels[ 4,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_75_LOC
  72696. THIS.zoomLevels[ 5,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_100_LOC 
  72697. THIS.zoomLevels[ 6,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_150_LOC 
  72698. THIS.zoomLevels[ 7,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_200_LOC 
  72699. THIS.zoomLevels[ 8,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_300_LOC
  72700. THIS.zoomLevels[ 9,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_500_LOC 
  72701. THIS.zoomLevels[10,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_WHOLE_PAGE_LOC
  72702. THIS.ZoomLevels[11,ZOOM_LEVEL_PROMPT] = ZOOM_LEVEL_PROMPT_FIT_WIDTH_LOC
  72703. *---------------------------------------------------
  72704. * Percentage zoom:
  72705. *---------------------------------------------------
  72706. THIS.zoomLevels[ 1,ZOOM_LEVEL_PERCENT] =   10
  72707. THIS.zoomLevels[ 2,ZOOM_LEVEL_PERCENT] =   25
  72708. THIS.zoomLevels[ 3,ZOOM_LEVEL_PERCENT] =   50
  72709. THIS.zoomLevels[ 4,ZOOM_LEVEL_PERCENT] =   75
  72710. THIS.zoomLevels[ 5,ZOOM_LEVEL_PERCENT] =  100
  72711. THIS.zoomLevels[ 6,ZOOM_LEVEL_PERCENT] =  150
  72712. THIS.zoomLevels[ 7,ZOOM_LEVEL_PERCENT] =  200
  72713. THIS.zoomLevels[ 8,ZOOM_LEVEL_PERCENT] =  300
  72714. THIS.zoomLevels[ 9,ZOOM_LEVEL_PERCENT] =  500
  72715. THIS.zoomLevels[10,ZOOM_LEVEL_PERCENT] =   -1  
  72716. THIS.zoomLevels[11,ZOOM_LEVEL_PERCENT] =   -2  
  72717. *---------------------------------------------------
  72718. * Set how many pages can be viewed at once
  72719. * depending on zoom level. 
  72720. * These may need tuning for memory:
  72721. *---------------------------------------------------
  72722. THIS.zoomLevels[ 1,ZOOM_LEVEL_CANVAS] =    4
  72723. THIS.zoomLevels[ 2,ZOOM_LEVEL_CANVAS] =    4 
  72724. THIS.zoomLevels[ 3,ZOOM_LEVEL_CANVAS] =    4
  72725. THIS.zoomLevels[ 4,ZOOM_LEVEL_CANVAS] =    4
  72726. THIS.zoomLevels[ 5,ZOOM_LEVEL_CANVAS] =    4
  72727. THIS.zoomLevels[ 6,ZOOM_LEVEL_CANVAS] =    2
  72728. THIS.zoomLevels[ 7,ZOOM_LEVEL_CANVAS] =    1
  72729. THIS.zoomLevels[ 8,ZOOM_LEVEL_CANVAS] =    1
  72730. THIS.zoomLevels[ 9,ZOOM_LEVEL_CANVAS] =    1
  72731. THIS.zoomLevels[10,ZOOM_LEVEL_CANVAS] =    1  
  72732. THIS.zoomLevels[11,ZOOM_LEVEL_CANVAS] =    1  
  72733. *------------------------------------------
  72734. * Create the toolbar and ensure the toolbar 
  72735. * has a reference to the main form:
  72736. * SP1: See .Show() for extra extension handler call
  72737. *------------------------------------------
  72738. THIS.CreateToolbar()
  72739. *------------------------------------------
  72740. * prevent too small windows
  72741. *------------------------------------------
  72742. THIS.MinWidth  = CANVAS_LEFT_OFFSET_PIXELS * 5
  72743. THIS.MinHeight = CANVAS_TOP_OFFSET_PIXELS * 5
  72744. ENDPROC
  72745. PROCEDURE KeyPress
  72746. LPARAMETERS nKeyCode, nShiftAltCtrl
  72747. #IF DEBUG_METHOD_LOGGING 
  72748.     debugout space(program(-1)) + "frxPreviewForm::KeyPress(" + trans(m.nKeyCode) + ", " + trans(m.nShiftAltCtrl) + ")"
  72749. #ENDIF
  72750. #define JOG_PIXELS    50
  72751. local lHandledKeypress, iPagesAllowed
  72752. iPagesAllowed = THIS.zoomLevels[ THIS.zoomLevel, ZOOM_LEVEL_CANVAS ]
  72753. if not isnull( THIS.Extensionhandler )
  72754.     *-----------------------------------
  72755.     * Fixed for SP1: Only invoke the method 
  72756.     * if it is defined:
  72757.     *-----------------------------------
  72758.     if pemstatus( THIS.ExtensionHandler, "HandledKeyPress", 5 )    
  72759.         #IF DEBUG_METHOD_LOGGING 
  72760.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::HandledKeyPress()"
  72761.         #ENDIF
  72762.         if THIS.ExtensionHandler.handledKeypress( m.nKeyCode, m.nShiftAltCtrl )
  72763.             return
  72764.         endif
  72765.     endif
  72766. endif
  72767. *------------------------------------------------------------
  72768. * This will be set false if none of the explicit tests below
  72769. * deal with the keypress. See the dodefault() call at the 
  72770. * end of the CASE statement.
  72771. *------------------------------------------------------------
  72772. lHandledKeypress = .T.
  72773. do case
  72774. case m.nShiftAltCtrl = 2
  72775.     *----------------------
  72776.     * CONTROL - ?
  72777.     *----------------------
  72778.     do case
  72779.     case m.nKeyCode = 23    && CTRL-W
  72780.         *--------------------------------------------------
  72781.         * Support Ctrl-W to close window
  72782.         *--------------------------------------------------
  72783.         THIS.ActionClose()
  72784.     otherwise
  72785.         lHandledKeyPress = .F.
  72786.     endcase
  72787. case m.nShiftAltCtrl = 1 
  72788.     *----------------------
  72789.     * SHIFT - ?
  72790.     *----------------------
  72791.     do case
  72792.     case m.nKeyCode = 93    && SHIFT-F10
  72793.         *--------------------------------------------------
  72794.         * Shift-F10 is the code for the windows context menu
  72795.         *--------------------------------------------------
  72796.         THIS.InvokeContextMenu(.T.)
  72797.     case m.nKeyCode = 90    && Z - Zoom in-and-out of the page
  72798.         if THIS.ZoomLevel >= alen(THIS.zoomLevels,1)-1
  72799.             *--------------------------------------------------
  72800.             * The current zoom level is "Whole page" so 
  72801.             * go to 100%
  72802.             *--------------------------------------------------
  72803.             THIS.ActionSetZoom( 5 )        
  72804.         else
  72805.             *--------------------------------------------------
  72806.             * The current zoom level is not "Whole page" so 
  72807.             * go to "Whole page" zoom:
  72808.             *--------------------------------------------------
  72809.             THIS.ActionSetZoom( alen(THIS.zoomLevels,1) )        
  72810.         endif
  72811.     case m.nKeyCode = 76    && L - Toggle between various zoom levels
  72812.         *--------------------------------------------------
  72813.         * The L key reduces/cycles the zoom level
  72814.         *--------------------------------------------------
  72815.         local z
  72816.         z = THIS.zoomLevel - 1
  72817.         if m.z = 0
  72818.             m.z = alen(THIS.zoomLevels,1)-2
  72819.         endif
  72820.         THIS.actionSetZoom(m.z)
  72821.     case m.nKeyCode = 71    && G - Go To Page
  72822.         THIS.ActionGoToPage()
  72823.     otherwise
  72824.         lHandledKeyPress = .F.
  72825.     endcase
  72826. case m.nShiftAltCtrl = 0
  72827.     *-----------------------------------------------------------------------------------------
  72828.     *   Key bindings in the orginal preview window:
  72829.     *-----------------------------------------------------------------------------------------
  72830.     *    ESC            27        Closes Print Preview window.
  72831.     *    RIGHTARROW     4        Scrolls to the right of the page in the Print Preview window.
  72832.     *    LEFTARROW    19        Scrolls to the left of the page in the Print Preview window.
  72833.     *    UPARROW        5        Scrolls towards the top of the page in the Print Preview window.
  72834.     *    DOWNARROW     24        Scrolls towards the bottom of the page in the Print Preview window.
  72835.     *    PAGEUP         18        Moves to the previous page in the Print Preview window.
  72836.     *    PAGEDOWN     3        Moves to the next page in the Print Preview window. 
  72837.     *    HOME        1        Moves to the first page in the Print Preview window.
  72838.     *    END         6        Moves to the last page in the Print Preview window.
  72839.     *    Z             122,90    Zooms in and out of the page.
  72840.     *    L            108,76    Toggles between various zoom levels.
  72841.     *    G            103,71    Opens Goto page dialog box.
  72842.     *-----------------------------------------------------------------------------------------
  72843.     do case
  72844.     case m.nKeyCode = 27    && ESC
  72845.         *--------------------------------------------------
  72846.         * Support ESC to close window
  72847.         *--------------------------------------------------
  72848.         THIS.ActionClose()
  72849.     case m.nKeyCode = 4        && Right
  72850.         THIS.SetViewPort( THIS.ViewPortLeft+JOG_PIXELS, THIS.ViewPortTop )
  72851.     case m.nKeyCode = 19    && Left
  72852.         THIS.SetViewPort( max(THIS.ViewPortLeft-JOG_PIXELS,0), THIS.ViewPortTop )
  72853.     case m.nKeyCode = 5        && Up
  72854.         THIS.SetViewPort( THIS.ViewPortLeft, max(THIS.ViewPortTop-JOG_PIXELS,0) )
  72855.     case m.nKeyCode = 24    && Down
  72856.         THIS.SetViewPort( THIS.ViewPortLeft, THIS.ViewPortTop+JOG_PIXELS )
  72857.     case m.nKeyCode = 18    && PageUp
  72858.         THIS.actionGoPrev()
  72859.     case m.nKeyCode = 3        && PagDown
  72860.         THIS.actionGoNext()
  72861.     case m.nKeyCode = 1        && Home
  72862.         THIS.actiongofirst()
  72863.     case m.nKeyCode = 6        && End
  72864.         THIS.actiongolast()
  72865. *    case m.nKeyCode = 99    && C - Close ?
  72866. *        THIS.actionclose()
  72867.     case inlist( m.nKeyCode, 103, 71 )     && G - Go To Page
  72868.         THIS.actiongotopage()
  72869.     case inlist( m.nKeyCode, 108, 76 )    && L - zoom cycle
  72870.         *--------------------------------------------------
  72871.         * The L key reduces/cycles the zoom level
  72872.         *--------------------------------------------------
  72873.         local z
  72874.         z = THIS.zoomLevel - 1
  72875.         if m.z = 0
  72876.             m.z = alen(THIS.zoomLevels,1)-2
  72877.         endif
  72878.         THIS.actionSetZoom(m.z)
  72879.     case inlist(m.nKeyCode, 122, 90 )    && Z for Zoom toggle
  72880.         if THIS.ZoomLevel >= alen(THIS.zoomLevels,1)-1
  72881.             *--------------------------------------------------
  72882.             * The current zoom level is "Whole page" so 
  72883.             * go to 100%
  72884.             *--------------------------------------------------
  72885.             THIS.ActionSetZoom( 5 )        
  72886.         else
  72887.             *--------------------------------------------------
  72888.             * The current zoom level is not "Whole page" so 
  72889.             * go to "Whole page" zoom:
  72890.             *--------------------------------------------------
  72891.             THIS.ActionSetZoom( alen(THIS.zoomLevels,1)-1 )        
  72892.         endif
  72893.     case m.nKeyCode = 49    && 1 page
  72894.         THIS.actionSetCanvasCount(1)
  72895.     case m.nKeyCode = 50    && 2 pages
  72896.         *------------------------------------------------------
  72897.         * Fix for SP1:
  72898.         * Disable two-page view for high zoom levels
  72899.         *------------------------------------------------------
  72900.         if m.iPagesAllowed > 1
  72901.             THIS.actionSetCanvasCount(2)
  72902.         endif
  72903.     case m.nKeyCode = 52    && 4 pages
  72904.         *------------------------------------------------------
  72905.         * Fix for SP1:
  72906.         * Disable 4-page view for high zoom levels
  72907.         *------------------------------------------------------
  72908.         if m.iPagesAllowed > 2
  72909.             THIS.actionSetCanvasCount(4)
  72910.         endif
  72911.     otherwise
  72912.         lHandledKeyPress = .F.
  72913.     endcase
  72914. endcase
  72915. if not m.lHandledKeyPress    
  72916.     #IF DEBUG_METHOD_LOGGING 
  72917.         debugout space(program(-1)) + " frxBaseForm::KeyPress(" + trans(m.nKeyCode) + ", " + trans(m.nShiftAltCtrl) + ")"
  72918.     #ENDIF
  72919.     dodefault( m.nKeyCode, m.nShiftAltCtrl )
  72920. endif
  72921. ENDPROC
  72922. PROCEDURE Paint
  72923. #IF DEBUG_METHOD_LOGGING 
  72924.     debugout space(program(-1)) + "frxPreviewForm::Paint()"
  72925. #ENDIF
  72926. *-----------------------------------
  72927. * This is a kludge to prevent
  72928. * the extra repaint we see when we
  72929. * change zoom levels:
  72930. *-----------------------------------
  72931. if THIS.TempStopRepaint = .T.
  72932.     THIS.TempStopRepaint = .F.
  72933.     return
  72934. endif
  72935. *-----------------------------------
  72936. * New in SP2:
  72937. * Image controls do not need successive
  72938. * repaints during the Paint() event:
  72939. *-----------------------------------
  72940. if THIS.Canvas1.BaseClass <> "Image"
  72941.     THIS.RenderPages()
  72942. endif
  72943. *-----------------------------------
  72944. * See if the ExtensionHandler
  72945. * wants to draw anything:
  72946. *-----------------------------------
  72947. if not isnull( THIS.Extensionhandler )
  72948.     *-----------------------------------------------------------
  72949.     * Fixed for SP1: Only invoke the method if it is defined:
  72950.     * Noted for SP2: Deprecated in favor of .RenderPages()
  72951.     *-----------------------------------------------------------
  72952.     if pemstatus( THIS.ExtensionHandler, "Paint", 5 )    
  72953.         #IF DEBUG_METHOD_LOGGING 
  72954.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Paint()"
  72955.         #ENDIF    
  72956.         THIS.ExtensionHandler.Paint()
  72957.     endif
  72958. endif
  72959. doevents
  72960. ENDPROC
  72961. PROCEDURE QueryUnload
  72962. dodefault()
  72963. THIS.Release()
  72964. ENDPROC
  72965. PROCEDURE Release
  72966. #IF DEBUG_METHOD_LOGGING 
  72967.     debugout space(program(-1)) + "frxPreviewForm::Release()"
  72968. #ENDIF
  72969. *------------------------------------------------
  72970. * Clear the report listener's reference to this form:
  72971. *------------------------------------------------
  72972. if not isnull( THIS.oReport )
  72973.     *-----------------------------------
  72974.     * Check with the extension handler:
  72975.     *-----------------------------------
  72976.     if not isnull( THIS.Extensionhandler )
  72977.         *-----------------------------------
  72978.         * Fixed for SP1: Only invoke the method 
  72979.         * if it is defined:
  72980.         *-----------------------------------
  72981.         if pemstatus( THIS.ExtensionHandler, "Release", 5 )    
  72982.             #IF DEBUG_METHOD_LOGGING 
  72983.                 debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Release()"
  72984.             #ENDIF
  72985.             if THIS.ExtensionHandler.Release()
  72986.                 *----------------------------------------------
  72987.                 * Clear out the reference. The assign method
  72988.                 * will also clear out the back ref to the form:
  72989.                 *----------------------------------------------
  72990.                 * THIS.ExtensionHandler = null
  72991.             else
  72992.                 *----------------------------------------------
  72993.                 * The extension handler has indicated that it 
  72994.                 * does not want to release. So don't:
  72995.                 *----------------------------------------------
  72996.                 NODEFAULT
  72997.                 return
  72998.             endif
  72999.         endif    
  73000.     endif
  73001.     THIS.SaveToResource()
  73002.     if version(4) > "09.00.0000.1800"
  73003.         *-------------------------------------------
  73004.         * Set the "Current page" value for the Print... dialog
  73005.         *-------------------------------------------
  73006.         THIS.oReport.commandClauses.printPageCurrent = THIS.currentPage
  73007.     endif
  73008.     *-------------------------------------------
  73009.     * Indicate that we are closing to the listener/engine:
  73010.     *-------------------------------------------
  73011.     THIS.oReport.onPreviewClose( THIS.PrintOnExit )
  73012.     *-------------------------------------------
  73013.     * Clear out the reference to the report
  73014.     *-------------------------------------------
  73015.     THIS.oReport = .null. 
  73016. endif
  73017. *------------------------------------------------
  73018. * Show the Command window if we previously hid it:
  73019. *------------------------------------------------
  73020. THIS.ShowCommandWindow()
  73021. *------------------------------------------------
  73022. * This is needed for .TopForm=.T.
  73023. *------------------------------------------------
  73024. THIS.Hide()
  73025. ENDPROC
  73026. PROCEDURE Resize
  73027. *------------------------------------------------------------------
  73028. * If in "Zoom Page to fit" mode:
  73029. *------------------------------------------------------------------
  73030. if THIS.zoomlevel >= alen(THIS.zoomLevels,1)-1
  73031.     THIS.synchCanvases()
  73032. endif
  73033. ENDPROC
  73034. PROCEDURE RightClick
  73035. THIS.invokeContextMenu()
  73036. ENDPROC
  73037. PROCEDURE Show
  73038. *---------------------------------------------------------------
  73039. * The Report engine / Listener object can be assigned a preview 
  73040. * surface instance in advance of rendering a report, so it will 
  73041. * need to invoke .Show() when it is ready for the user to interact 
  73042. * with the Preview UI.
  73043. *---------------------------------------------------------------
  73044. lparameter iStyle
  73045. #IF DEBUG_METHOD_LOGGING 
  73046.     debugout space(program(-1)) + "frxPreviewForm::Show(" + trans(m.iStyle) + ")"
  73047. #ENDIF
  73048. if parameters() = 0
  73049.     iStyle = WINDOWTYPE_MODELESS
  73050. endif
  73051. *----------------------------------------------------
  73052. * Fixed in SP1: Extension handler .InitializeToolbar()
  73053. * Additional call. THIS.CreateToolbar() was called in
  73054. * the .Init(), before the extension handler could be 
  73055. * assigned. Now that it is possibly available, we 
  73056. * need to re-invoke its CreateToolbar() hook:
  73057. *----------------------------------------------------
  73058. if not isnull( THIS.Extensionhandler )
  73059.     if pemstatus( THIS.ExtensionHandler, "InitializeToolbar", 5 )    
  73060.         #IF DEBUG_METHOD_LOGGING 
  73061.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::InitializeToolbar()"
  73062.         #ENDIF
  73063.         THIS.ExtensionHandler.InitializeToolbar()
  73064.     endif
  73065. endif
  73066. *-------------------------------
  73067. * How many pages?
  73068. *-------------------------------
  73069. THIS.PageTotal   = THIS.oReport.OutputPageCount
  73070. *-------------------------------
  73071. * a RANGE x,y clause can cause 0 pages rendered
  73072. *-------------------------------
  73073. if THIS.PageTotal < 1
  73074.     =messagebox(RP_NO_OUTPUT_PAGES_LOC ,64,DEFAULT_MBOX_TITLE_LOC)
  73075.     nodefault
  73076.     return
  73077. endif
  73078. THIS.startOffset = 0
  73079. THIS.canvasCount = min( THIS.canvasCount, THIS.PageTotal)
  73080. *-------------------------------
  73081. * Should we be modal?
  73082. *-------------------------------
  73083. THIS.IsNoWait = not (m.iStyle = WINDOWTYPE_MODAL)
  73084. *-----------------------------------
  73085. * Set and save the current form caption for later
  73086. * (See THIS.synchPageNo())
  73087. *-----------------------------------
  73088. if empty( THIS.Caption )
  73089.     THIS.Caption = REPORT_PREVIEW_CAPTION
  73090. endif
  73091. *-----------------------------------
  73092. * Fix for SP2: 
  73093. * Only enhance the preview window title caption
  73094. * if user has not specfied a target window:
  73095. *-----------------------------------
  73096. do case
  73097. case THIS.oReport.commandClauses.IsDesignerLoaded
  73098.     * Caption includes file name already:
  73099.     THIS.Caption = proper(THIS.Caption)
  73100. case not empty( THIS.oReport.commandClauses.Window )
  73101.     * The caption has been specified via the WINDOW clause,
  73102.     * so don't change it:
  73103. otherwise    
  73104.     if not empty( THIS.oReport.PrintJobName)
  73105.         THIS.Caption = THIS.Caption + " - " + THIS.oReport.PrintJobName
  73106.     else
  73107.         THIS.Caption = THIS.Caption + " - " + THIS.frxFilename 
  73108.     endif        
  73109. endcase
  73110. THIS.formCaption     = THIS.Caption
  73111. *-----------------------------------
  73112. * Update the form caption with the current page:
  73113. *-----------------------------------
  73114. THIS.setCurrentPage(THIS.currentPage) 
  73115. *-----------------------------------
  73116. * Activate the extension handler:
  73117. *-----------------------------------
  73118. if not isnull( THIS.Extensionhandler )
  73119.     *-----------------------------------
  73120.     * Fixed for SP1: Only invoke the method 
  73121.     * if it is defined:
  73122.     *-----------------------------------
  73123.     if pemstatus( THIS.ExtensionHandler, "Show", 5 )    
  73124.         #IF DEBUG_METHOD_LOGGING 
  73125.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::Show(" + trans(m.iStyle) + ")"
  73126.         #ENDIF
  73127.         THIS.ExtensionHandler.Show( m.iStyle )
  73128.     endif
  73129. endif
  73130. *----------------------------------------------
  73131. * Fix for versions earlier than SP1: Bug# 475109
  73132. *----------------------------------------------
  73133. if version(4) < "09.00.0000.3301"
  73134.     if not THIS.IsNoWait and ;
  73135.        THIS.ShowWindow = SHOWWINDOW_IN_TOPFORM and ;
  73136.        not empty(wparent(THIS.Name))
  73137.         * if we are modal and inside a topform app,
  73138.         * the toolbar will be unavailable, so don't 
  73139.         * show it:
  73140.         THIS.ToolbarIsVisible = .F.
  73141.     endif
  73142. endif
  73143. *-----------------------------------
  73144. * Update the toolbar, if necessary:
  73145. *-----------------------------------
  73146. THIS.Toolbar.Refresh()
  73147. if THIS.ToolbarIsVisible
  73148.     THIS.showToolbar(SHOW_TOOLBAR_ENABLED)
  73149. endif    
  73150. *----------------------------------
  73151. * Obtain page dimensions:
  73152. *----------------------------------
  73153. local iWidth, iHeight
  73154. iWidth  = THIS.oreport.getPageWidth()
  73155. iHeight = THIS.oReport.getPageHeight()
  73156. THIS.PageWidth  = m.iWidth/960
  73157. THIS.PageHeight = m.iHeight/960
  73158. *----------------------------------
  73159. * New in SP2:
  73160. * Create the canvas objects:
  73161. * Canvas1... Canvas4
  73162. *----------------------------------
  73163. THIS.CreateCanvases()
  73164. *----------------------------------
  73165. * Adjust the canvases to suit:
  73166. *----------------------------------
  73167. THIS.SynchCanvases()
  73168. *-----------------------------------
  73169. * If modal, no minimise button, and hide the command window:
  73170. *-----------------------------------
  73171. if not THIS.IsNoWait && m.iStyle = 1
  73172.     THIS.MinButton = .F.
  73173.     *------------------------------------------------
  73174.     * Hide the command window, if not NOWAIT
  73175.     *------------------------------------------------
  73176.     THIS.HideCommandWindow()
  73177. endif
  73178. #IF DEBUG_METHOD_LOGGING 
  73179.     debugout space(program(-1)) + " frxBaseForm::Show(" + trans(m.iStyle) + ")"
  73180. #ENDIF
  73181. *-----------------------------------------------
  73182. * New in SP2: 
  73183. * Ensure pages are drawn once manually up front:
  73184. *-----------------------------------------------
  73185. THIS.RenderPages()
  73186. *-----------------------------------
  73187. * Support the IN WINDOW clause:
  73188. *-----------------------------------
  73189. if not empty( THIS.oReport.commandClauses.InWindow )
  73190.     activate window (THIS.oReport.commandClauses.InWindow)    
  73191.     activate window (THIS.Name) ;
  73192.         in window (THIS.oReport.commandClauses.InWindow)
  73193. * This does not work for modal:
  73194. *    THIS.Visible = .T.        
  73195. *    NODEFAULT
  73196.     dodefault(m.iStyle)
  73197.     dodefault(m.iStyle)
  73198. endif
  73199. ENDPROC
  73200. PROCEDURE Cls
  73201. #IF DEBUG_METHOD_LOGGING 
  73202.     debugout space(program(-1)) + "frxPreviewForm::Cls()"
  73203. #ENDIF
  73204. ENDPROC
  73205. PROCEDURE Error
  73206. *===========================================
  73207. * Error( )
  73208. *===========================================
  73209. lparameters iError, cMethod, iLine
  73210. if not isnull( THIS.Extensionhandler )
  73211.     *-----------------------------------
  73212.     * ENH for SP2:
  73213.     *-----------------------------------
  73214.     if pemstatus( THIS.ExtensionHandler, "HandledError", 5 )    
  73215.         #IF DEBUG_METHOD_LOGGING 
  73216.             debugout space(program(-1)) + " frxPreviewForm.ExtensionHandler::HandledError()"
  73217.         #ENDIF
  73218.         if THIS.ExtensionHandler.handledError( m.iError, m.cMethod, m.iLine )
  73219.             return
  73220.         endif
  73221.     endif
  73222. endif
  73223. dodefault( m.iError, m.cMethod, m.iLine )
  73224. ENDPROC
  73225. Top = 16
  73226. Left = 8
  73227. Height = 367
  73228. Width = 580
  73229. ShowWindow = 1
  73230. ScrollBars = 3
  73231. DoCreate = .T.
  73232. AutoCenter = .F.
  73233. Caption = ""
  73234. KeyPreview = .T.
  73235. BackColor = 128,128,128
  73236. AllowOutput = .F.
  73237. canvascount = 1
  73238. canvasheight = 10
  73239. canvaswidth = 10
  73240. currentpage = 1
  73241. frxfilename = ("")
  73242. lastpainted = 0
  73243. oreport = .NULL.
  73244. pageheight = 11.5
  73245. pagewidth = 8
  73246. pagetotal = 0
  73247. toolbar = .NULL.
  73248. toolbarisvisible = .T.
  73249. unitconverter = .NULL.
  73250. zoomlevel = 5
  73251. formcaption = ("")
  73252. startoffset = 0
  73253. extensionhandler = .NULL.
  73254. _memberdata = 
  73255.     4790<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
  73256. <VFPData>
  73257. <memberdata name="allowprintfrompreview"  type="Property" display="AllowPrintFromPreview"/>
  73258. <memberdata name="canvascount"  type="Property" display="CanvasCount"/>
  73259. <memberdata name="canvasheight" type="Property" display="CanvasHeight"/>
  73260. <memberdata name="canvaswidth"  type="Property" display="CanvasWidth"/>
  73261. <memberdata name="currentpage"  type="Property" display="CurrentPage"/>
  73262. <memberdata name="disabledoffscreenbmps" type="Property" display="DisabledOffscreenBmps"/>
  73263. <memberdata name="extensionhandler" type="Property" display="ExtensionHandler"/>
  73264. <memberdata name="formcaption"  type="Property" display="FormCaption"/>
  73265. <memberdata name="frxfilename"  type="Property" display="FrxFileName"/>
  73266. <memberdata name="hidcommandwindow" type="Property" display="HidCommandWindow"/>
  73267. <memberdata name="isnowait"     type="Property" display="IsNoWait"/>
  73268. <memberdata name="lastpainted"  type="Property" display="LastPainted"/>
  73269. <memberdata name="oreport"      type="Property" display="oReport"/>
  73270. <memberdata name="pageheight"   type="Property" display="PageHeight"/>
  73271. <memberdata name="pagetotal"    type="Property" display="PageTotal"/>
  73272. <memberdata name="pagewidth"    type="Property" display="PageWidth"/>
  73273. <memberdata name="printonexit"  type="Property" display="PrintOnExit"/>
  73274. <memberdata name="screendpi"    type="Property" display="ScreenDPI"/>
  73275. <memberdata name="startoffset"  type="Property" display="StartOffset"/>
  73276. <memberdata name="suppressrendering" type="Property" display="SuppressRendering"/>
  73277. <memberdata name="toolbar"      type="Property" display="Toolbar"/>
  73278. <memberdata name="toolbarisvisible" type="Property" display="ToolbarIsVisible"/>
  73279. <memberdata name="unitconverter" type="Property" display="UnitConverter"/>
  73280. <memberdata name="zoomlevel"    type="Property" display="ZoomLevel"/>
  73281. <memberdata name="zoomlevels"    type="Property" display="ZoomLevels"/>
  73282. <memberdata name="actionclose"    type="Method" display="ActionClose"/>
  73283. <memberdata name="actiongofirst"  type="Method" display="ActionGoFirst"/>
  73284. <memberdata name="actiongolast"   type="Method" display="ActionGoLast"/>
  73285. <memberdata name="actiongonext"   type="Method" display="ActionGoNext"/>
  73286. <memberdata name="actiongoprev"   type="Method" display="ActionGoPrev"/>
  73287. <memberdata name="actiongotopage" type="Method" display="ActionGoToPage"/>
  73288. <memberdata name="actionprint"    type="Method" display="ActionPrint"/>
  73289. <memberdata name="actionsetcanvascount" type="Method" display="ActionSetCanvasCount"/>
  73290. <memberdata name="actionsetzoom"  type="Method" display="ActionSetZoom"/>
  73291. <memberdata name="actionshowinfo" type="Method" display="ActionShowInfo"/>
  73292. <memberdata name="actiontoolbarvisibility" type="Method" display="ActionToolbarVisibility"/>
  73293. <memberdata name="createtoolbar"  type="Method" display="CreateToolbar"/>
  73294. <memberdata name="getpixelsperdpi960" type="Method" display="GetPixelsPerDpi960"/>
  73295. <memberdata name="getpixelpageoffsets" type="Method" display="GetPixelPageOffsets"/>
  73296. <memberdata name="getzoompercent" type="Method" display="GetZoomPercent"/>
  73297. <memberdata name="invokecontextmenu" type="Method" display="InvokeContextMenu"/>
  73298. <memberdata name="renderpage"     type="Method" display="RenderPage"/>
  73299. <memberdata name="renderpages"    type="Method" display="RenderPages"/>
  73300. <memberdata name="reset"          type="Method" display="Reset"/>
  73301. <memberdata name="restorefromresource" type="Method" display="RestoreFromResource"/>
  73302. <memberdata name="savetoresource" type="Method" display="SaveToResource"/>
  73303. <memberdata name="setcurrentpage" type="Method" display="SetCurrentPage"/>
  73304. <memberdata name="setzoomlevel" type="Method" display="SetZoomLevel"/>
  73305. <memberdata name="setcanvascount" type="Method" display="SetCanvasCount"/>
  73306. <memberdata name="setreport"      type="Method" display="SetReport"/>
  73307. <memberdata name="showtoolbar"    type="Method" display="ShowToolbar"/>
  73308. <memberdata name="synchcanvases"  type="Method" display="SynchCanvases"/>
  73309. <memberdata name="synchpageno"    type="Method" display="SynchPageNo"/>
  73310. <memberdata name="synchtoolbar"   type="Method" display="SynchToolbar"/>
  73311. <memberdata name="createcanvases"     type="Method"   display="CreateCanvases"/>
  73312. <memberdata name="hidecommandwindow"  type="Method"   display="HideCommandWindow"/>
  73313. <memberdata name="lastzoomlevel"      type="Property" display="LastZoomLevel"/>
  73314. <memberdata name="memberclass"        type="Property" display="MemberClass"/>
  73315. <memberdata name="memberclasslibrary" type="Property" display="MemberClassLibrary"/>
  73316. <memberdata name="showcommandwindow"  type="Method"   display="ShowCommandwindow"/>
  73317. <memberdata name="tempstoprepaint"    type="Property" display="TempStopRepaint"/>
  73318. <memberdata name="textontoolbar"      type="Property" display="TextOnToolbar"/>
  73319. </VFPData>
  73320. allowprintfrompreview = .T.
  73321. lastzoomlevel = 0
  73322. textontoolbar = .F.
  73323. tempstoprepaint = .F.
  73324. memberclass = ("")
  73325. memberclasslibrary = ("")
  73326. topform = .F.
  73327. mouseflag = .F.
  73328. ignoremouseclickinmagnifycode = .F.
  73329. screendpi = 96
  73330. Name = "frxpreviewform"
  73331. PROCEDURE previewform_assign
  73332. *------------------------------------------------------
  73333. * synch up the various controls
  73334. *------------------------------------------------------
  73335. lparameter oPreviewForm
  73336. THIS.PreviewForm = m.oPreviewForm
  73337. if not isnull( THIS.PreviewForm )
  73338.     THIS.cboZoom.Clear()
  73339.     for i = 1 to alen(THIS.PreviewForm.zoomLevels,1)
  73340.         THIS.cboZoom.AddItem( THIS.PreviewForm.zoomLevels[m.i,ZOOM_LEVEL_PROMPT], m.i )
  73341.     endfor
  73342.     THIS.cboZoom.DisplayCount = m.i
  73343. endif
  73344. ENDPROC
  73345. PROCEDURE synchcontrols
  73346. *------------------------------------------------------
  73347. * SynchControls() - ensure toolbar displays correct values
  73348. *------------------------------------------------------
  73349. #IF DEBUG_METHOD_LOGGING 
  73350.     debugout space(program(-1)) + "frxPreviewToolbar::SynchControls()"
  73351. #ENDIF
  73352. *------------------------------------------------------
  73353. * Zoom level
  73354. *------------------------------------------------------
  73355. THIS.cboZoom.Value   = THIS.PreviewForm.zoomLevel
  73356. *------------------------------------------------------
  73357. * Disable multi-page view for high zoom levels
  73358. *------------------------------------------------------
  73359. local iPagesAllowed
  73360. iPagesAllowed = THIS.PreviewForm.zoomLevels[ THIS.PreviewForm.zoomLevel, ZOOM_LEVEL_CANVAS ]
  73361. THIS.opgPageCount.opt3.Enabled = (m.iPagesAllowed > 2)
  73362. THIS.opgPageCount.opt2.Enabled = (m.iPagesAllowed > 1)
  73363. *------------------------------------------------------
  73364. * Number of pages to display
  73365. *------------------------------------------------------
  73366. do case
  73367. case THIS.PreviewForm.canvasCount = 1
  73368.     THIS.opgPageCount.Value = 1
  73369. case THIS.PreviewForm.canvasCount = 2
  73370.     THIS.opgPageCount.Value = 2
  73371. case THIS.PreviewForm.canvasCount = 4
  73372.     THIS.opgPageCount.Value = 3
  73373. endcase
  73374. *------------------------------------------------------
  73375. * .synchControls()
  73376. *------------------------------------------------------
  73377. with THIS.PreviewForm
  73378.     *------------------------------------------------------
  73379.     * Disable the Top, Prev if we're on the first page:
  73380.     * Enable them if we are not:
  73381.     *------------------------------------------------------
  73382.     if (.currentPage > 1 )
  73383.         THIS.cntPrev.cmdTop.Enabled = .T.
  73384.         THIS.cntPrev.cmdBack.Enabled = .T.
  73385.     else
  73386.         THIS.cntPrev.cmdTop.Enabled = .F.
  73387.         THIS.cntPrev.cmdBack.Enabled = .F.
  73388.     endif
  73389.     *------------------------------------------------------
  73390.     * Disable the Next, Last if we're closer than canvasCount
  73391.     * to the last page:
  73392.     *------------------------------------------------------
  73393.     if (.currentPage + .canvasCount > .pageTotal) 
  73394.         THIS.cntNext.cmdForward.Enabled = .F.
  73395.         THIS.cntNext.cmdBottom.Enabled = .F.
  73396.     else
  73397.         THIS.cntNext.cmdForward.Enabled = .T.
  73398.         THIS.cntNext.cmdBottom.Enabled = .T.
  73399.     endif
  73400.     *------------------------------------------------------
  73401.     * Disable the GoToPage button if there is only one page:
  73402.     *------------------------------------------------------
  73403.     THIS.cmdGoToPage.Enabled = .PageTotal > 1
  73404. endwith
  73405. return
  73406. ENDPROC
  73407. PROCEDURE actionzoomlevel
  73408. lparameter iZoomIndex
  73409. #IF DEBUG_METHOD_LOGGING 
  73410.     debugout "frxPreviewToolbar::ActionZoomLevel()"
  73411. #ENDIF
  73412. *-----------------------------------
  73413. * Fixed for SP1: declare oForm local
  73414. *-----------------------------------
  73415. local oForm
  73416. oForm = THIS.previewForm
  73417. if oForm.ZoomLevel = m.iZoomIndex
  73418.     *----------------------------------
  73419.     * there is no action to take
  73420.     *----------------------------------
  73421.     return
  73422. endif
  73423. oForm.actionSetZoom(m.iZoomIndex )
  73424. *----------------------------------------------
  73425. * Belt & Braces mega kludge: Neither of the 
  73426. * following two methods are 100% reliable in 
  73427. * returning the mouse pointer to its original 
  73428. * position. This way, if one doesn't work (typically
  73429. * the Win32 function call seems to be ignored, despite
  73430. * the DOEVENTS), the other will prevent it from being
  73431. * completely obvious that the mouse pointer is being 
  73432. * dicked around with.
  73433. * And if you can figure out a better way of pulling the 
  73434. * keyboard focus out of the zoom combolist in the toolbar, 
  73435. * other than clicking on the main preview window, you're 
  73436. * welcome to replace this block of code.
  73437. *----------------------------------------------
  73438. *----------------------------------------------
  73439. * Fix in SP2
  73440. * See previewForm.MouseUp for code that respects this:
  73441. *----------------------------------------------
  73442. oForm.IgnoreMouseClickInMagnifyCode = .T.
  73443. *----------------------------------------------
  73444. * Save the mouse position:
  73445. *----------------------------------------------
  73446. *----------------------------------------------
  73447. * METHOD #1: Use windows API.
  73448. * (see .Init() for declare statements)
  73449. *----------------------------------------------
  73450. cPoint = space(8)
  73451. =GetMousePointerPos( @cPoint )
  73452. mx = asc(substr(m.cPoint,1,1)) + asc(substr(m.cPoint,2,1))*256
  73453. my = asc(substr(m.cPoint,5,1)) + asc(substr(m.cPoint,6,1))*256
  73454. *----------------------------------------------
  73455. * METHOD #2: Use mrow() relative to toolbar window
  73456. *----------------------------------------------
  73457. mr  = mrow(THIS.Caption,3)
  73458. mc  = mcol(THIS.Caption,3)
  73459. *-----------------------------------------
  73460. * Fake a mouse click on the preview form
  73461. * to pull keyboard focus away from the 
  73462. * Zoom level combo box on the toolbar:
  73463. *-----------------------------------------
  73464. mouse click at 1,1 window (oForm.Name)
  73465. *-----------------------------------------
  73466. * Return the mouse to its starting position:
  73467. *-----------------------------------------
  73468. *----------------------------------------------
  73469. * METHOD #2: Use mrow() relative to toolbar window
  73470. *----------------------------------------------
  73471. if m.mc < 0
  73472.     mc = THIS.cboZoom.Left + int(THIS.cboZoom.Width/2)
  73473. endif
  73474. if m.mr < 0
  73475.     mr = THIS.cboZoom.Top  + THIS.cboZoom.Height + int( fontmetric(1,THIS.cboZoom.FontName,THIS.cboZoom.FontSize)*(THIS.cboZoom.Value-0.5))
  73476. endif
  73477. mouse at m.mr, m.mc pixels window (THIS.Caption)
  73478. *-----------------------------------------
  73479. * METHOD #2: Use Windows API function.
  73480. * Note: Both DOEVENTS appear to be needed:
  73481. *-----------------------------------------
  73482. doevents  
  73483. =SetMousePointerPos( m.mx, m.my )
  73484. doevents
  73485. ENDPROC
  73486. PROCEDURE getwindowref
  73487. *-----------------------------------------------------------------
  73488. * .GetWindowRef( cWindow )
  73489. * Given a window name from REPORT FORM.. WINDOW <cWindow>,
  73490. * return an object reference to the window
  73491. *-----------------------------------------------------------------
  73492. lparameter cWindow
  73493. local cTitle, oRef, oForm
  73494. cTitle = wtitle(m.cWindow)
  73495. oRef   = null    
  73496. if not empty( m.cTitle )
  73497.     for each oForm in _screen.Forms
  73498.         if upper(oForm.Caption) == upper(m.cTitle) and ;
  73499.            ((oForm.Class = "Form" and oForm.Name = "") or ;
  73500.             (upper(oForm.Name) == upper(m.cWindow)))
  73501.             oRef = m.oForm
  73502.             exit
  73503.         endif
  73504.     endfor
  73505. endif
  73506. return m.oRef
  73507. ENDPROC
  73508. PROCEDURE actionpagecount
  73509. #IF DEBUG_METHOD_LOGGING 
  73510.     debugout "frxPreviewToolbar::ActionPageCount()"
  73511. #ENDIF
  73512. do case
  73513. case THIS.opgPageCount.Value = 1
  73514.     THIS.previewform.actionSetCanvasCount(1)
  73515. case THIS.opgPageCount.Value = 2
  73516.     THIS.previewform.actionSetCanvasCount(2)
  73517. case THIS.opgPageCount.Value = 3
  73518.     THIS.previewform.actionSetCanvasCount(4)
  73519. endcase
  73520. ENDPROC
  73521. PROCEDURE Refresh
  73522. #IF DEBUG_METHOD_LOGGING 
  73523.     debugout space(program(-1)) + "frxPreviewToolbar::Refresh()"
  73524. #ENDIF
  73525. if not isnull( THIS.PreviewForm )
  73526.     *--------------------------------------------------------------
  73527.     * Fixed for SP2. Should not include page number
  73528.     *--------------------------------------------------------------
  73529.     *THIS.Caption = THIS.PreviewForm.Caption
  73530.     THIS.Caption = THIS.PreviewForm.FormCaption
  73531.     *--------------------------------------------------------------
  73532.     * Fixed for SP1. Doesn't barf if button doesn't exist.
  73533.     *--------------------------------------------------------------
  73534.     if pemstatus( THIS, "cmdPrint", 5 )
  73535.         THIS.cmdPrint.Visible = THIS.PreviewForm.AllowPrintFromPreview
  73536.     endif
  73537.     if not THIS.PreviewForm.TextOnToolbar
  73538.         *--------------------------------------------------------------
  73539.         * Fixed for SP1: doesn't refer to objects specifically by name
  73540.         *--------------------------------------------------------------
  73541.         for each oControl in THIS.Controls
  73542.             THIS.SetAll("Caption","","cmd")    
  73543.             THIS.SetAll("AutoSize",.T.,"cmd")
  73544.             THIS.SetAll("AutoSize",.F.,"cmd")
  73545.             THIS.SetAll("Height",22,"cmd")
  73546.         endfor    
  73547.     endif    
  73548. endif
  73549. ENDPROC
  73550. PROCEDURE Init
  73551. #IF DEBUG_METHOD_LOGGING 
  73552.     debugout space(program(-1)) + "frxPreviewToolbar::Init()"
  73553. #ENDIF
  73554. THIS.Caption = TOOLBAR_CAPTION
  73555. THIS.Name    = "PreviewToolbar"
  73556. *--------------------------------
  73557. * Declare functions needed for 
  73558. * mouse pointer kludge 
  73559. * see ActionZoomlevel()
  73560. *--------------------------------
  73561. declare GetCursorPos ;
  73562.     in user32 ;
  73563.     as GetMousePointerPos ;
  73564.     string @cpoint
  73565. declare SetCursorPos  ;
  73566.     in user32 ;
  73567.     as SetMousePointerPos ;
  73568.     integer x, integer y
  73569. ENDPROC
  73570. PROCEDURE Destroy
  73571. #IF DEBUG_METHOD_LOGGING 
  73572.     debugout space(program(-1)) + "frxPreviewToolbar::Destroy()"
  73573. #ENDIF
  73574. if not isnull( THIS.PreviewForm )
  73575.     THIS.PreviewForm.ToolbarIsVisible = .F.
  73576. endif
  73577. ENDPROC
  73578. PROCEDURE Error
  73579. *====================================================================
  73580. * Error()
  73581. * Use the ErrorHandler class to provide default error handling. Most 
  73582. * objects (in frxControls.vcx anyway) will defer error handling to their
  73583. * containers, which ultimately ends up here:
  73584. *====================================================================
  73585. lparameters iError, cMethod, iLine
  73586. x = newobject("ErrorHandler","pr_frxpreview.prg")
  73587. x.Handle( iError, cMethod, iLine, THIS )
  73588. do case
  73589. case x.cancelled
  73590.     cancel
  73591. case x.suspended
  73592.     suspend
  73593. endcase
  73594. ENDPROC
  73595. CWINDOW
  73596. CTITLE
  73597. OFORM
  73598. FORMS
  73599. CAPTION
  73600. CLASS
  73601. NAME*
  73602. OFORM
  73603. HIDET
  73604. OFORM
  73605. RELEASE
  73606. EXTENSIONHANDLER
  73607. OREPORT<
  73608. TALKv
  73609. 09.00.0000.2013
  73610. IsDesignerProtected-
  73611. DATASESSIONv
  73612. frxO6
  73613. TOREPORT
  73614. OREPORT
  73615. COMMANDCLAUSES
  73616. ISDESIGNERPROTECTED
  73617. ICURRSESSION
  73618. IPROTFLAGS
  73619. FRXDATASESSION
  73620. BINSTRINGTOINT
  73621. ORDER
  73622. ALLOWPRINTFROMPREVIEW
  73623. OFORM    
  73624. SETREPORTE
  73625. Report Preview has not been initialized correctly. It requires a ReportListener reference.
  73626. Report Preview
  73627. TALKv
  73628. iStyleb
  73629. frxPreviewForm
  73630. frxPreviewInScreen
  73631. SCREEN
  73632. frxPreviewInScreen
  73633. frxPreviewInDesktop
  73634. frxPreviewAsTopForm
  73635. SCREEN
  73636. frxPreview
  73637. SCREEN
  73638. ISTYLE
  73639. OREPORT
  73640. LCFORMCLASS
  73641. COMMANDCLAUSES
  73642. INSCREEN
  73643. INWINDOW
  73644. WINDOW
  73645. GETWINDOWREF
  73646. DESKTOP
  73647. MACDESKTOP
  73648. TOPFORM
  73649. PREVIEWFORMCLASS
  73650. SCREEN
  73651. LREUSE
  73652. OFORM
  73653. WINDOWTYPE
  73654. CLASS
  73655. EXTENSIONHANDLER
  73656. HIDE    
  73657. SETREPORT
  73658. RESTOREFROMRESOURCE
  73659. ISDESIGNERLOADED
  73660. CDESIGNERWINDOW
  73661. CPARENT
  73662. IROWPIX
  73663. ICOLPIX
  73664. WIDTH
  73665. HEIGHT
  73666. CAPTION
  73667. TEMPLATE
  73668. WINDOWSTATE
  73669. BORDERSTYLE
  73670. HALFHEIGHTCAPTION
  73671. MEMBERCLASS
  73672. MEMBERCLASSLIBRARY
  73673. CANVASCOUNT
  73674. CURRENTPAGE    
  73675. ZOOMLEVEL
  73676. TOOLBARISVISIBLE
  73677. TEXTONTOOLBAR
  73678. ALLOWPRINTFROMPREVIEW
  73679. SHOWWINDOW
  73680. SHOWo
  73681. IPAGE
  73682. CURRENTPAGE
  73683. OFORM
  73684. SETCURRENTPAGE
  73685. RENDERPAGESo
  73686. ICOUNT
  73687. CANVASCOUNT
  73688. OFORM
  73689. ACTIONSETCANVASCOUNT
  73690. RENDERPAGESX
  73691. ILEVEL
  73692. THIS    
  73693. ZOOMLEVEL
  73694. OFORM
  73695. ACTIONSETZOOM_
  73696. EXTENSIONHANDLER
  73697. OFORM
  73698. CBYTE
  73699. IRETURN
  73700. WIDTH
  73701. HEIGHT
  73702. LEFT*
  73703. OFORM
  73704. RELEASE
  73705. getwindowref,
  73706. hide?
  73707. release
  73708. setreport    
  73709. setcurrentpagem
  73710. setcanvascount
  73711. setzoomlevel
  73712. setextensionhandlera
  73713. binstringtoint
  73714. Destroy
  73715. PROCEDURE checkforlargefonts
  73716. *====================================================================
  73717. * CheckForLargeFonts()
  73718. * This is invoked from the .Init() to set all contained objects to
  73719. * use the "large font"-safe font, "MS Shell Dlg" which maps to the 
  73720. * appropriate font in Windows.
  73721. *====================================================================
  73722. *----------------------------------------------------------------
  73723. * Initial, default font setting:
  73724. *----------------------------------------------------------------
  73725. do case 
  73726. case OS(3) = "6" or DEBUG_FORCE_SEGOE_UI
  73727.     THIS.SetAll("FontName","Segoe UI")
  73728.     THIS.SetAll("FontSize",9)
  73729.     THIS.SetAll("Margin",0,"txt")
  73730.     THIS.SetAll("Margin",0,"edt")
  73731.     THIS.SetAll("Margin",0,"Editbox")
  73732.     THIS.SetAll("Margin",0,"Textbox")
  73733. case OS(3) = "5"
  73734.     THIS.SetAll("FontName","MS Shell Dlg 2")
  73735.     THIS.SetAll("FontSize",8)
  73736. otherwise
  73737.     THIS.SetAll("FontName","Tahoma")
  73738.     THIS.SetAll("FontSize",8)
  73739. endcase
  73740. *----------------------------------------------------------------
  73741. * Optional Fontname override:
  73742. *----------------------------------------------------------------
  73743. if not empty(DIALOG_FONTNAME_OVERRIDE)
  73744.     THIS.SetAll("FontName", DIALOG_FONTNAME_OVERRIDE )
  73745.     THIS.FontName = DIALOG_FONTNAME_OVERRIDE
  73746. endif    
  73747. *----------------------------------------------------------------
  73748. * Adjustments for "large fonts":
  73749. *----------------------------------------------------------------
  73750. do case
  73751. case DIALOG_FONTSIZE_OVERRIDE > 0
  73752.     *----------------------------------------------------------------
  73753.     * We can force the use of a specific font size:
  73754.     *----------------------------------------------------------------
  73755.     this.SetAll("FontSize", DIALOG_FONTSIZE_OVERRIDE )
  73756.     this.FontSize = DIALOG_FONTSIZE_OVERRIDE 
  73757. *-----------------------
  73758. * SP1 Fix: 
  73759. *-----------------------
  73760. case DEBUG_FORCE_LARGE_FONTS or ;
  73761.      (DIALOG_ADJUST_FOR_LARGE_FONTS and THIS.screenDPI >= 120)
  73762.     *----------------------------------------------------------------
  73763.     * Use a slightly larger font in 120 dpi to match the other 
  73764.     * native VFP dialogs
  73765.     *----------------------------------------------------------------
  73766.     this.SetAll("FontSize", 10 )
  73767.     this.FontSize = 10
  73768. endcase
  73769. ENDPROC
  73770. PROCEDURE Error
  73771. *====================================================================
  73772. * Error()
  73773. * Use the ErrorHandler class to provide default error handling. Most 
  73774. * objects (in frxControls.vcx anyway) will defer error handling to their
  73775. * containers, which ultimately ends up here:
  73776. *====================================================================
  73777. lparameters iError, cMethod, iLine
  73778. x = newobject("ErrorHandler","pr_frxpreview.prg")
  73779. x.Handle( m.iError, m.cMethod, m.iLine, THIS )
  73780. do case
  73781. case x.cancelled
  73782.     cancel
  73783. case x.suspended
  73784.     suspend
  73785. endcase
  73786. ENDPROC
  73787. PROCEDURE Init
  73788. *====================================================================
  73789. * Init()
  73790. * Make sure that if large fonts are in effect, to switch all controls
  73791. * to use a large-font-safe font.
  73792. *====================================================================
  73793. *---------------------------------
  73794. * SP1 - improve "large font" handling:
  73795. * Determine the screen DPI:
  73796. *---------------------------------
  73797. #define LOGPIXELSX 88
  73798. declare integer GetDeviceCaps in WIN32API integer HDC, integer item
  73799. declare integer GetDC         in WIN32API integer hWnd
  73800. declare integer ReleaseDC     in WIN32API integer hWnd, integer HDC
  73801. local hdc, screenDPI
  73802. hdc    = GetDC(0)
  73803. THIS.screenDPI = GetDeviceCaps( m.hdc, LOGPIXELSX )
  73804. ReleaseDC( 0, m.hdc )
  73805. *---------------------------------
  73806. * Adjust object font sizes if necessary:
  73807. *---------------------------------
  73808. this.checkForLargeFonts()
  73809. ENDPROC
  73810. frxPreview.vcx
  73811. TALKv
  73812. frxPreviewProxy
  73813. frxPreview.vcx
  73814. frxPreviewProxy
  73815. frxPreview.vcx
  73816. ROREF
  73817. FRXPREVIEW
  73818. Line 
  73819. .Error()
  73820. Do you want to suspend execution?
  73821. Report Preview
  73822.  Error
  73823. Report Preview
  73824.  Error
  73825. IERROR
  73826. CMETHOD
  73827. ILINE
  73828. THIS    
  73829. CANCELLED    
  73830. SUSPENDED    
  73831. CERRORMSG
  73832. IRETVAL
  73833. NAME    
  73834. ERRORTEXT
  73835. Handle
  73836. SUSPENDED    
  73837. CANCELLED    
  73838. ERRORTEXT
  73839. ErrorHandler
  73840. Custom
  73841. }GO7%
  73842. CTOKEN
  73843. RETVAL
  73844. IINDEX
  73845. VALUES
  73846. VVALUE
  73847. IINDEX    
  73848. IKEYCOUNT
  73849. VALUES
  73850. IPAIR
  73851. CTEXT
  73852. VALUES?
  73853. VALUESj
  73854. CTEXT
  73855. ILINECOUNT    
  73856. IKEYCOUNT
  73857. CBUFF
  73858. CVALUE
  73859. ATEMP
  73860. STRIPDELIMITERS
  73861. RESOURCE
  73862. RESOURCEv
  73863. RESOURCE
  73864. TYPE+ID+PADR(NAME,24)
  73865. CURRENTWORKAREA
  73866. RESOURCEWORKAREA
  73867. PREFW
  73868. CNAME
  73869. OPENRESOURCEFILE
  73870. LOADMEMO
  73871. CURRENTWORKAREA
  73872. PREFW
  73873. PREFW
  73874. CNAME
  73875. RESOURCEWORKAREA
  73876. OPENRESOURCEFILE
  73877. LRETVAL
  73878. CDATA
  73879. GETMEMO
  73880. READONLY
  73881. CKVAL
  73882. UPDATED
  73883. CURRENTWORKAREA\
  73884. RESOURCEWORKAREA
  73885. CURRENTWORKAREA
  73886. .FontName
  73887. .FontSize
  73888. .FontBold
  73889. .FontItalic
  73890. FONTNAME
  73891. FONTSIZE
  73892. FONTBOLD
  73893. FONTITALIC[
  73894. .FontName
  73895. .FontSize
  73896. .FontBold
  73897. .FontItalic
  73898. CVALUE
  73899. FONTNAME
  73900. FONTSIZE
  73901. FONTBOLD
  73902. FONTITALIC
  73903. .Left
  73904. .Width
  73905. .Height
  73906. .WindowState
  73907. ICURRENTSTATE
  73908. WINDOWSTATE
  73909. WIDTH
  73910. HEIGHT
  73911. .Left
  73912. .Width
  73913. .Height
  73914. .WindowState
  73915. CVALUE
  73916. WIDTH
  73917. HEIGHT
  73918. WINDOWSTATE
  73919. getMemoK
  73920. reset
  73921. loadMemoY
  73922. OpenResourceFile#
  73923. LoadResource
  73924. SaveResource
  73925. Destroy0
  73926. SaveFontState
  73927. RestoreFontState
  73928. SaveWindowStateJ
  73929. RestoreWindowState
  73930. VALUES
  73931. STRIPDELIMITERSm
  73932. CURRENTWORKAREA
  73933. RESOURCEWORKAREA
  73934. NameValuePairManager
  73935. Custom
  73936. ResourceManager
  73937. NameValuePairManager
  73938. GIF89a
  73939. GdipCreateImageAttributes
  73940. gdiplus.dll
  73941. GdipSetImageAttributesColorMatrix
  73942. gdiplus.dll
  73943. GdipSetImageAttributesRemapTable
  73944. gdiplus.dll
  73945. GDIPCREATEIMAGEATTRIBUTES
  73946. GDIPLUS
  73947. GDIPHANDLE
  73948. DISPOSEIMAGEATTRIBUTES
  73949. LHIMAGEATTR
  73950. STAT!
  73951. GDIPSETIMAGEATTRIBUTESCOLORMATRIX 
  73952. GDIPSETIMAGEATTRIBUTESREMAPTABLE
  73953. GDIPHANDLE
  73954. GDI+ error in CC
  73955. Error code : 
  73956. Description: 
  73957. Press 'Retry' to debug the application.
  73958. Error
  73959. TNSTATUS
  73960. LNOPTION
  73961. THIS    
  73962. ERRORINFO
  73963. STAT.
  73964. GDIPHANDLE
  73965. DISPOSEIMAGEATTRIBUTES{
  73966. TACOLMATRIX
  73967. LCCOLORMATRIX
  73968. MAKECOLORMATRIX
  73969. STAT!
  73970. GDIPSETIMAGEATTRIBUTESCOLORMATRIX
  73971. GDIPHANDLEd
  73972. GdipSetImageAttributesGamma
  73973. GDIPLUS.dll
  73974. TNGAMMA
  73975. GDIPSETIMAGEATTRIBUTESGAMMA
  73976. GDIPLUS
  73977. GDIPHANDLE`
  73978. GdipGetImageWidth
  73979. GdiPlus.dll
  73980. GdipGetImageHeight
  73981. GdiPlus.dll
  73982. TOIMAGE
  73983. LNWIDTH
  73984. LNHEIGHT
  73985. LNNATIVEIMAGE    
  73986. GETHANDLE
  73987. GDIPGETIMAGEWIDTH
  73988. GDIPLUS
  73989. GDIPGETIMAGEHEIGHT
  73990. DRAWIMAGERECTRECT
  73991. GdipGetImageGraphicsContext
  73992. GdiPlus.dll
  73993. GdipDrawImageRectRect
  73994. gdiplus.dll
  73995. GdipDeleteGraphics
  73996. GdiPlus.dll
  73997. TNIMAGE
  73998. DSTWIDTH    
  73999. DSTHEIGHT
  74000. SRCWIDTH    
  74001. SRCHEIGHT    
  74002. LNSCRUNIT
  74003. LHGFX    
  74004. LNSRCUNIT
  74005. GDIPGETIMAGEGRAPHICSCONTEXT
  74006. GDIPLUS
  74007. GDIPDRAWIMAGERECTRECT
  74008. GDIPHANDLE
  74009. GDIPDELETEGRAPHICS<
  74010. TNOLDCOLOR
  74011. TNNEWCOLOR
  74012. TNOLDALPHA
  74013. TNNEWALPHA    
  74014. LNARGBOLD    
  74015. LNARGBNEW
  74016. LCCOLORMAP
  74017. MAKECOLORMAP
  74018. MAKEARGB
  74019. STAT 
  74020. GDIPSETIMAGEATTRIBUTESREMAPTABLE
  74021. GDIPHANDLEa
  74022. GdipDisposeImageAttributes
  74023. GdiPlus.dll
  74024. TNIMGATTRIBUTES
  74025. GDIPDISPOSEIMAGEATTRIBUTES
  74026. GDIPLUS
  74027. GDIPHANDLE
  74028. TCCOLMATR1
  74029. TCCOLMATR2
  74030. CMRESULT
  74031. F2INT2
  74032. MAKECOLORMATRIX-
  74033. TNWIDTH
  74034. TNHEIGHT
  74035. TNCOLOR
  74036. TNALPHA
  74037. LNARGB
  74038. LNRED
  74039. LNGREEN
  74040. LNBLUE
  74041. TAINTPOINTS
  74042. LCPOINTSFSEQUENCE
  74043. LCPOINTF
  74044. POINTF
  74045. TACOLMATRIX
  74046. LCCOLORMATRIX
  74047. LCMATRIX
  74048. TACOLORMAP
  74049. LCCOLORMAP
  74050. LNARGBOLD    
  74051. LNARGBNEW
  74052. MAKEARGB
  74053. CHARACTER
  74054. GPBITMAP
  74055. \ffc\_gdiPlus.vcx
  74056. ENUMPIXELFORMAT
  74057. GPBITMAP
  74058. \ffc\_gdiPlus.vcx
  74059. GpBitmap
  74060. GPGRAPHICS
  74061. \ffc\_gdiPlus.vcx
  74062. GpGraphics
  74063. GdipDrawImageRectRect
  74064. gdiplus.dll
  74065. GdipCloneImage
  74066. GDIPlus.Dll
  74067. TCCLRMATRIX
  74068. TOBMP
  74069. TIFORMAT
  74070. TNBACKCOLOR
  74071. SETCOLORMATRIX
  74072. LNWIDTH
  74073. LNHEIGHT
  74074. IMAGEWIDTH
  74075. IMAGEHEIGHT
  74076. LONEWBMP
  74077. CREATE
  74078. LOGFX
  74079. CREATEFROMIMAGE
  74080. CLEAR    
  74081. LNSCRUNIT
  74082. LHGFX    
  74083. LNSRCUNIT
  74084. GDIPDRAWIMAGERECTRECT
  74085. GDIPLUS
  74086. STAT    
  74087. GETHANDLE
  74088. GDIPHANDLE    
  74089. SETHANDLE
  74090. DESTROY
  74091. LHCLONED
  74092. GDIPCLONEIMAGE
  74093. Generic Error
  74094. Invalid Parameter
  74095. Out Of Memory
  74096. Object Busy
  74097. Insufficient Buffer
  74098. Not Implemented
  74099. Win32 Error
  74100. Wrong State
  74101. Aborted
  74102. File Not Found
  74103. Value Overflow
  74104. Access Denied
  74105. Unknown Image Format
  74106. Font Family Not Found
  74107. Font Style Not Found
  74108. Not True Type Font
  74109. Unsupported Gdiplus Version
  74110. Gdiplus Not Initialized
  74111. Property Not Found
  74112. Property Not Supported
  74113. Unknown Error
  74114. TNSTATUSI
  74115. CHARACTER
  74116. GPBITMAP
  74117. \ffc\_gdiPlus.vcx
  74118. ENUMPIXELFORMAT
  74119. GPBITMAP
  74120. \ffc\_gdiPlus.vcx
  74121. GpBitmap
  74122. GPGRAPHICS
  74123. \ffc\_gdiPlus.vcx
  74124. GpGraphics
  74125. GPBITMAP
  74126. \ffc\_gdiPlus.vcx
  74127. GPGRAPHICS
  74128. \ffc\_gdiPlus.vcx
  74129. GpBitmap
  74130. GdipCloneImage
  74131. GDIPlus.Dll
  74132. GpGraphics
  74133. GdipDrawImageRectRect
  74134. gdiplus.dll
  74135. TCCLRMATRIX
  74136. TOBMP
  74137. TIFORMAT
  74138. SETCOLORMATRIX
  74139. LNWIDTH
  74140. LNHEIGHT
  74141. IMAGEWIDTH
  74142. IMAGEHEIGHT
  74143. LONEWBMP
  74144. CREATE
  74145. LOGFX
  74146. CREATEFROMIMAGE
  74147. LOCLONEDBMP
  74148. LHCLONED
  74149. GDIPCLONEIMAGE
  74150. GDIPLUS
  74151. STAT    
  74152. GETHANDLE    
  74153. SETHANDLE
  74154. CLEAR    
  74155. LNSCRUNIT
  74156. LHGFX    
  74157. LNSRCUNIT
  74158. GDIPDRAWIMAGERECTRECT
  74159. GDIPHANDLE
  74160. CHARACTER
  74161. GPBITMAP
  74162. \ffc\_gdiPlus.vcx
  74163. ENUMPIXELFORMAT
  74164. GPBITMAP
  74165. \ffc\_gdiPlus.vcx
  74166. GPGRAPHICS
  74167. \ffc\_gdiPlus.vcx
  74168. GpBitmap
  74169. GdipCloneImage
  74170. GDIPlus.Dll
  74171. GpGraphics
  74172. GdipDrawImageRectRect
  74173. gdiplus.dll
  74174. TCCLRMATRIX
  74175. TOBMP
  74176. TIFORMAT
  74177. SETCOLORMATRIX
  74178. LOCLONEDBMP
  74179. LOGFX
  74180. LHCLONED
  74181. GDIPCLONEIMAGE
  74182. GDIPLUS
  74183. STAT    
  74184. GETHANDLE    
  74185. SETHANDLE
  74186. CREATEFROMIMAGE
  74187. CLEAR
  74188. LNWIDTH
  74189. LNHEIGHT
  74190. IMAGEWIDTH
  74191. IMAGEHEIGHT    
  74192. LNSCRUNIT
  74193. LHGFX    
  74194. LNSRCUNIT
  74195. GDIPDRAWIMAGERECTRECT
  74196. GDIPHANDLE
  74197. Init,
  74198. GetHandle
  74199. stat_Assign
  74200. Destroy^
  74201. SetColorMatrix
  74202. SetGamma
  74203. ApplyImageAttributeU
  74204. DrawImageRectRectC
  74205. RemapTable
  74206. DisposeImageAttributes
  74207. MultiplyColorMatrix:
  74208. POINTF8
  74209. RECTFo
  74210. MAKEARGB
  74211. MakePointsFSequence
  74212. MakeColorMatrix
  74213. ColorMatrix
  74214. MakeColorMap
  74215. ApplyColorMatrix
  74216. ErrorInfo
  74217. __ApplyColorMatrix
  74218. ApplyColorMatrix_Orig@"
  74219. f2int2
  74220. GDIPHANDLE
  74221. GPATTRIB
  74222. CUSTOM
  74223. pr_pdfx.vcx
  74224. pr_pdfx.vct
  74225. pr_rtflistener.vcx
  74226. pr_rtflistener.vct
  74227. foxypreviewer.prg
  74228. c:\users\cesi\appdata\local\temp\
  74229. foxypreviewer.fxp
  74230. installfoxcode.prg
  74231. installfoxcode.fxp
  74232. images\
  74233. pr_top.bmp
  74234. pr_previous.bmp
  74235. pr_next.bmp
  74236. pr_bottom.bmp
  74237. pr_gotopage.bmp
  74238. pr_close.bmp
  74239. pr_print.bmp
  74240. pr_printpref.bmp
  74241. pr_save.bmp
  74242. pr_img.bmp
  74243. pr_pdf.bmp
  74244. pr_html.bmp
  74245. pr_word.bmp
  74246. pr_locate.bmp
  74247. pr_close2.bmp
  74248. libhpdf.dll
  74249. wwrite.ico
  74250. pr_mail.bmp
  74251. pr_excellistener.vcx
  74252. pr_excellistener.vct
  74253. pr_excel.bmp
  74254. _frxcursor.vcx
  74255. _frxcursor.vct
  74256. pr_top_32.bmp
  74257. pr_previous_32.bmp
  74258. pr_next_32.bmp
  74259. pr_bottom_32.bmp
  74260. pr_gotopage_32.bmp
  74261. pr_close_32.bmp
  74262. pr_print_32.bmp
  74263. pr_save_32.bmp
  74264. pr_locate_32.bmp
  74265. foxypreviewer_locs.dbf
  74266. pr_1page_32.bmp
  74267. pr_2page_32.bmp
  74268. pr_4page_32.bmp
  74269. pr_close2_32.bmp
  74270. pr_mail_32.bmp
  74271. pr_printpref_32.bmp
  74272. pr_4page.bmp
  74273. pr_1page.bmp
  74274. pr_2page.bmp
  74275. foxypreviewer_defaultsettings.dbf
  74276. pr_settings.scx
  74277. pr_settings.sct
  74278. pr_gear.bmp
  74279. pr_gear_32.bmp
  74280. pr_sendmail.scx
  74281. pr_sendmail.sct
  74282. pr_attach.bmp
  74283. _gdiplus.vcx
  74284. _gdiplus.vct
  74285. pr_search.scx
  74286. pr_search.sct
  74287. pr_search.bmp
  74288. pr_search_32.bmp
  74289. pr_searchagain.bmp
  74290. pr_searchagain_32.bmp
  74291. pr_searchback.bmp
  74292. pr_searchback_32.bmp
  74293. pr_ctl32_progressbar.vcx
  74294. pr_ctl32_progressbar.vct
  74295. pr_cpzero.prg
  74296. pr_cpzero.fxp
  74297. pr_foxyhelper.vcx
  74298. pr_foxyhelper.vct
  74299. pr_reportlistener.vcx
  74300. pr_reportlistener.vct
  74301. pr_sendmail2.scx
  74302. pr_sendmail2.sct
  74303. pr_htmledit.vcx
  74304. pr_htmledit.vct
  74305. pr_adress.bmp
  74306. pr_sendmessage.bmp
  74307. pr_align_left.bmp
  74308. pr_align_center.bmp
  74309. pr_align_right.bmp
  74310. pr_textcolor.bmp
  74311. pr_fontback.bmp
  74312. pr_textmoveright.bmp
  74313. pr_textmoveleft.bmp
  74314. pr_listdot.bmp
  74315. pr_listnumber.bmp
  74316. pr_undo.bmp
  74317. pr_hyperlink.bmp
  74318. pr_getimage.bmp
  74319. pr_redo.bmp
  74320. pr_cut.bmp
  74321. pr_copy.bmp
  74322. pr_paste.bmp
  74323. pr_new.bmp
  74324. pr_open.bmp
  74325. pr_clean.bmp
  74326. pr_align_justify.bmp
  74327. pr_adressbook.scx
  74328. pr_adressbook.sct
  74329. pr_mail03.ico
  74330. pr_rcsgridsort.vcx
  74331. pr_rcsgridsort.vct
  74332. pr_sortascending.bmp
  74333. pr_sortdescending.bmp
  74334. pr_htmllistener2.vcx
  74335. pr_htmllistener2.vct
  74336. pr_ooxml2xls.prg
  74337. pr_ooxml2xls.fxp
  74338. __readme.txt
  74339. pr_mht.bmp
  74340. _reportoutputconfig.dbf
  74341. _reportoutputconfig.fpt
  74342. _reportoutputconfig.cdx
  74343. frxcontrols.vcx
  74344. frxcontrols.vct
  74345. frxpreview.vcx
  74346. frxpreview.vct
  74347. pr_frxpreview.prg
  74348. pr_frxpreview.fxp
  74349. frxcommon.prg
  74350. frxcommon.fxp
  74351. grabber.gif
  74352. prefirst.bmp
  74353. preprev.bmp
  74354. gotopage.msk
  74355. prenext.bmp
  74356. prelast.bmp
  74357. 1page.msk
  74358. 2page.msk
  74359. 4page.msk
  74360. preclose.bmp
  74361. preclose.msk
  74362. print.msk
  74363. preview.bmp
  74364. pr_gdiplushelper.prg
  74365. pr_gdiplushelper.fxp
  74366.