#include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $hGui, $hRichEdit, $iMsg, $iW = 320, $iH = 420
$hGui = GUICreate("Example (" & StringTrimRight(@ScriptName, 4) & ")", $iW, $iH, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)
$hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test.", 10, 10, $iW - 20, $iH - 100, _
BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_AppendText($hRichEdit, @CR & "This is more text")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUISetState()
While True
$iMsg = GUIGetMsg()
Select
Case $iMsg = $GUI_EVENT_CLOSE
GUIDelete()
Exit
EndSelect
WEnd
Func WM_SIZE()
Local $iWinClientSize = WinGetClientSize($hGui)
Local $iWinPos = WinGetPos($hGui)
Local $i_W = $iWinClientSize[0] - 20
Local $i_H = $iWinClientSize[1] - 100 + ($iWinPos[3] - $iWinClientSize[1])
WinMove($hRichEdit, '', 10, 10, $i_W, $i_H)
EndFunc ;==>WM_SIZE
ControlMove
gregaz сказал(а):А я рассчитывал, что в его библиотеке есть ф-ия , которая обеспечивает Resize и дает возможность устанавливать необходимые параметры Resize.
Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
;...
Local $iWinClientSize_W = Dec(StringRight($lParam, 4))
Local $iWinClientSize_H = Dec(StringMid($lParam, 3, 4))
;...
Дело в том, что обычно я не уверен, что мой ответ правильный (работает), пока его не проверю, Поэтому проверяю свои теоретические догадки на практике. А потому и выкладываю уже готовый к запуску код.вы предоставляете полностью готовые к запуску примеры
Для этого есть _WinAPI_LoWord/_WinAPI_HiWord.нет более изящного способа получить из $lParam low-order word, high-order word
BitAND($lParam, 0xFFFF)
BitShift($lParam, 16)
#include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $hGui, $hRichEdit, $iMsg, $iW = 320, $iH = 420
$hGui = GUICreate('Example (' & StringTrimRight(@ScriptName, 4) & ')', $iW, $iH, -1, -1, _
BitOR($WS_SIZEBOX, $WS_SYSMENU, $WS_CLIPCHILDREN))
$hRichEdit = _GUICtrlRichEdit_Create($hGui, 'This is a test.', 10, 10, $iW - 20, $iH - 100, _
BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_AppendText($hRichEdit, @CR & 'This is more text' & @CR & $hRichEdit)
GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
GUISetState()
While True
$iMsg = GUIGetMsg()
Select
Case $iMsg = $GUI_EVENT_CLOSE
GUIDelete()
Exit
EndSelect
WEnd
Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hGui
Local $iWinPos = WinGetPos($hGui)
Local $iWinClientSize_W = BitAND($lParam, 0xFFFF)
Local $iWinClientSize_H = BitShift($lParam, 16)
Local $i_W = $iWinClientSize_W - 20
Local $i_H = $iWinClientSize_H - 100 + ($iWinPos[3] - $iWinClientSize_H)
;WinMove($hRichEdit, '', 10, 10, $i_W, $i_H)
ControlMove($hGui, '', $hRichEdit, 10, 10, $i_W, $i_H)
EndSwitch
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
$oRP = ObjCreate('RICHTEXT.RichtextCtrl.1')
$hGUI = GUICreate('richtext object', 480, 640, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_SIZEBOX))
$GUIActiveX = GUICtrlCreateObj($oRP, 5, 5, 470, 630)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
$oRP.Text = 'some text'
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = -3
Exit
EndSelect
WEnd
H:\AUTOIT WINOWS_7\MY REG EXP TESTER\Test.au3 (7) : ==> Variable must be of type "Object".:
$oRP.Text = 'some text'
$oRP^ ERROR
У меня на Windows XP SP3 отлично работает.
Проверьте кто-нибудь у кого 7-ка. (Кажется у Yashied -7 ?)
Если работает ,значит мне надо переустанавливать систему.
$oRP = ObjCreate('RICHTEXT.RichtextCtrl.1')
MsgBox(0, '', @OSVersion & @CRLF & @OSType & @CRLF & @error)
---------------------------
---------------------------
WIN_7
WIN32_NT
-2147221005
---------------------------
OK
---------------------------
madmasles сказал(а):Наверное, Ваш вариант самый оптимальный.
В этом примере нехватает $WS_CLIPCHILDREN у Gui, иначе при изменений размера элемент Richedit “маргает”.у меня получилось следующее