PhoenixXL Posted August 3, 2012 Posted August 3, 2012 I wanted a AutoComplete function, I tried to make one using native functions but that was getting very complexTherefore i chose the IAutoComplete interfaceBut I'm not getting it to workAutoit is crashingGlobal $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") Local $CLSID_Autocomplete ="{00BB2763-6A77-11D0-A535-00C04FD7D062}" Local $IID_IUnknown = "{00000000-0000-0000-C000-000000000046}" Local $_Description='Enable hresult(BOOL);Init hresult(HWND;PTR;LPCWSTR;LPCWSTR);' ;also tried explictly 'Enable hresult(BOOL);Init hresult(HWND;PTR*;wstr;wstr);' Local $_oAutoComplete=ObjCreateInterface($CLSID_Autocomplete,$IID_IUnknown,$_Description) $_oAutoComplete.Enable(True) Func _ErrFunc($oError) ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _ "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ "err.description is: " & @TAB & $oError.description & @CRLF & _ "err.source is: " & @TAB & $oError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF) EndFunc ;==>_ErrFuncThe Documentation are the FollowsMSDNPlease help meRegardsPhoenix 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.
stormbreaker Posted August 3, 2012 Posted August 3, 2012 (edited) You are confused in the types. Before line-6 (from MSDN documentation, you have to initialize this object for a window handle first)Line 3 should have 'struct' instead of 'ptr' .You just can't do everything based on MSDN docs, you must check the header files from there SDK's for typedefs (not all typedefs exist in the online documentation).Good luck ahead, sometime back, I implemented this in Delphi. Nevertheless, you are good for ur age. Edited August 3, 2012 by MKISH ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
PhoenixXL Posted August 3, 2012 Author Posted August 3, 2012 (edited) Its Still not working I have initialized the COM library and also changed the 'ptr' to 'struct' Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") ;COM initialize Local $aRet=DllCall('Ole32.dll','Long','CoInitialize','ptr',0) $aRet=Not $aRet If Not $aRet Then Exit -1 ;------------- Local $CLSID_Autocomplete ="{00BB2763-6A77-11D0-A535-00C04FD7D062}" Local $IID_IUnknown = "{00000000-0000-0000-C000-000000000046}" Local $_Description='Enable hresult(BOOL);Init hresult(HWND;STRUCT;WSTR;WSTR);' ;also tried explictly 'Enable hresult(BOOL);Init hresult(HWND;PTR*;wstr;wstr);' Local $_oAutoComplete=ObjCreateInterface($CLSID_Autocomplete,$IID_IUnknown,$_Description) $_oAutoComplete.Enable(True) Func _ErrFunc($oError) ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _ "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ "err.description is: " & @TAB & $oError.description & @CRLF & _ "err.source is: " & @TAB & $oError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF) EndFunc ;==>_ErrFunc Edited August 4, 2012 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.
PhoenixXL Posted August 4, 2012 Author Posted August 4, 2012 Can Anybody Help Me 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.
stormbreaker Posted August 4, 2012 Posted August 4, 2012 (edited) PhoenixXL, you need to call something like this before .Enable statement: $_oAutoComplete.Init(bla bla bla). Also, LPCWSTR is CHAR (or WCHAR, probably). This could help you, I hope.You could refer to the this page for more info on type-definitions. Edited August 5, 2012 by MKISH ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
PhoenixXL Posted August 7, 2012 Author Posted August 7, 2012 (edited) Hi, MKISH thanks for showing that interest U gave me the way to proceed using the Init Function but this function's parameters include one more Interface I haven't ever coded with any Interface & felt that this would be out of my knowledge MKISH, If you have done this in Delphi Can you give an example of Interface using and passing as a Parameter Thanks for your time -Phoenix XL Edited August 10, 2012 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.
stormbreaker Posted August 8, 2012 Posted August 8, 2012 I wrote something like this (in Delphi): expandcollapse popupunit uAutoComplete; interface uses Windows, SysUtils, Controls, Classes, ActiveX, ComObj, stdctrls, Forms, Messages; const IID_IAutoComplete: TGUID = '{00bb2762-6a77-11d0-a535-00c04fd7d062}'; IID_IAutoComplete2: TGUID = '{EAC04BC0-3791-11d2-BB95-0060977B464C}'; CLSID_IAutoComplete: TGUID = '{00BB2763-6A77-11D0-A535-00C04FD7D062}'; IID_IACList: TGUID = '{77A130B0-94FD-11D0-A544-00C04FD7d062}'; IID_IACList2: TGUID = '{470141a0-5186-11d2-bbb6-0060977b464c}'; CLSID_ACLHistory: TGUID = '{00BB2764-6A77-11D0-A535-00C04FD7D062}'; CLSID_ACListISF: TGUID = '{03C036F1-A186-11D0-824A-00AA005B4383}'; CLSID_ACLMRU: TGUID = '{6756a641-de71-11d0-831b-00aa005b4383}'; type IACList = interface(IUnknown) ['{77A130B0-94FD-11D0-A544-00C04FD7d062}'] function Expand(pszExpand: POLESTR): HResult; stdcall; end; const {Options for IACList2} ACLO_NONE = 0; {don't enumerate anything} ACLO_CURRENTDIR = 1; {enumerate current directory} ACLO_MYCOMPUTER = 2; {enumerate MyComputer} ACLO_DESKTOP = 4; {enumerate Desktop Folder} ACLO_FAVORITES = 8; {enumerate Favorites Folder} ACLO_FILESYSONLY = 16; {enumerate only the file system} type IACList2 = interface(IACList) ['{470141a0-5186-11d2-bbb6-0060977b464c}'] function SetOptions(dwFlag: DWORD): HResult; stdcall; function GetOptions(var pdwFlag: DWORD): HResult; stdcall; end; IAutoComplete = interface(IUnknown) ['{00bb2762-6a77-11d0-a535-00c04fd7d062}'] function Init(hwndEdit: HWND; const punkACL: IUnknown; pwszRegKeyPath, pwszQuickComplete: POLESTR): HResult; stdcall; function Enable(fEnable: BOOL): HResult; stdcall; end; const {Options for IAutoComplete2} ACO_NONE = 0; ACO_AUTOSUGGEST = $1; ACO_AUTOAPPEND = $2; ACO_SEARCH = $4; ACO_FILTERPREFIXES = $8; ACO_USETAB = $10; ACO_UPDOWNKEYDROPSLIST = $20; ACO_RTLREADING = $40; type IAutoComplete2 = interface(IAutoComplete) ['{EAC04BC0-3791-11d2-BB95-0060977B464C}'] function SetOptions(dwFlag: DWORD): HResult; stdcall; function GetOptions(out pdwFlag: DWORD): HResult; stdcall; end; TEnumString = class(TInterfacedObject, IEnumString) private FStrings: TStringList; FCurrIndex: integer; public {IEnumString} function Next(celt: Longint; out elt; pceltFetched: PLongint): HResult; stdcall; function Skip(celt: Longint): HResult; stdcall; function Reset: HResult; stdcall; function Clone(out enm: IEnumString): HResult; stdcall; {VCL} constructor Create; destructor Destroy; override; end; TACOption = (acAutoAppend, acAutoSuggest, acUseArrowKey); TACOptions = set of TACOption; TACSource = (acsList, acsHistory, acsMRU, acsShell); TACEdit = class(TEdit) private FACList: TEnumString; FAutoComplete: IAutoComplete; FACEnabled: boolean; FACOptions: TACOptions; FACSource: TACSource; function GetACStrings: TStringList; procedure SetACEnabled(const Value: boolean); procedure SetACOptions(const Value: TACOptions); procedure SetACSource(const Value: TACSource); protected procedure CreateWnd; override; procedure DestroyWnd; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property ACStrings: TStringList read GetACStrings; property ACEnabled: boolean read FACEnabled write SetACEnabled; property ACOptions: TACOptions read FACOptions write SetACOptions; property ACSource: TACSource read FACSource write SetACSource; end; implementation { IUnknownInt } function TEnumString.Clone(out enm: IEnumString): HResult; begin Result := E_NOTIMPL; pointer(enm) := nil; end; constructor TEnumString.Create; begin inherited Create; FStrings := TStringList.Create; FCurrIndex := 0; end; destructor TEnumString.Destroy; begin FStrings.Free; inherited; end; function TEnumString.Next(celt: Integer; out elt; pceltFetched: PLongint): HResult; var I: Integer; wStr: WideString; begin I := 0; while (I < celt) and (FCurrIndex < FStrings.Count) do begin wStr := FStrings[FCurrIndex]; TPointerList(elt)[I] := CoTaskMemAlloc(2 * (Length(wStr) + 1)); StringToWideChar(wStr, TPointerList(elt)[I], 2 * (Length(wStr) + 1)); Inc(I); Inc(FCurrIndex); end; if pceltFetched <> nil then pceltFetched^ := I; if I = celt then Result := S_OK else Result := S_FALSE; end; function TEnumString.Reset: HResult; begin FCurrIndex := 0; Result := S_OK; end; function TEnumString.Skip(celt: Integer): HResult; begin if (FCurrIndex + celt) <= FStrings.Count then begin Inc(FCurrIndex, celt); Result := S_OK; end else begin FCurrIndex := FStrings.Count; Result := S_FALSE; end; end; { TACEdit } constructor TACEdit.Create(AOwner: TComponent); begin inherited; FACList := TEnumString.Create; FACEnabled := true; FACOptions := [acAutoAppend, acAutoSuggest, acUseArrowKey]; end; procedure TACEdit.CreateWnd; var Dummy: IUnknown; Strings: IEnumString; begin inherited; if HandleAllocated then begin try Dummy := CreateComObject(CLSID_IAutoComplete); if (Dummy <> nil) and (Dummy.QueryInterface(IID_IAutoComplete, FAutoComplete) = S_OK) then begin case FACSource of acsHistory: Strings := CreateComObject(CLSID_ACLHistory) as IEnumString; acsMRU: Strings := CreateComObject(CLSID_ACLMRU) as IEnumString; acsShell: Strings := CreateComObject(CLSID_ACListISF) as IEnumString; else Strings := FACList as IEnumString; end; if S_OK = FAutoComplete.Init(Handle, Strings, nil, nil) then begin SetACEnabled(FACEnabled); SetACOptions(FACOptions); end; end; except {CLSID_IAutoComplete is not available} end; end; end; destructor TACEdit.Destroy; begin FACList := nil; inherited; end; procedure TACEdit.DestroyWnd; begin if (FAutoComplete <> nil) then begin FAutoComplete.Enable(false); FAutoComplete := nil; end; inherited; end; function TACEdit.GetACStrings: TStringList; begin Result := FACList.FStrings; end; procedure TACEdit.SetACEnabled(const Value: boolean); begin if (FAutoComplete <> nil) then begin FAutoComplete.Enable(FACEnabled); end; FACEnabled := Value; end; procedure TACEdit.SetACOptions(const Value: TACOptions); const Options: array[TACOption] of integer = (ACO_AUTOAPPEND, ACO_AUTOSUGGEST, ACO_UPDOWNKEYDROPSLIST); var Option: TACOption; Opt: DWORD; AC2: IAutoComplete2; begin if (FAutoComplete <> nil) then begin if S_OK = FAutoComplete.QueryInterface(IID_IAutoComplete2, AC2) then begin Opt := ACO_NONE; for Option := Low(Options) to High(Options) do begin if (Option in FACOptions) then Opt := Opt or DWORD(Options[Option]); end; AC2.SetOptions(Opt); end; end; FACOptions := Value; end; procedure TACEdit.SetACSource(const Value: TACSource); begin if FACSource <> Value then begin FACSource := Value; RecreateWnd; end; end; ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
stormbreaker Posted August 8, 2012 Posted August 8, 2012 AutoIt has quite some similarities with C#. Maybe this article at Codeproject will help you: http://www.codeproject.com/Articles/3792/C-does-Shell-Part-4Try it... at least a try. I shall solve this issue by tomorrow afternoon. Good night. ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
PhoenixXL Posted August 9, 2012 Author Posted August 9, 2012 Thanks for the Link its very helpful 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.
czardas Posted August 9, 2012 Posted August 9, 2012 (edited) I don't know what this is for, but have you looked at code for the UDF function _GUICtrlComboBox_AutoComplete? I modified this function slightly and used it in my My code isn't as easy to adapt as I would have liked, but attending to that is not even on the radar right now. You still might be interested to take a look though. Edited August 9, 2012 by czardas operator64 ArrayWorkshop
stormbreaker Posted August 9, 2012 Posted August 9, 2012 This could get you started in the right direction: $CLSID_AutoComplete = "{00BB2763-6A77-11D0-A535-00C04FD7D062}" $CLSID_ACLHistory = "{00BB2764-6A77-11D0-A535-00C04FD7D062}") $CLSID_ACListISF = "{03C036F1-A186-11D0-824A-00AA005B4383}") $CLSID_ACLMRU = "{6756A641-dE71-11D0-831B-00AA005B4383}") $CLSID_ACLMulti = "{00BB2765-6A77-11D0-A535-00C04FD7D062}") $AutoCompleteDescription = 'Init int(INT_PTR;object;str;str); Enable int(bool)' $AutoComplete2Description = 'Init int(INT_PTR;object;str;str); Enable int(bool); SetOptions int(uint); GetOptions int(uint*);' $IAutoComplete = ObjCreateInterface($CLSID_AutoComplete, $CLSID_AutoComplete, $AutoCompleteDescription) $IAutoComplete2 = ObjCreateInterface($CLSID_AutoComplete, $CLSID_AutoComplete, $AutoComplete2Description) I did this using AU3 right now.... ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
PhoenixXL Posted August 9, 2012 Author Posted August 9, 2012 (edited) add this to the Top and then try Its giving me the ErrorGlobal $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") Func _ErrFunc($oError) ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _ "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ "err.description is: " & @TAB & $oError.description & @CRLF & _ "err.source is: " & @TAB & $oError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF) EndFunc ;==>_ErrFunc This code I already have which doesnt give an Error Global Const $IID_IAutoComplete = '{00bb2762-6a77-11d0-a535-00c04fd7d062}'; Global Const $IID_IAutoComplete2 = '{EAC04BC0-3791-11d2-BB95-0060977B464C}'; Global Const $CLSID_AutoComplete = '{00BB2763-6A77-11D0-A535-00C04FD7D062}'; Global Const $IAC2_vDescription='Enable hresult(BOOL);Init hresult(HWND;OBJECT;WSTR;WSTR);' Global Const $IAC_vDescription='GetOptions HRESULT(DWORD*);SetOptions HRESULT(DWORD);' Local $_oAutoComplete=ObjCreateInterface($CLSID_Autocomplete,$IID_IAutoComplete) ;,$IAC2_vDescription) ConsoleWrite('ErrorCode:'&@error&@CR) Local $_oAutoComplete2=ObjCreateInterface($CLSID_Autocomplete,$IID_IAutoComplete2) ConsoleWrite('ErrorCode:'&@error&@CR) The problem is the Init Function's Second Parameter... Edited August 9, 2012 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.
stormbreaker Posted August 10, 2012 Posted August 10, 2012 If you don't want a complex approach and just some simple options, you could call SHAutoComplete or something like this: $Obj1 = ObjCreate("Forms.TextBox.1") $Obj1_ctrl = GUICtrlCreateObj($Obj1, 128, 144, 300, 24) Lookup on MSDN for more info!!! ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
PhoenixXL Posted August 10, 2012 Author Posted August 10, 2012 Yeah Simply SHAutoComplete Works Local $aRet=DllCall('ole32.dll','long','CoInitialize','ptr','') ;ConsoleWrite($aRet[0]&@CR) Func _SHAutoComplete($hWnd,$dwFlags=0) Local $aRet=DllCall('shlwapi.dll', "long", "SHAutoComplete", "hwnd", $hWnd, "int", $dwFlags) Return $aRet[0] EndFunc ;==>_SHAutoComplete GUICreate('') $x=GUICtrlCreateInput('',10,10,200,20) _SHAutoComplete(GUICtrlGetHandle($x)) GUISetState() While GUIGetMsg()<>-3 Sleep(10) WEnd Actually I misunderstood, I felt with IAutoComplete2 i would be able to predict the text from a predefined database of strings But thats even only capable of predicting File System paths and URLS Thanks for the help MKISH & CZARDAS 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.
stormbreaker Posted August 10, 2012 Posted August 10, 2012 Actually, you could even do that (my first approach, that I implemented in AutoIt, however, I had to use an external DLL and then call it via DllCall). However, a simplified approach to this is to use "Forms.TextBox.1" alongwith its AutoComplete properties. The problem is I have no idea in this case, but at least this seems to be simpler. Regards... ---------------------------------------- :bye: Hey there, was I helpful? ---------------------------------------- My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1
PhoenixXL Posted August 15, 2012 Author Posted August 15, 2012 I had to use an external DLL and then call it via DllCallThough a bit complicated but it is possible with AutoIt Native Functions, I at last made that Here is the for anyone interested 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.
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