| 1 | |
|---|
| 2 | ; |
|---|
| 3 | ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
|---|
| 4 | ; AS IN 3.3.12.0 .... note the ? marks in the iWparam statements ... BUT MAINLY the "If $hFile - 1 Then ..." statement |
|---|
| 5 | ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
|---|
| 6 | |
|---|
| 7 | ; #FUNCTION# ==================================================================================================================== |
|---|
| 8 | ; Authors........: Chris Haslam (c.haslam) |
|---|
| 9 | ; Modified ......: |
|---|
| 10 | ; =============================================================================================================================== |
|---|
| 11 | Func _GUICtrlRichEdit_StreamToFile($hWnd, $sFilespec, $bIncludeCOM = True, $iOpts = 0, $iCodePage = 0) |
|---|
| 12 | If Not _WinAPI_IsClassName($hWnd, $__g_sRTFClassName) Then Return SetError(101, 0, False) |
|---|
| 13 | |
|---|
| 14 | Local $iWparam |
|---|
| 15 | If StringRight($sFilespec, 4) = ".rtf" Then |
|---|
| 16 | $iWparam = ($bIncludeCOM ? $SF_RTF : $SF_RTFNOOBJS) |
|---|
| 17 | Else |
|---|
| 18 | $iWparam = ($bIncludeCOM ? $SF_TEXTIZED : $SF_TEXT) |
|---|
| 19 | If BitAND($iOpts, $SFF_PLAINRTF) Then Return SetError(1041, 0, False) |
|---|
| 20 | EndIf |
|---|
| 21 | ; only opts are $SFF_PLAINRTF and $SF_UNICODE |
|---|
| 22 | If BitAND($iOpts, BitNOT(BitOR($SFF_PLAINRTF, $SF_UNICODE))) Then Return SetError(1042, 0, False) |
|---|
| 23 | If BitAND($iOpts, $SF_UNICODE) Then |
|---|
| 24 | If Not BitAND($iWparam, $SF_TEXT) Then Return SetError(1043, 0, False) |
|---|
| 25 | EndIf |
|---|
| 26 | |
|---|
| 27 | If _GUICtrlRichEdit_IsTextSelected($hWnd) Then $iWparam = BitOR($iWparam, $SFF_SELECTION) |
|---|
| 28 | |
|---|
| 29 | $iWparam = BitOR($iWparam, $iOpts) |
|---|
| 30 | If $iCodePage <> 0 Then |
|---|
| 31 | $iWparam = BitOR($iWparam, $SF_USECODEPAGE, BitShift($iCodePage, -16)) |
|---|
| 32 | EndIf |
|---|
| 33 | Local $tEditStream = DllStructCreate($tagEDITSTREAM) |
|---|
| 34 | DllStructSetData($tEditStream, "pfnCallback", DllCallbackGetPtr($__g_pGRC_StreamToFileCallback)) |
|---|
| 35 | Local $hFile = FileOpen($sFilespec, $FO_OVERWRITE) |
|---|
| 36 | If $hFile - 1 Then Return SetError(102, 0, False) ;<<<<<<<<<<<<<<<<<<<<<<<<<<< problem |
|---|
| 37 | |
|---|
| 38 | DllStructSetData($tEditStream, "dwCookie", $hFile) ; -> Send handle to CallbackFunc |
|---|
| 39 | _SendMessage($hWnd, $EM_STREAMOUT, $iWparam, $tEditStream, 0, "wparam", "struct*") |
|---|
| 40 | FileClose($hFile) |
|---|
| 41 | Local $iError = DllStructGetData($tEditStream, "dwError") |
|---|
| 42 | If $iError <> 0 Then SetError(700, $iError, False) |
|---|
| 43 | Return True |
|---|
| 44 | EndFunc ;==>_GUICtrlRichEdit_StreamToFile |
|---|
| 45 | |
|---|
| 46 | |
|---|
| 47 | ; |
|---|
| 48 | ; AS IT WAS IN 3.3.8.1 ... for reference <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
|---|
| 49 | ; |
|---|
| 50 | ; #FUNCTION# ==================================================================================================================== |
|---|
| 51 | ; Name ..........: _GUICtrlRichEdit_StreamToFile |
|---|
| 52 | ; Description....: Writes contens of a control to a file |
|---|
| 53 | ; Syntax ........: _GUICtrlRichEdit_StreamToFile($hWnd, $sFilespec[, $fIncludeCOM=True[, $iOpts=0[, $iCodePage = 0]]]) |
|---|
| 54 | ; Parameters.....: $hWnd - Handle to the control |
|---|
| 55 | ; $sFileSpec - file specification |
|---|
| 56 | ; $fIncludeCOM - (Optional) |
|---|
| 57 | ; |True (default): |
|---|
| 58 | ; | If writing to a .rtf file, includes any COM objects (space consuming) |
|---|
| 59 | ; | If writing to any other file, writes a text represntation of COM objects |
|---|
| 60 | ; |False: Writes spaces instead of COM objects |
|---|
| 61 | ; $iOpts - additional options: (Optional) (default: 0) |
|---|
| 62 | ; |$SFF_PLAINTRTF - write only rich text keywords common to all languages |
|---|
| 63 | ; |$SF_UNICODE - write Unicode |
|---|
| 64 | ; $iCodePage - Generate UTF-8 and text using this code page (Optional) |
|---|
| 65 | ; |Default: do not |
|---|
| 66 | ; Return values..: Success - True |
|---|
| 67 | ; Failure - False and sets @error: |
|---|
| 68 | ; |101 - $hWnd is not a handle |
|---|
| 69 | ; |102 - Can't create $sFilespec |
|---|
| 70 | ; |1041 - $SFF_PLAINRTF is invalid for a text file |
|---|
| 71 | ; |1042 - $opts: invalid option |
|---|
| 72 | ; |1043 - $SF_UNICODE is only valid for a text file |
|---|
| 73 | ; |700 - internal error |
|---|
| 74 | ; Authors........: Chris Haslam (c.haslam) |
|---|
| 75 | ; Modified ......: |
|---|
| 76 | ; Remarks .......: If text is selected, writes only the selection, else writes all text in the control |
|---|
| 77 | ;+ |
|---|
| 78 | ; If the extension in $sFileSpec is .rtf, RTF is written, else text |
|---|
| 79 | ; Related .......: _GUICtrlRichEdit_SetLimitOnText, _GUICtrlRichEdit_StreamFromVar, _GUICtrlRichEdit_StreamToFile |
|---|
| 80 | ; Link ..........: @@MsdnLink@@ EM_STREAMIN |
|---|
| 81 | ; Example .......: Yes |
|---|
| 82 | ; =============================================================================================================================== |
|---|
| 83 | Func _GUICtrlRichEdit_StreamToFile($hWnd, $sFilespec, $fIncludeCOM = True, $iOpts = 0, $iCodePage = 0) |
|---|
| 84 | If Not _WinAPI_IsClassName($hWnd, $_GRE_sRTFClassName) Then Return SetError(101, 0, False) |
|---|
| 85 | |
|---|
| 86 | Local $iWparam |
|---|
| 87 | If StringRight($sFilespec, 4) = ".rtf" Then |
|---|
| 88 | $iWparam = _Iif($fIncludeCOM, $SF_RTF, $SF_RTFNOOBJS) |
|---|
| 89 | Else |
|---|
| 90 | $iWparam = _Iif($fIncludeCOM, $SF_TEXTIZED, $SF_TEXT) |
|---|
| 91 | If BitAND($iOpts, $SFF_PLAINRTF) Then Return SetError(1041, 0, False) |
|---|
| 92 | EndIf |
|---|
| 93 | ; only opts are $SFF_PLAINRTF and $SF_UNICODE |
|---|
| 94 | If BitAND($iOpts, BitNOT(BitOR($SFF_PLAINRTF, $SF_UNICODE))) Then Return SetError(1042, 0, False) |
|---|
| 95 | If BitAND($iOpts, $SF_UNICODE) Then |
|---|
| 96 | If Not BitAND($iWparam, $SF_TEXT) Then Return SetError(1043, 0, False) |
|---|
| 97 | EndIf |
|---|
| 98 | |
|---|
| 99 | If _GUICtrlRichEdit_IsTextSelected($hWnd) Then $iWparam = BitOR($iWparam, $SFF_SELECTION) |
|---|
| 100 | |
|---|
| 101 | $iWparam = BitOR($iWparam, $iOpts) |
|---|
| 102 | If $iCodePage <> 0 Then |
|---|
| 103 | $iWparam = BitOR($iWparam, $SF_USECODEPAGE, BitShift($iCodePage, -16)) |
|---|
| 104 | EndIf |
|---|
| 105 | Local $tEditStream = DllStructCreate($tagEDITSTREAM) |
|---|
| 106 | DllStructSetData($tEditStream, "pfnCallback", DllCallbackGetPtr($_GRC_StreamToFileCallback)) |
|---|
| 107 | Local $hFile = FileOpen($sFilespec, 2) ; overwrite |
|---|
| 108 | If $hFile - 1 Then Return SetError(102, 0, False) |
|---|
| 109 | |
|---|
| 110 | DllStructSetData($tEditStream, "dwCookie", $hFile) ; -> Send handle to CallbackFunc |
|---|
| 111 | _SendMessage($hWnd, $EM_STREAMOUT, $iWparam, $tEditStream, 0, "wparam", "struct*") |
|---|
| 112 | FileClose($hFile) |
|---|
| 113 | Local $iError = DllStructGetData($tEditStream, "dwError") |
|---|
| 114 | If $iError <> 0 Then SetError(700, $iError, False) |
|---|
| 115 | Return True |
|---|
| 116 | EndFunc ;==>_GUICtrlRichEdit_StreamToFile |
|---|
| 117 | |
|---|