Example 3: Multiline InputBox
Format:
List = obj.InputBox(Titel, Message1, Message2, Message3, ..., MessageX)
example3.dll
Code: Select all
;-TOP
IncludeFile "Modul_BaseClassDispatch.pb"
; Create Logfile
ClassCommon::EnableClassDebug()
; *******************************************************************************
DeclareModule ClassDialog
UseModule ClassDispatch
Structure sClassDialog Extends sClassDispatch
EndStructure
Interface iClassDialog Extends iClassDispatch
InputBox(*this.sClassDialog, DispId.l, *iid.IID, lcid.l, Flags.w, *DispParams.DISPPARAMS, *vResult.VARIANT, *ExcepInfo.EXCEPINFO, *ArgErr.Integer)
EndInterface
UnuseModule ClassDispatch
Declare.i New()
EndDeclareModule
Module ClassDialog
EnableExplicit
UseModule ClassCommon
UseModule ClassDispatch
CompilerIf Defined(pData, #PB_Structure) = 0
Structure pData
StructureUnion
llVal.q[0]
lVal.l[0]
bVal.b[0]
iVal.w[0]
fltVal.f[0]
dblVal.d[0]
boolVal.w[0]
bool.w[0]
scode.l[0]
cyVal.l[0]
date.d[0]
bstrVal.i[0]
varVal.VARIANT[0]
Value.VARIANT[0]
EndStructureUnion
EndStructure
CompilerEndIf
NewClass(iClassDialog)
; ---------------------------------------------------------------------------
Procedure saCreateSafeArray(vartype, Lbound, Elements)
Protected rgsabound.SAFEARRAYBOUND, *psa
rgsabound\lLbound = Lbound
rgsabound\cElements = Elements
*psa = SafeArrayCreate_(vartype, 1, rgsabound)
ProcedureReturn *psa
EndProcedure
; ---------------------------------------------------------------------------
; Format:
; List = obj.InputBox(Titel, Message1, Message2, Message3, ..., MessageX)
Procedure InputBox(*this.sClassDialog, DispId.l, *iid.IID, lcid.l, Flags.w, *DispParams.DISPPARAMS, *vResult.VARIANT, *ExcepInfo.EXCEPINFO, *ArgErr.Integer)
Protected cArgs, *vArgs.udtArrayVariant
Protected r1.s, count, index , x, y, iArg, btnOk, *psa.safearray
cArgs = *DispParams\cArgs
*vArgs = *DispParams\rgvarg
If cArgs < 2
ProcedureReturn #DISP_E_BADPARAMCOUNT
EndIf
; Create Dialog
iArg = cArgs - 1
count = cArgs - 1
y = 5
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 480, 30 * count + 40, GetVariantString(*vArgs\Arg[iArg]))
For index = 0 To count - 1
iArg - 1
TextGadget(#PB_Any, 5, y + 3, 120, 24, GetVariantString(*vArgs\Arg[iArg]))
StringGadget(index, 130, y, 340, 24, "")
y + 30
Next
btnOk = ButtonGadget(#PB_Any, 180, y, 120, 25, "Ok")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = btnOk
Break
EndIf
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
; Create array für result
*psa = saCreateSafeArray(#VT_VARIANT, 0, count)
If Not *psa
CloseWindow(0)
ProcedureReturn #E_OUTOFMEMORY
EndIf
; Fill array from diaglog
For index = 0 To count - 1
SetVariantString(*psa\pvData\Value[index], GetGadgetText(index))
Next
; Set result to array
*vResult\vt = #VT_ARRAY | #VT_VARIANT
*vResult\parray = *psa
CloseWindow(0)
ProcedureReturn #S_OK
Else
ProcedureReturn #E_OUTOFMEMORY
EndIf
EndProcedure : AsMethode(InputBox)
; ---------------------------------------------------------------------------
Procedure New()
InitObject(sClassDialog)
EndProcedure
; ---------------------------------------------------------------------------
CheckInterface(iClassDialog)
EndModule
; ***************************************************************************************
Global ProgramId.s = "PureExample3.Application"
Global ClassId.s = "{01AAD4B2-FFFF-4E08-FFFF-FFFF60FF3B23}"
Global Description.s = "Purebasic Example 3 Dialog"
DataSection
CLSID_App:
Data.l $01AAD4B2
Data.w $FFFF, $4E08
Data.b $FF, $FF, $FF, $FF, $60, $FF, $3B, $23
EndDataSection
InitClassFactory(ProgramId, ClassId, Description, ClassDialog::@New(), ?CLSID_App)
; ***************************************************************************************
VBS
dim obj, list, item, text
set obj = createobject("PureExample3.Application")
'list = obj.InputBox("Multi Input Box", "Fisrst Name:", "Last name:")
list = obj.InputBox("Multi Input Box", "Fisrst Name:", "Last name:", "Age:")
For Each item In list
text = text + item + vbNewLine
next
msgbox text
set obj = Nothing