Modify

Opened 15 years ago

Closed 15 years ago

#1441 closed Bug (Fixed)

_GUICtrlRichEdit_GetText: last character truncated

Reported by: ProgAndy Owned by: Jon
Milestone: 3.3.5.4 Component: Standard UDFs
Version: 3.3.5.1 Severity: None
Keywords: Cc:

Description

_GUICtrlRichEdit_GetText sets the length of the string-buffer incorrect. This results in a missing character at the end of the string.

This is the fixed function:

; #FUNCTION# ====================================================================================================================
; Name ..........: _GUICtrlRichEdit_GetText
; Description ...: Get all of the text in the control
; Syntax ........: _GUICtrlRichEdit_GetText($hWnd[, $fCrToCrLf = False[, $iCodePage = 0[, $sReplChar = ""]]])
; Parameters ....: $hWnd 			- Handle to control
;                  $fCrToCrLf - Convert each CR to a CrLf (Optional)
;                  |True - do it
;                  | don't (Default)
;                  $iCodePage - code page used in translation (Optional)
;                  |Default: use system default
;                  |CP_ACP for ANSI, 1200 for Unicode
;                  $sReplaChar - Character used if $iCodePage is not 1200 and a wide character cannot be represented in
;                  +specified code page (Optional)
; Return Values. : Success -	the text
;                  Failure - "" and sets @error:
;                  |101 - $hWnd is not a handle
;                  |102 - $fCrToCrLf must be True or False
;                  |103 - $iCodePage is not a number
;                  |700 - internal error
; Authors........: Prog@ndy
; Modified ......: Chris Haslam (c.haslam), jpm, Prog@ndy
; Remarks .......: On success, if $sReplChar set, @extended contains whether this character was used
;+
;                  Call _GUICtrlRichEdit_IsModified() to determine whether the text has changed
; Related .......: _GUICtrlRichEdit_SetText, _GUICtrlRichEdit_AppendText, _GUICtrlRichEdit_InsertText, _GUICtrlRichEdit_IsModified
; Link ..........: @@MsdnLink@@ EM_GETTEXTEX
; Example .......: Yes
; ===============================================================================================================================
Func _GUICtrlRichEdit_GetText($hWnd, $fCrToCrLf = False, $iCodePage = 0, $sReplChar = "")
	If Not IsHWnd($hWnd) Then Return SetError(101, 0, "")
	If Not IsBool($fCrToCrLf) Then Return SetError(102, 0, "")
	If Not __GCR_IsNumeric($iCodePage) Then Return SetError(103, 0, "")

	Local $iLen = _GUICtrlRichEdit_GetTextLength($hWnd, False,True) + 1
	Local $sUni=''
	If $iCodePage=$CP_UNICODE Or Not $iCodePage Then $sUni="w"
	Local $tText = DllStructCreate($sUni & "char[" & $iLen & "]")

	Local $tGetTextEx = DllStructCreate($tagGETTEXTEX)
	DllStructSetData($tGetTextEx, "cb", DllStructGetSize($tText))

	Local $iFlags = 0
	If $fCrToCrLf Then $iFlags = $GT_USECRLF
	DllStructSetData($tGetTextEx, "flags", $iFlags)

	If $iCodePage = 0 Then $iCodePage =  $CP_UNICODE
	DllStructSetData($tGetTextEx, "codepage", $iCodePage)

	Local  $pUsedDefChar = 0, $pDefaultChar = 0
	If $sReplChar <> "" Then
		Local $tDefaultChar = DllStructCreate("char")
		$pDefaultChar = DllStructGetPtr( $tDefaultChar, 1)
		DllStructSetData( $tDefaultChar, 1, $sReplChar)
		Local $tUsedDefChar = DllStructCreate("bool")
		$pUsedDefChar = DllStructGetPtr( $tUsedDefChar, 1)
	EndIf
	DllStructSetData($tGetTextEx, "lpDefaultChar", $pDefaultChar)
	DllStructSetData($tGetTextEx, "lpbUsedDefChar", $pUsedDefChar)

	Local $iRet = _SendMessage($hWnd, $EM_GETTEXTEX, DllStructGetPtr($tGetTextEx), DllStructGetPtr($tText))
	If $iRet = 0 Then Return SetError(700, 0, "")
	If $sReplChar <> "" Then SetExtended(DllStructGetData($tUsedDefChar, 1) <> 0)
	Return DllStructGetData($tText, 1)
EndFunc   ;==>_GUICtrlRichEdit_GetText

Attachments (0)

Change History (1)

comment:1 Changed 15 years ago by Jon

  • Milestone set to 3.3.5.4
  • Owner changed from Gary to Jon
  • Resolution set to Fixed
  • Status changed from new to closed

Fixed by revision [5670] in version: 3.3.5.4

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Modify Ticket

Action
as closed The owner will remain Jon.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.