Lupo73 Posted January 20, 2014 Posted January 20, 2014 Very good UDF, I like it! It could be interesting to add support to select between more predictions with a popup list, maybe using codes like these: '?do=embed' frameborder='0' data-embedContent>> '?do=embed' frameborder='0' data-embedContent>> SFTPEx, AutoCompleteInput, _DateTimeStandard(), _ImageWriteResize(), _GUIGraduallyHide(): some AutoIt functions. Lupo PenSuite: all-in-one and completely free selection of portable programs and games. DropIt: a personal assistant to automatically manage your files. ArcThemALL!: application to multi-archive your files and folders.
PhoenixXL Posted January 22, 2014 Author Posted January 22, 2014 I will release it by 1st Feb. My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
Lupo73 Posted January 22, 2014 Posted January 22, 2014 In the meanwhile I wrote this code that maybe could be used for it: '?do=embed' frameborder='0' data-embedContent>> SFTPEx, AutoCompleteInput, _DateTimeStandard(), _ImageWriteResize(), _GUIGraduallyHide(): some AutoIt functions. Lupo PenSuite: all-in-one and completely free selection of portable programs and games. DropIt: a personal assistant to automatically manage your files. ArcThemALL!: application to multi-archive your files and folders.
PhoenixXL Posted February 1, 2014 Author Posted February 1, 2014 v1.4 releasedNote that the Sequence of Parameters of the main Functionhas been Changed. That is To _RegisterPrediction($Edit_Handle[, $_Predict_List = ''[, $Sensitive = 0[, $SpacePredict = 0[, $_AddNewWords = 0[, $iPredictType = 0]]]]]) Kindly Update your ScriptsFor Download and more information see the first Post.RegardsPhoenix XL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
PhoenixXL Posted February 20, 2014 Author Posted February 20, 2014 v1.5 released Fixed the bug that was preventing the list item to be inserted from the mouseclicks. Lupo73 1 My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
theTony Posted March 5, 2014 Posted March 5, 2014 Hello Phoenix XL, Thanks for this excellent script! I am very new to this. I am trying to see if I can use it but one thing I am not able to figure out how to accomplish. This is what I have so far, all taken from your examples: expandcollapse popup#cs Predict Text - Phoenix XL This code is taken from AutoIt @ http://www.autoitscript.com/forum/topic/143380-predict-text-for-an-edit-control-predicttextau3-udf/ #ce #include-once #include <GUIConstants.au3> #include 'PredictText.au3' ;Our Graphic User Interface $hGUI = GUICreate('Predict Text - Phoenix XL', 500, 400) GUICtrlCreateGroup("Edit Group - Number Check", 5, 10, 490, 170) GUICtrlCreateLabel("Type any number to Find Out What Happens", 10, 30, 480, 30) Global $Edit1 = GUICtrlCreateEdit('', 10, 50, 480, 120) GUICtrlCreateGroup("", -99, -99, 480, 30) GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND') GUISetState() ;GUI Message Loop Local $iGUIGetMsg While 1 $iGUIGetMsg = GUIGetMsg() Switch $iGUIGetMsg Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) ;$lParam is the Handle of the Control. ;When Focus is set to an Edit Control Change the Prediction of the Edit Controls. If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then ;The Words which have to be Predicted for First Edit Box. Local $_Words1[22] = ['345','3456','456','4567','567','5678','6789012345678','678','789012345678','754','8765','87654','90123','901','123','1234','12345','123456','2345','234','23','234567'] ;The Words which have to be Predicted for Second Edit Box. If $lParam = GUICtrlGetHandle($Edit1) Then ;Case-Sensitive _RegisterPrediction($lParam, $_Words1, 1, 0, 0, 1) EndIf EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND When you run the above code and then type the number 1, you are presented with 123, 1234, 12345, and 123456 in the Predict window, with 123 already filled in the Edit control (the 23 part is highlighted) . What I need is for nothing to get prefilled in the Edit widow except what I just typed,1, and instead wait till I make the selection of which number from the Predict window needs to be filled in the Edit control. Is that possible? Any help is greatly appreciated. Thanks.
PhoenixXL Posted March 6, 2014 Author Posted March 6, 2014 (edited) So, You want that there should be no text append until you click or press enter ? If yes, then replace the following func in the UDF, and you get as you asked expandcollapse popup; #INTERNAL_USE_ONLY# =========================================================================================================== ; Name...........: _New_WndProc ; Description ...: The New Window Procedure of the Subclassed Edit Control. ; Syntax.........: _New_WndProc($hWnd, $iMsg, $wParam, $lParam) ; Parameters ....: $hWnd - Handle to the window ; $iMsg - Message ID ; $wParam - The first message parameter as hex value ; $lParam - The second message parameter as hex value ; ; Return values .: Passes the Same message to the Original Window Procedure and Returns the Same Value ; Author ........: Phoenix XL ; Modified.......: ; Remarks .......: Called by the Edit Control Internally. If a Password Character is Set to the Edit Control, ; The Window Procedure is automatically set to Original and the Prediction is Unregistered ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _New_WndProc($hWnd, $iMsg, $wParam, $lParam) ; Get the Handle of the Focused Control. Static $i_Ndex Switch $hWnd Case $___cEdit Local $IDFrom = _WinAPI_GetDlgCtrlID($hWnd), $cOffset, $aRet Static $_NewWord, $iSuggest = False Switch $iMsg Case $WM_ADDWORD If StringLen($_NewWord) >= $___Min_Count And $___iNewWords Then Return AddToArray($___nList, $_NewWord) If $wParam = 0 And $lParam = 0 Then Return 1 Case $WM_PREDICTPHRASE If $___SpaceNext Then ;Prediction for Words Containing SPACE Local $_SelText = _GetSelectedText($IDFrom) If StringLeft($_SelText, 1) = ' ' Then $cOffset = _GetCaretOffset($IDFrom) _GUICtrlEdit_ReplaceSel($hWnd, $_SelText) _GUICtrlEdit_SetSel($IDFrom, $cOffset - StringLen($_SelText) + 1, $cOffset) Return -1 EndIf EndIf Return _WinAPI_CallWindowProc($___pOld_WndProc, $hWnd, $WM_CHAR, $wParam, $lParam) Case $WM_PREDICTWORD Return _PredictText($IDFrom) Case $WM_SUGGESTWORD_PROCESS _GUICtrlEdit_ReplaceSel($___cEdit, "", False) $aRet = _GetCurrentWord($IDFrom) If Suggest_PopuplateItems($aRet) = 0 Then If $___SpaceNext Then $aRet = _GetSpaceText($IDFrom) If @error Then ContinueCase Local $nExt = @extended - 1 $aRet = StringMid($___nList[$aRet[0]], 1, $nExt) If Suggest_PopuplateItems($aRet) = 0 Then ContinueCase Else ContinueCase EndIf Else ;User entered an alphabet in between If _GetCurrentWord($IDFrom, _GetCaretOffset($IDFrom) - StringLen($aRet)) <> $aRet Then Return 0 EndIf Suggest_SetPos($___cEdit) If $wParam Then ContinueCase ;only set selection If $iSuggest = False Then $iSuggest = True Suggest_Show() EndIf Return 1 Case $WM_SUGGESTWORD_END If $wParam = 1 Then Local $aString = _GUICtrlListBox_GetText($___hSuggestListWindow, _GUICtrlListBox_GetCurSel($___hSuggestListWindow)) $i_Ndex = StringLen(_GetCurrentWord($IDFrom)) + 1 _SetSelection($IDFrom, $aString, $i_Ndex) EndIf _GUICtrlEdit_SetSel($hWnd, -1, -1) ;Deselect Selection Suggest_Show(0) $iSuggest = False Case $WM_KEYDOWN Switch $wParam Case $VK_RETURN ;Enter If $iSuggest Then Return _WinAPI_PostMessage($hWnd, $WM_SUGGESTWORD_END, 1, 0) ;will end the process $cOffset = _GUICtrlEdit_GetSel($hWnd) If $cOffset[0] = $cOffset[1] Then $cOffset = _GetCaretOffset($IDFrom) If BitAND(_CtrlGetStyle($hWnd), $ES_MULTILINE) Then _GUICtrlEdit_InsertText($hWnd, @CRLF, $cOffset) ;Send @CRLF to a MultiLine Control ;Also Check For New Word $_NewWord = _GetCurrentWord($IDFrom, $cOffset - 2, 1) Return _SendMessage($hWnd, $WM_ADDWORD, $wParam, $lParam) EndIf Else ;Something is Selected _GUICtrlEdit_SetSel($hWnd, -1, -1) ;Deselect Selection EndIf Case $VK_SPACE ;Spacebar ;New Word - Add To The List $cOffset = _GetCaretOffset($IDFrom) $_NewWord = _GetCurrentWord($IDFrom, $cOffset - 1) _WinAPI_PostMessage($hWnd, $WM_ADDWORD, 0, 0) Case $VK_BACK ;BackSpace _GUICtrlEdit_ReplaceSel($hWnd, '') ContinueCase Case $VK_ESCAPE, $VK_LEFT, $VK_RIGHT If $iSuggest Then Return _WinAPI_PostMessage($hWnd, $WM_SUGGESTWORD_END, 0, 0) Case $VK_DOWN, $VK_UP If $iSuggest Then Local Const $iMax = _GUICtrlListBox_GetCount($___hSuggestListWindow) - 1 $aRet = $wParam - 39 + _GUICtrlListBox_GetCurSel($___hSuggestListWindow) If $aRet < 0 Or $aRet > $iMax Then Return 0 _GUICtrlListBox_SetCurSel($___hSuggestListWindow, $aRet) Return 1 EndIf EndSwitch Case $WM_CHAR ;WM_CHAR Switch $wParam Case $VK_SPACE + 1 To 255 ;Printing Chars in ANSI set [Exclusive of Space and DEL] If $___iType = 0 Then _WinAPI_PostMessage($hWnd, $WM_PREDICTWORD, 0, 0); Else _WinAPI_PostMessage($hWnd, $WM_SUGGESTWORD_PROCESS, 0, 0) EndIf Case $VK_SPACE Return _SendMessage($hWnd, $WM_PREDICTPHRASE, $wParam, $lParam) EndSwitch Case $WM_KILLFOCUS _WinAPI_PostMessage($hWnd, $WM_SUGGESTWORD_END, 0, 0) Case $EM_SETPASSWORDCHAR If $wParam <> 0 Then _UnRegisterPrediction() ; Unregister Prediction if a Password Character is Set EndSwitch ; Pass to the Original Window Procedure. Return _WinAPI_CallWindowProc($___pOld_WndProc, $hWnd, $iMsg, $wParam, $lParam) Case $___hSuggestListWindow Switch $iMsg Case $WM_MOUSEACTIVATE ;don't take focus from edit control. _WinAPI_PostMessage($___cEdit, $WM_SUGGESTWORD_END, 1, 0) Local Const $MA_NOACTIVATEANDEAT = 4 Return $MA_NOACTIVATEANDEAT Case $WM_MOUSEMOVE Local $iITem = _GUICtrlListBox_ItemFromPoint($___hSuggestListWindow, _WinAPI_LoWord($lParam), _WinAPI_HiWord($lParam)) If $iITem > -1 Then _GUICtrlListBox_SetCurSel($hWnd, $iITem) EndSwitch Return _WinAPI_CallWindowProc($___pOldList_WndProc, $hWnd, $iMsg, $wParam, $lParam) EndSwitch EndFunc ;==>_New_WndProc Edited March 6, 2014 by PhoenixXL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
theTony Posted March 11, 2014 Posted March 11, 2014 (edited) Hello PhoenixXL, That is exactly what I was looking to do. It works perfectly. Thank you! I have a strange behavior now. if the array has enough entries so that a vertical scroll bar show up in the Predict list, this vertical scroll bar is inaccessible. To see what I mean try replacing this line and type 1 for the first character then see if you can scroll down: Local $_Words1[27] = ['345','3456','456','4567','567','5678','6789012345678','678','789012345678','754','8765','87654','90123','901','1','12','123','1234','12345','123456','1234567','12345678','12344','12345679','111','111333','11'] Edited March 14, 2014 by theTony
ValeryVal Posted March 12, 2014 Posted March 12, 2014 Valuable UDF. It will be real treasure after subjoining default word list. Like this (more than 58 000 English words): http://www.mieliestronk.com/corncob_lowercase.txt from here: http://www.mieliestronk.com/wordlist.html Thank you The point of world view
PhoenixXL Posted March 13, 2014 Author Posted March 13, 2014 Nice idea ValeryVal. I will have to change many parts of code(some async list population - sort of) to make it adaptable with such long lists. My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
ValeryVal Posted March 14, 2014 Posted March 14, 2014 I will have to change many parts of code(some async list population - sort of) to make it adaptable with such long lists. You can consider the list forming after 2-3 letters with help SQLite query. BTW. The next step in developing of your prediction control can be subjoining this free synonyms database. http://lingucomponent.openoffice.org/MyThes-1.zip from page: http://stackoverflow.com/questions/4175335/where-can-i-download-a-free-synonyms-database The point of world view
Lupo73 Posted March 15, 2014 Posted March 15, 2014 I'm doing some tests to use your code in a program.. I think there is a minor issue: if I type the first character of a predictable string and then type a whitespace, the suggestion list is still visible (I think it may disappears); in addition, if I select the first suggestion, (in case there are more than one edit fields) it adds the first suggestion of the other edit field. SFTPEx, AutoCompleteInput, _DateTimeStandard(), _ImageWriteResize(), _GUIGraduallyHide(): some AutoIt functions. Lupo PenSuite: all-in-one and completely free selection of portable programs and games. DropIt: a personal assistant to automatically manage your files. ArcThemALL!: application to multi-archive your files and folders.
theTony Posted March 15, 2014 Posted March 15, 2014 PhoenixXL, Please see I have edited my response above. Are you able to reproduce this issue: when the predict list is too long for the predict window the scroll bar does not work with mouse click, works with arrow down or up but not with mouse scroll/click. Thank you,
PhoenixXL Posted March 16, 2014 Author Posted March 16, 2014 (edited) @theTony, I will soon fix it with the upcoming version. Thanks for finding it out @Lupo73, Can you provide the code where you get the problem. Edited March 17, 2014 by PhoenixXL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
Lupo73 Posted March 17, 2014 Posted March 17, 2014 For example typing "n " (n+whitespace) in "Example6_PredictText(AutoSuggest).au3" second field. SFTPEx, AutoCompleteInput, _DateTimeStandard(), _ImageWriteResize(), _GUIGraduallyHide(): some AutoIt functions. Lupo PenSuite: all-in-one and completely free selection of portable programs and games. DropIt: a personal assistant to automatically manage your files. ArcThemALL!: application to multi-archive your files and folders.
theTony Posted March 17, 2014 Posted March 17, 2014 PhoenixXL, Here is the code where the issue with clicking on the scroll bar in the predict window does not work: expandcollapse popup#include-once #include <GUIConstants.au3> #include 'PredictText.au3' ;Our Graphic User Interface $hGUI = GUICreate('Predict Text - Phoenix XL', 500, 400) GUICtrlCreateGroup("Edit Group - Number Check", 5, 10, 490, 170) GUICtrlCreateLabel("Type any number to Find Out What Happens", 10, 30, 480, 30) Global $Edit1 = GUICtrlCreateEdit('', 10, 50, 480, 120) GUICtrlCreateGroup("", -99, -99, 480, 30) GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND') GUISetState() ;GUI Message Loop Local $iGUIGetMsg While 1 $iGUIGetMsg = GUIGetMsg() Switch $iGUIGetMsg Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) ;$lParam is the Handle of the Control. ;When Focus is set to an Edit Control Change the Prediction of the Edit Controls. If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then ;The Words which have to be Predicted for First Edit Box. Local $_Words1[27] = ['345','3456','456','4567','567','5678','6789012345678','678','789012345678','754','8765','87654','90123','901','1','12','123','1234','12345','123456','1234567','12345678','12344','12345679','111','111333','11'] If $lParam = GUICtrlGetHandle($Edit1) Then ;Case-Sensitive _RegisterPrediction($lParam, $_Words1, 1, 0, 0, 1) EndIf EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND Run the above code and choose '1', then try clicking on the scroll bar in the predict window. Thank you,
PhoenixXL Posted March 18, 2014 Author Posted March 18, 2014 (edited) Fixed the two of the bugs (courtesy - Lupo73 and theTony). Check the first post for more information. I was delaying for the reason of finding out a way to make asynchronous finding of the text in the list, so as to populate words efficiently when the size is more than 1000(as posted by ValeryVal). I could find out an appropriate way, but now I'm running out of time to implement it in the UDF. For the time being, I had fixed up the bugs. Regards Phoenix XL Edited March 18, 2014 by PhoenixXL Lupo73 1 My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
Lupo73 Posted March 18, 2014 Posted March 18, 2014 (edited) Perfect! What about load the list as multi-line string and use something like this to extract matching values? #include <Array.au3> Local $iTime_Now, $aList Local $sLangText = FileRead('english.txt') Local $sTypedString = 'na' ; example of typed text $iTime_Now = TimerInit() $aList = StringRegExp($sLangText, '(?i)' & @LF & $sTypedString & '(.*?)' & @CR, 3) If IsArray($aList) = 0 Then Exit EndIf MsgBox(0, 'Time', TimerDiff($iTime_Now)) _ArrayDisplay($aList) Edited March 18, 2014 by Lupo73 SFTPEx, AutoCompleteInput, _DateTimeStandard(), _ImageWriteResize(), _GUIGraduallyHide(): some AutoIt functions. Lupo PenSuite: all-in-one and completely free selection of portable programs and games. DropIt: a personal assistant to automatically manage your files. ArcThemALL!: application to multi-archive your files and folders.
PhoenixXL Posted March 19, 2014 Author Posted March 19, 2014 (edited) No, I am changing it for the reason that all the items are enumerated at once and if the list of items is very large, then obviously its gonna take some time, and create a lag in the displaying of the list, causing further unpredictable problems that occur when the return of the procedure is not fast. So, I would be probably doing it by, First enumerate the no. of items that will be displayed at once (depends on the height of the suggestion box, and individual item's height) Then enumerate single item further from that index in an elapse of say 10ms until all items are entered. Plus in the second enumeration phase I won't redraw the suggestion, as it would by default be done when the user scrolls down. That would save some of the time. Please put forward, what you all think about it. Regards Phoenix XL Edited March 19, 2014 by PhoenixXL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
Lupo73 Posted March 19, 2014 Posted March 19, 2014 I'm not sure to understand, probably I'm too sleepy ..why the double enumeration? Anyway, for the record, I tested StringRegExp solution with "corncob_lowercase.txt" (58000 lines) and it extracts all words that start with "na" in 6/18 ms.. so it could be used to dynamically take matching words without store them in array.. but maybe I have misunderstood what the problem is (in this case, sorry) SFTPEx, AutoCompleteInput, _DateTimeStandard(), _ImageWriteResize(), _GUIGraduallyHide(): some AutoIt functions. Lupo PenSuite: all-in-one and completely free selection of portable programs and games. DropIt: a personal assistant to automatically manage your files. ArcThemALL!: application to multi-archive your files and folders.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now