Jump to content

Recommended Posts

Posted

Very good UDF, I like it!  :thumbsup:

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.

Posted

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.

Posted

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.

  • 2 weeks later...
Posted

v1.4 released
Note that the Sequence of Parameters of the main Function
has been Changed. That is 

To

_RegisterPrediction($Edit_Handle[, $_Predict_List = ''[, $Sensitive = 0[, $SpacePredict = 0[, $_AddNewWords = 0[, $iPredictType = 0]]]]]) 

Kindly Update your Scripts
For Download and more information see the first Post.

Regards
Phoenix 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.

  • 3 weeks later...
Posted

v1.5 released

Fixed the bug that was preventing the list item to be inserted from the mouseclicks.

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.

  • 2 weeks later...
Posted

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:

#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.

Posted (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

; #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 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.

Posted (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 by theTony
Posted

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.

Posted

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

Posted

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.

Posted

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,

Posted (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 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.

Posted

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.

Posted

PhoenixXL,

Here is the code where the issue with clicking on the scroll bar in the predict window does not work:

#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,

Posted (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 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.

Posted (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 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.

Posted (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 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.

Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...