Что нового

RichEdit - Прокрутить текст до нужного абзаца

GUIMish

Знающий
Сообщения
122
Репутация
12
Здравствуйте, у меня вот такой вопрос, как мне-бы сделать так что-бы при нажатии на кнопку, он прокручивал текст до 5 абзаца.

Пробовал _GUICtrlRichEdit_ScrollLines($hWnd, $iQlines), но он прокручивает строку, а не абзац.

Код:
#include <GuiRichEdit.au3>

$Window = GUICreate("Окно", 250, 300, -1, -1)

$hRichEdit = _GUICtrlRichEdit_Create($Window, "", 0, 0, 250, 260, BitOR(0x0004, 0x00200000))
	_GUICtrlRichEdit_SetParaIndents($hRichEdit, Default, 0, .1)
	SetText()

$BtnMove = GUICtrlCreateButton("Move", 70, 270, 100, 20)

GUISetState()
While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $BtnMove
			; Какую команду взять
	EndSwitch
WEnd

Func SetText()
	_GUICtrlRichEdit_SetText($hRichEdit, "Гектор Мало" & @CRLF & _
										"Ромен Кальбри " & @CRLF & @CRLF & _
										"Глава I" & @CRLF & _
										"Зная мое теперешнее положение, не следует думать, что судьба баловала меня с раннего детства. Предки мои, хотя это слово может показаться несколько напыщенным, были рыбаками. Отец был одиннадцатым ребенком в семье, и деду стоило больших трудов поставить всех на ноги, потому что ремесло рыбака — одно из самых тяжелых, а доход от него очень невелик. Непосильный труд и опасности — настоящий удел рыбака, а заработок — только дело случая." & @CRLF & _
										"Восемнадцати лет отец был взят на морскую службу, что во Франции считается своего рода воинской повинностью; таким путем государство заставляет служить себе всех моряков в течение тридцати двух лет — с восемнадцати до пятидесятилетнего возраста. Уходя из дому, отец не умел ни читать, ни писать. Вернулся же старшим унтер-офицером, то есть дослужился до самого высокого чина, какой мог получить моряк, не окончивший государственного морского училища." & @CRLF & _
										"Пор-Дье — местечко, где я родился, — находится вблизи от английских островов, а потому Франция постоянно держит здесь военный катер, который должен следить за тем, чтобы жители острова Джерсей не ловили нашу рыбу, а французские моряки соблюдали установленные правила рыбной ловли. На этот катер и назначили моего отца для продолжения службы. Это было большой удачей, потому что, хотя моряк и считает судно, на котором плавает, своим домом, он все же бывает счастлив вернуться в родные края." & @CRLF & _
										"Через пятнадцать месяцев после возвращения отца я полнился на свет. Родился я в марте, в пятницу, да еще в новолуние, поэтому все единодушно предсказывали, что мне предстоит много приключений, морских путешествий и что и буду очень несчастлив, если только влияние луны не окажется сильнее влияния пятницы. Приключений у меня было немало — как раз о них-то я и собираюсь вам рассказать, морские путешествия я тоже совершал; что же касается борьбы двух влияний, то она была весьма ожесточенной, и вы сами решите по окончании моего повествования, которое же из них победило." & @CRLF & _
										"Предсказать мне приключения и путешествия — значилось признать меня настоящим Кальбри, потому что все Кальбри из поколения в поколение были моряками, и, если верить преданию, так повелось еще со времени Троянской войны. Такое древнее происхождение приписываем себе, конечно, не мы, а ученые, которые утверждают, что в Пор-Дье и поныне существует около сотни семей — как раз семей моряков — потомков жителей финикийской колонии. Так или иначе, бесспорно одно: мы совсем не похожи ни на нормандцев, ни на бретонцев — у нас черные глаза, тонкие носы, смуглая кожа, а наши рыбачьи лодки — точная копия лодки Одиссея, как ее описал Гомер: у них одна мачта и один четырехугольный парус. Такое снаряжение обычно для греческого Архипелага, но в Ла-Манше оно нигде больше не встречается.")
EndFunc
 
Автор
G

GUIMish

Знающий
Сообщения
122
Репутация
12
Я долго думал, и никак не мог придумать, мой брат мне подсказал немного, и вот получился код:

Код:
Func _GUICtrlRichEdit_ScrollPara($hWnd, $iQlines)
	Local $GetLineLength, $aArray, $aLen, $aNum
	$aArray = StringSplit(_GUICtrlRichEdit_GetText($hWnd), @CRLF)
	If $iQlines < ($aArray[0]+1) Then
		For $i = 1 to ($iQlines-1)
			$aLen += StringLen($aArray[$i]) + 1
		Next
	EndIf
	If Not @error Then
		_GUICtrlRichEdit_GotoCharPos($hWnd, $aLen)
		_GUICtrlRichEdit_ScrollLineOrPage($hWnd, "pd")
		_GUICtrlRichEdit_ScrollToCaret($hWnd)
	EndIf
