tips_6 面向VisualBasic程序员的杂志 第6版.docx
WE1.COMETOTHESIXTHEDITIONOFTHEVBPJTECHNICA1.TIPSSUPP1.EMENT!ThesetipsandtricksweresubmittedbyprofessionaldevelopersusingVisualBasic3.0,VisualBasic4.0,VisualBasic5.0,VisualBasicforApplications(VBA),andVisualBasicScript(VBS).VB416/321.evel:IntermediateUSEBOO1.EANVARIAB1.ESFORCHECK-BOXVA1.UESVisualBasicspecifiesaBoolean'sdefaultvaluesaszeroforFalseand-1forTrue.Youmaysaveandsetthevalueofacheckbox,basedontheabsolutevalueofaBooleanvariable,asthesecorrespondtotheintrinsicconstantsVbUncheckedandVbChecked:DimbBoolasBooleanbBool=True'/IfbBool=0thecheckboxwillbe'/unchecked,ifitisanythingelseitwill,/bechecked.Checkl.Value=Abs(bBool)-JeremyBoschen,Branchburg,NewJerseyVB416/321.evel:IntermediateDISP1.AYHORIZONTA1.SCRO1.1.BARUnliketheWindows95commoncontrols,thestandardlistboxdoesn'thaveahorizontalscrollbarwhenlistitemsaretoowidetofitwithinthelistbox.Fortunately,it'snothardtodirectalist-boxcontroltodisplayahorizontalscrollbar.Addthiscodetoaform's1.oadevent.Itfillsalistboxwith100longstringsandcallsSetHScroIItoshowahorizontalscrollbarinthelistbox:PrivateSubForm_1.oad()DimiAsIntegerFori=1To1001.istl.AddItemCStr(i)&_ubottle(三)ofbeeronthewall.uNextiSetHScrollMe,1.istl,1.istl.1.ist(0)EndSubAddthiscode,whichincludestherequiredAPIdeclarationsandtheSetHScroIIroutine,toaBASmodule.TheSetHScroIIroutineusestheSendMessageAPIfunctiontosendthe1.B_SETHORIZONTA1.EXTENTmessagetoalistbox.Thelastargumentisanitemfromthelist,preferablyoneofthelongestitems.SetHScroIIdeterminesthestring'swidthinpixelsandpassesthisvaluetothelistboxalongwiththe1.B_SETHORIZONTA1.EXTENTmessage.Thelistboxsetsitshorizontalextenttothisvalue,andifitiswiderthanthelist-boxcontrol,thelistboxdisplaysahorizontalscrollbar:#IfWin32ThenDeclareFunctionSendMessage1.ib11user3211_AliasnSendMessageAn(_ByValhwndAs1.ong,ByValwMsgAs1.ong,ByValwParamAs1.ong,IParamAs1.ong)As1.ong#ElseDeclareFunctionSendMessage1.ib,user3211_Alias"SendMessageAn(_ByValhwndAsInteger,ByValwMsgAsInteger,ByValwParamAsInteger,IParamAs1.ong)As1.ong#EndIf,Defineconstantformessagetolist-boxcontrolConst1.B_SETHORIZONTA1.EXTENT=&H194PublicSubSetHScroll(FrmAsForm,CtrlAs_Control,StrTextAsString)DimnScaleModeAsIntegerDimnTextWidthAsInteger,ScaleinpixelsforwindowmessagenScaleMode=Frm.ScaleModeFrm-ScaleMode=3,Getthewidth,inpixels,ofthetextstringnTextWidth=Frm.TextWidth(StrText),SendamessagetothelistboxSendMessageCtrl.hwnd,1.B_SETHORIZONTA1.EXTENT,nTextWidth,O,RestorepreviousscalemodeFrm.ScaleMode=nScaleModeEndSub-PeterGomis,Shelton,ConnecticutVB416/32,VB51.evel:BeginningGETTHETRUEMEMBEROFANOPTIONARRAYSettinganelementinanarrayofoptionbuttonstoTrueiseasy.Clickontheoptionbutton,orusethiscode:OptionArray(ThisOne)=TrueThisOneistheIndexofthememberyouwanttobeselected.GettingtheTruememberofanoptionarrayisnotsosimple.Becauseyouneedtoperformthiskindoftaskinalmostanyreasonablycomplexprogram,addingthisfunctiontoyourcodelibraryorgenericmodulesimplifiesthetask.Youdon,tneedtoknowthearraysizeinadvance:FunctionOptionTrueIs(OptionArrayNameAs_Variant)AsInteger,ReturnstheindexoftheTrue,memberofanoptionarrayDimCtlasControlForEachCtlinOptionArrayNameIfCtl.Value=TrueThenOptionTruels=Ctl.IndexExitForEndIfNextEndFunctionYoucanusetheroutinetosetaPublicvariablefromaPropertiessheetusingthisformat:SomePublicVariable=OptionTrueIs(SomeOptionArray()Orusethiscodetosaveaprogramvariablebetweenruns:SaveSetting(uMyAppu,uOptionSettingsu,_"OptionKeyn,OptionTrueIs(SomeOptionArray()1.oadtheroutineusingthiscode:SomeOptionArray(GetSetting(uMyAppu,uuz"Optionsettings","OptionKeyn,O)j=TrueOryoucanloadtheroutineusingthiscode:SomePublicVariable=GetSetting(uMyAppu,11z"OptionSettings",nOptionKeyn,O)UsethiscodetocontrolaSelectCasestructure:SelectCaseOptionTrueIs(SomeOptionArray()CaseO:,ThiscodewillexecuteifelementO,ofSomeOptionArray()isselected.EndSelectUsethiscodetotestacondition:IfOptionTrueIs(SomeOptionArray()=SomeValueThen,Thiscodewillexecuteifelement,SomeValueofSomeOptionArray()is,selected.EndIf-RogerGilchrist,Ourimbah,NewSouthWales,AustraliaVB416/32,VB51.evel:IntermediateDEBUGERRORHAND1.ERSVisualBasicgivesyoutheoptiontoturnofferrortrappinginyourprojects.Thisisusefulwhenyoususpectthatyourerrorhandlerscontainerrorsthemselves.Toturnofferrorhandlingglobally,chooseOptionsfromtheToolsmenu.SelecttheGeneraltab,andselectBreakonAllErrors.Thenexttimeyourunyourprojectinthedevelopmentenvironment,VisualBasicwillbreakwheneveranerroroccursinyourcode,whethertheerroristrappedornot.-JeffreyP.McManus,SanFrancisco,CaliforniaVB3,VB416/32,VB51.evel:BeginningPROTECTDATAWITHINMODU1.ESUsePrivatevariablesinBASmodulestoprotectdatathatthemodule'sroutinesmustaccess,butwhichshouldbehiddenfromtherestoftheapplication:Dimhidden_dataAsIntegerFunctionGetData()AsIntegerGetData=hidden_data*2EndFunction-RodStephens,Boulder,ColoradoVB3,VB416/32,VB5,VBA1.evel:IntermediateCONVERTATEXTFI1.EINTOACCESSMDBItcanbetroublesometoconvertatext