v4.0
現在のインスペクト対象オブジェクトの PPGLayout を戻します。論理コードから PPGLayout の内容を変更することによりユーザインターフェイスを動的に変更できます。変更が完了したら、PPG.Refresh を使用してインターフェイスを書き換えます。
// JScript Custom Property example demonstrating how to // build a simple Script viewer by using the // siControlFolder, siControlCombo and multi-line string // control. // // Note: This example could be extended: for example by adding a // "Save" and "New" button. Main() function Main() { var oCustomProperty = ActiveSceneRoot.AddProperty( "CustomProperty", false, "Script View" ) ; oCustomProperty.AddParameter3( "Dir", siString ) ; oCustomProperty.AddParameter3( "Scripts", siString ) ; oCustomProperty.AddParameter3( "File", siString ) ; var oLayout = oCustomProperty.PPGLayout oLayout.AddGroup( "Script Directory" ) ; var oItem = oLayout.AddItem( "Dir", "Directory", "Folder" ) ; oItem.SetAttribute( "NoLabel", true ) ; oLayout.EndGroup() ; oLayout.AddGroup( "Script File" ) ; var oItem = oLayout.AddEnumControl( "Scripts", Array(), "", siControlCombo ) ; oItem.SetAttribute( "NoLabel", true ) ; oLayout.EndGroup(); oLayout.AddGroup( "File Contents" ) ; var oItem = oLayout.AddString( "File", "", true, 200 ) ; oItem.SetAttribute( "NoLabel", true ) ; oLayout.EndGroup() ; oLayout.Language = "Jscript" ; oLayout.Logic = OnInit.toString() + PopulateCombo.toString() + Dir_OnChanged.toString() + Scripts_OnChanged.toString(); strDefaultDir = Application.InstallationPath( siUserPath ) + "/Data/Scripts" ; oCustomProperty.Dir = strDefaultDir ; InspectObj( oCustomProperty ); } // // The remaining code is event code which // is injected into the PPG layout. // function OnInit() { PopulateCombo() ; } function Dir_OnChanged() { PopulateCombo() ; PPG.File.Value = "" ; } function Scripts_OnChanged() { strDir = PPG.Dir.Value strScript = PPG.Scripts.Value if ( strDir == "" || strScript == "" ) { PPG.File.Value = "" ; return ; } try { var oFSO = new ActiveXObject( "Scripting.FileSystemObject" ) ; var oFile = oFSO.OpenTextFile( strDir + "/" + strScript ) ; PPG.File.Value = oFile.ReadAll() ; } catch( e ) { PPG.File.Value = "" ; Application.LogMessage ( "Error reading file " + strDir + "/" + strScript + "(" + e.Description + ")" ) ; } } function PopulateCombo() { strDir = PPG.Dir.Value ; strOldValue = PPG.Scripts.Value ; // Get access to the PPGLayout object var oLayout = PPG.PPGLayout ; // The Combo box definition is part of the layout. // We look it up based on the script name of the associated // parameter var oCombo = PPG.PPGLayout.Item( "Scripts" ) ; if ( strDir == "" ) { //Flush any contents oCombo.UIItems = null ; PPG.Scripts.Value = "" ; } else { var oFSO = new ActiveXObject( "Scripting.FileSystemObject" ) ; var oItems = new Array() ; try { bFoundOldValue = false ; var oFolder = oFSO.GetFolder( strDir ) ; fc = new Enumerator(oFolder.files); for (; !fc.atEnd(); fc.moveNext()) { var oFile = fc.item() ; if ( -1 != oFile.Name.indexOf( ".vbs" ) || -1 != oFile.Name.indexOf( ".js" ) || -1 != oFile.Name.indexOf( ".pys" ) || -1 != oFile.Name.indexOf( ".pls" ) ) { // Both label and value will be the string name oItems.push( oFile.Name ) ; oItems.push( oFile.Name ) ; if ( strOldValue == oFile.Name ) { bFoundOldValue = true ; } } } oCombo.UIItems = oItems ; if ( bFoundOldValue ) { // This is the case when you close and reopen the // property page - we want to restore the original // setting if possible. PPG.Scripts.Value = strOldValue ; } else { // We leave the value empty // so that the user actually // picks a script file // before we load anything PPG.Scripts.Value = "" ; } } catch( e ) { Application.LogMessage( "Error finding script files" + " in specified directory: " + e.Description ); } } // Necessary to make sure the updated Combo is drawn PPG.Refresh() ; } |