EndFunc


А вот как он работает:
Код:
#include <GuiRichEdit.au3>

$Window = GUICreate("Окно", 250, 300, -1, -1)

$hRichEdit = _GUICtrlRichEdit_Create($Window, "", 0, 0, 250, 260, BitOR(0x0004, 0x00200000))
	_GUICtrlRichEdit_SetParaIndents($hRichEdit, Default, 0, .1)
	SetText()

$BtnMove = GUICtrlCreateButton("Move", 70, 270, 100, 20, 0x0001)
	GUICtrlSetState(-1, 256)

GUISetState()
While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $BtnMove
			_GUICtrlRichEdit_ScrollPara($hRichEdit, 7)
	EndSwitch
WEnd

Func _GUICtrlRichEdit_ScrollPara($hWnd, $iQlines)
	Local $GetLineLength, $aArray, $aLen, $aNum
	$aArray = StringSplit(_GUICtrlRichEdit_GetText($hWnd), @CRLF)
	If $iQlines < ($aArray[0]+1) Then
		For $i = 1 to ($iQlines-1)
			$aLen += StringLen($aArray[$i]) + 1
		Next
	EndIf
	If Not @error Then
		_GUICtrlRichEdit_GotoCharPos($hWnd, $aLen)
		_GUICtrlRichEdit_ScrollLineOrPage($hWnd, "pd")
		_GUICtrlRichEdit_ScrollToCaret($hWnd)
	EndIf
EndFunc

Func SetText()
	_GUICtrlRichEdit_SetText($hRichEdit, "Гектор Мало" & @CRLF & _
										"Ромен Кальбри " & @CRLF & @CRLF & _
										"Глава I" & @CRLF & _
										"Зная мое теперешнее положение, не следует думать, что судьба баловала меня с раннего детства. Предки мои, хотя это слово может показаться несколько напыщенным, были рыбаками. Отец был одиннадцатым ребенком в семье, и деду стоило больших трудов поставить всех на ноги, потому что ремесло рыбака — одно из самых тяжелых, а доход от него очень невелик. Непосильный труд и опасности — настоящий удел рыбака, а заработок — только дело случая." & @CRLF & _
										"Восемнадцати лет отец был взят на морскую службу, что во Франции считается своего рода воинской повинностью; таким путем государство заставляет служить себе всех моряков в течение тридцати двух лет — с восемнадцати до пятидесятилетнего возраста. Уходя из дому, отец не умел ни читать, ни писать. Вернулся же старшим унтер-офицером, то есть дослужился до самого высокого чина, какой мог получить моряк, не окончивший государственного морского училища." & @CRLF & _
										"Пор-Дье — местечко, где я родился, — находится вблизи от английских островов, а потому Франция постоянно держит здесь военный катер, который должен следить за тем, чтобы жители острова Джерсей не ловили нашу рыбу, а французские моряки соблюдали установленные правила рыбной ловли. На этот катер и назначили моего отца для продолжения службы. Это было большой удачей, потому что, хотя моряк и считает судно, на котором плавает, своим домом, он все же бывает счастлив вернуться в родные края." & @CRLF & _
										"Через пятнадцать месяцев после возвращения отца я полнился на свет. Родился я в марте, в пятницу, да еще в новолуние, поэтому все единодушно предсказывали, что мне предстоит много приключений, морских путешествий и что и буду очень несчастлив, если только влияние луны не окажется сильнее влияния пятницы. Приключений у меня было немало — как раз о них-то я и собираюсь вам рассказать, морские путешествия я тоже совершал; что же касается борьбы двух влияний, то она была весьма ожесточенной, и вы сами решите по окончании моего повествования, которое же из них победило." & @CRLF & _
										"Предсказать мне приключения и путешествия — значилось признать меня настоящим Кальбри, потому что все Кальбри из поколения в поколение были моряками, и, если верить преданию, так повелось еще со времени Троянской войны. Такое древнее происхождение приписываем себе, конечно, не мы, а ученые, которые утверждают, что в Пор-Дье и поныне существует около сотни семей — как раз семей моряков — потомков жителей финикийской колонии. Так или иначе, бесспорно одно: мы совсем не похожи ни на нормандцев, ни на бретонцев — у нас черные глаза, тонкие носы, смуглая кожа, а наши рыбачьи лодки — точная копия лодки Одиссея, как ее описал Гомер: у них одна мачта и один четырехугольный парус. Такое снаряжение обычно для греческого Архипелага, но в Ла-Манше оно нигде больше не встречается.")
EndFunc
 
Верх