Hi folks,
I tried to search an answer for this, but without any luck, so if you could give me some tips with this, please.
I'm trying to use RichEdit box as an (optional) extra data display, which will receive text as the main program proceeds (kind of debug and/or log window). I selected RichEdit tech, because it seems to handle more text. The problem I have with this is, that I just can't get the RichEdit to scroll automatically to the last line without receiving focus first.
This version demoed here will scroll to the end after you click on it. Or set the focus there programmatically. Usage: click on "Show extra data window", after that click on "Generate some text" to fill it. The last line (no.50) should be visible without activating/focusing the RichEdit box.
What should I try?
Thank You.
cheers.. aSa C[_]
I tried to search an answer for this, but without any luck, so if you could give me some tips with this, please.
I'm trying to use RichEdit box as an (optional) extra data display, which will receive text as the main program proceeds (kind of debug and/or log window). I selected RichEdit tech, because it seems to handle more text. The problem I have with this is, that I just can't get the RichEdit to scroll automatically to the last line without receiving focus first.
This version demoed here will scroll to the end after you click on it. Or set the focus there programmatically. Usage: click on "Show extra data window", after that click on "Generate some text" to fill it. The last line (no.50) should be visible without activating/focusing the RichEdit box.
What should I try?
Code:
#PBFORMS CREATED V1.51 #COMPILE EXE #DIM ALL #DEBUG ERROR ON #TOOLS OFF ___________________________________________________________________________________________________ #PBFORMS BEGIN INCLUDES #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #IF NOT %DEF(%RICHEDIT_INC) #INCLUDE "RICHEDIT.INC" #ENDIF #INCLUDE "PBForms.INC" #PBFORMS END INCLUDES ___________________________________________________________________________________________________ #PBFORMS BEGIN CONSTANTS %IDD_dlgMAIN = 101 %IDD_dlgEXTRADATA = 102 %IDC_btnSHOWEXTRADATA = 4020 %IDC_redEXTRADATA = 4300 %IDC_btnSUMTEXT = 4301 #PBFORMS END CONSTANTS ___________________________________________________________________________________________________ DECLARE CALLBACK FUNCTION ShowMAINProc() DECLARE FUNCTION ShowMAIN(BYVAL hParent AS DWORD) AS LONG DECLARE CALLBACK FUNCTION ShowEXTRADATAProc() DECLARE FUNCTION ShowEXTRADATA(BYVAL hDlg AS DWORD) AS LONG #PBFORMS DECLARATIONS DECLARE FUNCTION TEXTLOG(txt$) AS LONG ___________________________________________________________________________________________________ GLOBAL gMainHDLG, gExtraDataHDLG AS LONG ___________________________________________________________________________________________________ ___________________________________________________________________________________________________ FUNCTION PBMAIN() PBFormsRichEdit () ' Load RichEdit ShowMAIN %HWND_DESKTOP PBFormsRichEdit (%TRUE) ' Unload RichEdit END FUNCTION ___________________________________________________________________________________________________ ___________________________________________________________________________________________________ CALLBACK FUNCTION ShowMAINProc() LOCAL i AS LONG SELECT CASE AS LONG CB.MSG CASE %WM_INITDIALOG '------------------------------------------------------------------- '------------------------------------------------------------------- CASE %WM_DESTROY '------------------------------------------------------------------- IF ISTRUE(gExtraDataHDLG) THEN DIALOG SEND gExtraDataHDLG, %WM_SYSCOMMAND, %SC_CLOSE, 0 END IF '------------------------------------------------------------------- CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD '------------------------------------------------------------------- IF ISFALSE CB.WPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF '------------------------------------------------------------------- CASE %WM_COMMAND '------------------------------------------------------------------- SELECT CASE AS LONG CB.CTL CASE %IDC_btnSHOWEXTRADATA '--------------------------------------------------------------- IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN IF gExtraDataHDLG=0 THEN CALL ShowEXTRADATA(CB.HNDL) END IF END IF '--------------------------------------------------------------- CASE %IDC_btnSUMTEXT '--------------------------------------------------------------- IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN IF ISTRUE(gExtraDataHDLG) THEN FOR i=1 TO 50 TEXTLOG("The last line (and caret) should be visible without setting focus here " & FORMAT$(i) & $CRLF) NEXT END IF END IF '--------------------------------------------------------------- END SELECT '------------------------------------------------------------------- END SELECT END FUNCTION ___________________________________________________________________________________________________ FUNCTION ShowMAIN(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_dlgMAIN->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "MainDialog", 58, 62, 211, 73, %WS_POPUP OR %WS_BORDER _ OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR _ %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, _ %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _ %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD BUTTON, hDlg, %IDC_btnSHOWEXTRADATA, "Show extra data window", _ 15, 25, 75, 25, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_TEXT OR _ %BS_MULTILINE OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, _ %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL ADD BUTTON, hDlg, %IDC_btnSUMTEXT, "Generate some text", 120, 25, _ 75, 25 #PBFORMS END DIALOG gMainHDLG = hDlg DIALOG SHOW MODAL hDlg, CALL ShowMAINProc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_dlgMAIN #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION ___________________________________________________________________________________________________ ___________________________________________________________________________________________________ CALLBACK FUNCTION ShowEXTRADATAProc() STATIC gRTFtop, gRTFbottom, gRTFleft, gRTFright AS LONG LOCAL tmpDlgSizex, tmpDlgSizey, tmpsizex, tmpsizey AS LONG SELECT CASE AS LONG CB.MSG CASE %WM_INITDIALOG '------------------------------------------------------------------- DIALOG GET CLIENT CB.HNDL TO tmpDlgSizex, tmpDlgSizey ' ensin RTF boxi dialogin kokoiseksi CONTROL SET LOC CB.HNDL, %IDC_redEXTRADATA, 0,0 CONTROL SET SIZE CB.HNDL, %IDC_redEXTRADATA, tmpDlgSizex, tmpDlgSizey ' richedit, levitys pystyyn ja vaakaan CONTROL GET LOC CB.HNDL, %IDC_redEXTRADATA TO gRTFleft, gRTFtop CONTROL GET SIZE CB.HNDL, %IDC_redEXTRADATA TO tmpsizex, tmpsizey gRTFright = tmpDlgSizex-gRTFleft-tmpsizex gRTFbottom = tmpDlgSizey-gRTFtop-tmpsizey '------------------------------------------------------------------- CASE %WM_SIZE '------------------------------------------------------------- IF CB.WPARAM <> %SIZE_MINIMIZED THEN DIALOG GET CLIENT CB.HNDL TO tmpDlgSizex, tmpDlgSizey CONTROL SET SIZE CB.HNDL, %IDC_redEXTRADATA, tmpDlgSizex-gRTFleft-gRTFright, tmpDlgSizey-gRTFtop-gRTFbottom END IF '------------------------------------------------------------- CASE %WM_DESTROY '------------------------------------------------------------- gExtraDataHDLG = 0 '------------------------------------------------------------- CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD '------------------------------------------------------------- IF ISFALSE CB.WPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF '------------------------------------------------------------- CASE %WM_COMMAND '------------------------------------------------------------- SELECT CASE AS LONG CB.CTL CASE %IDCANCEL DIALOG END CB.HNDL FUNCTION = 1 END SELECT '------------------------------------------------------------- END SELECT END FUNCTION ___________________________________________________________________________________________________ FUNCTION ShowEXTRADATA(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_dlgEXTRADATA->-> LOCAL hDlg AS DWORD DIALOG NEW %HWND_DESKTOP, "Extra data", 53, 58, 325, 234, %WS_OVERLAPPED OR _ %WS_THICKFRAME OR %WS_CAPTION OR %WS_SYSMENU OR %WS_VISIBLE OR _ %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _ %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD PBFormsRichEdit(), hDlg, %IDC_redEXTRADATA, "", 0, 0, 325, 235, _ %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %WS_HSCROLL OR %WS_VSCROLL OR _ %ES_LEFT OR %ES_MULTILINE OR %ES_AUTOHSCROLL OR %ES_AUTOVSCROLL OR _ %ES_READONLY OR %ES_SAVESEL OR %ES_NOOLEDRAGDROP, %WS_EX_CLIENTEDGE OR _ %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR #PBFORMS END DIALOG gExtraDataHDLG = hDlg DIALOG SHOW MODELESS hDlg, CALL ShowEXTRADATAProc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_dlgEXTRADATA #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION ___________________________________________________________________________________________________ ___________________________________________________________________________________________________ FUNCTION TEXTLOG(txt$) AS LONG IF ISTRUE(gExtraDataHDLG) THEN ' no selections (the first -1), go to the end (the second -1) CONTROL SEND gExtraDataHDLG,%IDC_redEXTRADATA, %EM_SETSEL, -1, -1 CONTROL SEND gExtraDataHDLG,%IDC_redEXTRADATA, %EM_REPLACESEL, %FALSE, STRPTR(txt$) 'CONTROL SET FOCUS gExtraDataHDLG,%IDC_redEXTRADATA END IF END FUNCTION
cheers.. aSa C[_]
Comment