I prepare this demo, because would be useful to treat string conversion to another types.
Code: Select all
/*
String Conversion Demo
By Pablo César Arrascaeta
On January 14th, 2015
Useful to use with InputBox and INI files
*/
#include <hmg.ch>
Function Main()
Private aTypes:={'Numeric','Character Alpha','Array','Date','Memo', 'Logical'}
DEFINE WINDOW Win_1 WIDTH 640 HEIGHT 350 TITLE " Testing string conversion" MAIN
_DefineHotKey ( "Win_1" , 0 , VK_ESCAPE , {|| ThisWindow.Release() } )
_DefineHotKey ( "Win_1" , 0 , VK_RETURN , {|| Test() } )
DEFINE RADIOGROUP RadioGroup_1
ROW 40
COL 30
WIDTH 160
HEIGHT 125
OPTIONS aTypes
VALUE 1
FONTNAME "Arial"
FONTSIZE 12
ONCHANGE Test()
SPACING 40
FONTBOLD .T.
END RADIOGROUP
END WINDOW
CENTER WINDOW Win_1
Win_1.Col:=(Win_1.Col)-50
ACTIVATE WINDOW Win_1
Return Nil
Function Test()
Local nOpt:=Win_1.RadioGroup_1.Value
Local cVar:="", cType:=hb_USubStr(aTypes[nOpt],1,1)
DISABLE CONTROL EVENT RadioGroup_1 OF Win_1
If cType="M" ; cVar:="Line # 1"+CRLF+"Line # 2" ; Endif
cVar:=InputBox("Type cVar",If(cType="M","Multi-Line test","cVar ("+aTypes[nOpt]+")"),cVar,,,If(cType="M",.T.,.F.))
If _HMG_SYSDATA [ 257 ]
MsgStop("Cancelled by user !")
Else
If IsAllType(cVar,cType)
MsgInfo("Yes, It's all "+aTypes[nOpt]+" !"," String approved")
Else
MsgStop("No, It's not all "+aTypes[nOpt]+" !"," Attention")
Endif
Endif
ENABLE CONTROL EVENT RadioGroup_1 OF Win_1
DoMethod("Win_1","RadioGroup_1","SetFocus")
Return Nil
Function IsAllType(cVar,cType,lRet)
Local I, nLen:=HMG_Len(cVar)
Local nChar1:=0, nChar2:=0
If !ValType(cVar)="C" ; Return .F. ; Endif
If ValType(cType)="C" ; cType:=HMG_Upper(cType) ; Else ; Return .F. ; Endif
DEFAULT lRet := If(cType="N" .or. cType="C",.T.,.F.)
For I=1 To nLen
cChar:=hb_USubStr(cVar,I,1)
Do Case
Case cType="N"
If cChar="."
nChar1++
Loop
Endif
If cChar="-"
nChar2++
Loop
Endif
If !( HMG_IsDigit(cChar) ) ; lRet:=.F. ; Exit ; Endif
Case cType="C"
If !( HMG_IsAlpha(cChar) ) ; lRet:=.F. ; Exit ; Endif
Case cType="A"
If cChar="{" ; nChar1++ ; Endif
If cChar="}" ; nChar2++ ; Endif
Case cType="D"
If cChar="(" ; nChar1++ ; Endif
If cChar=")" ; nChar2++ ; Endif
Case cType="M"
If cChar=Chr(13) .or. cChar=Chr(10) ; lRet:=.T. ; Exit ; Endif
Case cType="L"
If AScan({".T.","T","TRUE","Y","YES",".F.","F","FALSE","N","NO"},HMG_Upper(cVar)) > 0 ; lRet:=.T. ; Exit ; Endif
EndCase
Next
If cType="A" .or. cType="D"
If nChar1 == nChar2 .and. nChar1 > 0
If cType == "D"
If ("CTOD" $ HMG_Upper(cVar) .or. "STOD" $ HMG_Upper(cVar) .or. "DATE" $ HMG_Upper(cVar))
lRet:=RunMacro(cVar)
Endif
Else
lRet:=RunMacro(@cVar)
Endif
Endif
Endif
If cType == "N"
If lRet .and. ( nChar1 > 1 .or. nChar2 > 1 )
lRet:=.F.
Endif
Endif
Return lRet
Function RunMacro(xVar)
Local lRet, cTestIt
BEGIN SEQUENCE WITH {|oErr| BREAK( oErr ) }
cTestIt:=&(xVar)
lRet:=hb_IsArray(cTestIt)
RECOVER USING oErr
lRet:=.F.
ENDSEQUENCE
Return lRet
- Adding Disable/Enable Event
- Replacing HMG functions for strings when UNICODE
- Added for Logical types