zoukankan      html  css  js  c++  java
  • MAX里DotNet 应用函数


    struct ListViewOps
    (  
       m_dnColor = dotNetClass "System.Drawing.Color",
       function MXSColor_to_dotNetColor hColor =
       (
          m_dnColor.fromARGB hColor.r hColor.g hColor.b
       ),


       function dotNetColor_to_MXSColor dnColor =
       (
          local mxsCol = color (dnColor.r as integer) (dnColor.g as integer) (dnColor.b as integer)
          mxsCol
       ),


       function InitImageList lv stringFileArray pSize:0 =
       (
          --[brief] This method only adds icons and bitmaps, to an imagelist.
          --        An imagelist is a structure that manages images for a control.
          --[param] lv - The listview control. Must inherit from System.Windows.Forms.Control class.
          --[param] stringFileArray - A maxscript array containing filenames of the images to add.
          -- Must pass the string file names as a symbolic pathname:
          -- i.e. "$ui/icons/mybitmap.bmp"
          --[param] pSize - The size of the bitmap to add. For example 16 if the image is 16 x 16 pixels.
          --[return] A System.Windows.Forms.ImageList


          local hImgList  = dotNetObject "System.Windows.Forms.ImageList"
          local imgSize   = dotNetObject "System.Drawing.Size" 16 16
      
          if pSize == 0 then
          (
             hImgList.imagesize = imgSize
          )else if (pSize > 2)

                 then
          (
                       imgSize   = dotNetObject "System.Drawing.Size" pSize pSize
                       hImgList.imagesize = imgSize
                  )
      
                  local bColor  = dotNetClass "System.Drawing.Color"
                  if pTransparentColor != undefined and (classof pTransparentColor == color) then
                  ( 
                        local col = pTransparentColor --temporary
                        hImgList.transparentColor = bColor.fromARGB col.r col.g col.b
                  ) 
                 else
                 (
                        hImgList.transparentColor = bColor.fromARGB 125 125 125 
                  )
      
                 local img    = dotNetClass "System.Drawing.Image"
      

                --获取图标名
                function IsIconFile stringFileName =
                (
                       local type = GetFileNameType stringFileName
                       local result = false
                       if type == ".ico" do ( result = true )
                      result 
                )
      
               for file in stringFileArray do
              (
                      fName = (symbolicPaths.expandFileName file)
                      if (IsIconFile fName ) then --Add icons
                      (
                             local icon  = dotNetObject "System.Drawing.Icon" fName
                             hImgList.images.add icon
                       )
                       else --or Add bitmaps
              (


              local dnBitmap = dotNetObject "System.Drawing.Bitmap" fName
              hImgList.images.add dnBitmap
             )
      )
      lv.SmallImageList = hImgList
     ),

       --给LISTVIEW添加成员
       function AddLvItem lv                 \
                        pTextItems:#()        \
                        pChecked:  false      \
                        pHashKey:  ""         \
                        pTag:      undefined  \
                        pToolTip:  ""         \
                        pInsertAt: undefined  \
                        pImgIndex: 1          \
                        pIndent:   0 =
      (
            --[brief] This function Creates and Adds a ListViewItem to a ListView control.
            --[param] pTextItems - A maxscript array that contains the strings to put in each cell
            --                     of the listview cells which are called ListViewSubItems
            --[param] pChecked   - If true displays a checkbox to the far left of the listview item
            --[param] pHashKey   - A string used for a hash table index
            --[param] pTag       - Any maxscript / custom value to be stored in the tag property
            --[param] pToolTip   - A string to be used for the tooltip for the ListViewItem
            --[param] pInsertAt  - A number used to insert a new listviewItem in the middle of a listview.
            --[param] pImgIndex  - Index of the image to use in the embedded imagelist.
            --[param] pIndent    - A number used to specify how far to indent the text of ListViewItems.
            --[return] Returns the newly created Listview Item.


            local item = dotNetObject "System.Windows.Forms.ListViewItem" pTextItems[1]
      
            item.Checked   = (pChecked == 1 or pChecked == true)
            item.indentCount = pIndent
      
            if pHashKey == "" then
                   ( item.Name = pTextItems[1] ) --Useful for fast lookup
            else ( item.Name = pHashKey )
       
            if pTag != undefined do
                (    item.tag  = pTag   )
            item.toolTipText = pToolTip
            item.imageIndex  = pImgIndex
      
            --Inserts the first item in the pTextItems array after ListViewItem specified by
            --the pInsertAt index.
            if (pInsertAt != undefined) and (pInsertAt > 0) then
            (
                   lv.items.Insert pInsertAt item
                   item.indentCount = 1
            )
            else
            (
                   lv.items.add item
             )
      
      --If the pTextItems array contains more than one entry, add additional cell
      -- entryies to the listviewITem in the form of ListViewSubItem class objects.
      --Note that an extra column will have to have been added to the listview to
      -- display these.


             local count = pTextItems.count
      -- Cache this method to improve performance
             local itemSubItemsAdd = item.SubItems.add


             for i = 2 to count do
             (
                    -- subItem is of class System.Windows.Forms.ListViewSubItem
                    local subItem = itemSubItemsAdd pTextItems[i]
       
                    if (pHashKey == "") then --Useful for fast lookup
                           ( subItem.name = pTextItems[i] )
                    else ( subItem.name = phashKey )


                    subitem.tag = pTag
              )
              --return the listview item if the caller wants it
              item
     ),

    --根据index删除LISTVIEW的成员
     function DeleteLvItem lv index =
     (
             --[brief] Deletes the specified listview item.
             --[param] lv - A System.Windows.Forms.ListView control
             --[param] index - The integer index of the item to delete


             if (index != undefined) and (index >= 0) and (index < lv.Items.count) then
             ( 
                  lv.items.removeat index
              ) 
     ),

    --LISTVIEW添加头成员

     function AddLvColumnHeader lv                \
                              pCaption: ""        \
                              pWidth: undefined =
     (
               --[brief] Adds a column header to the listview control
               --[param] lv - A System.Windows.Forms.ListView control
               --[param] pCaption - A string for the column caption
               --[param] pWidth - The horizontal size of the caption cell and column.


               if (pWidth == undefined) do
               (
                     local sizeCaption = GetTextExtent pCaption
                     pWidth = sizeCaption.x
                     pWidth *= 2.0
               )
      
               --Adds a Column to a listview control.
               local horizontalAlignment = dotNetClass "System.Windows.Forms.HorizontalAlignment"
               lv.Columns.Add pCaption pWidth horizontalAlignment.Left
     ),


     function RefreshListView lv =
     (
             lv.Refresh()
     ),


     function SetFontStyle pControl pStyle =
     (
            --[brief] Changes the font style. The font style is changed according to the list,
            --        but the The size and family are supposed to stay the same.
            --[param] pControl - Must inherit from the System.Windows.Forms.Control class
            --        This control must have a public font property
            --[param] pStyle - A maxscript enumeration or name indicating the style. See the
            --        case statement below for a list of possible values.


            local oldFont = pControl.font
            local oldSize = oldFont.size --as Integer
            local oldStyle= oldFont.style
       
            local fontStyle     = dotNetClass  "System.Drawing.FontStyle"
            local appliedFontStyle = undefined
      
            appliedFontStyle = case pStyle of
            (
                 #bold: (
                                if(oldStyle != fontStyle.bold) do (oldSize -= 3);
                                fontStyle.Bold     
                            )
                 #regular: (
                                fontStyle.Regular  
                            )
                 #Italic:  (
                                if (oldStyle != fontStyle.Italic) do (oldSize -= 3); 
                                fontStyle.Italic    
                            )
                 #Strikeout:(
                                fontStyle.Strikeout
                            )
                #Underline:(
                               if (oldStyle != fontStyle.underline) do (oldSize -= 3);
                               fontStyle.Underline
                           )
                default:   (
                               fontStyle.Regular  
                           )
      )


      local highLightFont = dotNetObject "System.Drawing.Font" oldFont.fontFamily oldSize appliedFontStyle
      pControl.font = highLightFont
     ),


     function SetForeColor pControl pColor =
     (
      --[brief] Changes the text color
      --[param] pControl - A control object which must inherit from the System.windows.forms.control class
      --[param] pColor   - A maxscript color value
      --[return] Returns the equivalent System.Drawing.Color
      pControl.foreColor = MXSColor_to_dotNetColor pColor
     ),


     function HighLightLvItem pControl pStyle pColor =
     (
      --[brief] Highlights the font of a system.windows.forms.Listview class object.
      --[param] pControl - A control object which must inherit from the System.windows.forms.control class
      --[param] pStyle   - A maxscript name specifying the font style. See the SetFontStyle function for details.
      SetFontStyle pControl pStyle
      SetForeColor pControl pColor
     ),


     ---------------------------------------
     -- Mass Deletion Methods
     ---------------------------------------
     function ClearColumns lv =
     (
      lv.columns.clear() 
     ),


     function ClearLvItems lv =
     (
      lv.items.clear() 
     ),


     ---------------------------------------
     -- Selection Methods
     ---------------------------------------
     function GetLvSelection lv =
     (
             --[brief] Returns a maxscript array of selected ListViewItems.
             --    The SelectedItems property of a listview is of class
             --    System.Windows.Forms.SelectedListViewItemCollection
             --[param] lv - A ListView control
             --[return] A maxscript array of System.Windows.Forms.ListViewItem objects


             local sel = lv.selectedItems
             local result = #()
             if sel.count != 0 then
             (
                   local nCount = sel.count - 1 --.NET arrays are zero based
                   result = for i = 0 to nCount collect ( sel.item[i] )
             )
             else
             (
                   result = #()
              )
             result
     ),


     function GetLvSingleSelected lv =
     (
             --[brief] Returns a single selected ListViewItem
             --        from the ListView Control
             --[return] An item of the System.Windows.Forms.ListViewItem class


             local result = GetLvSelection lv
             if (result.count > 0) then
             result[1] 
             else
             undefined
     ),


     function GetSelectedIndex lv =
     (
              --[brief] Gets the index of the selected listview item. Only one
              --        item can be selected at one time.
              --[param] lv - The System.Windows.Forms.ListView class control
              --[return] The integer index of the selected item in listview control


              local result = -1
              if (lv.SelectedIndices.count == 1) then
              (
                     result = lv.SelectedIndices.item[0]
              )
             result
     ),


     function SelectLvItem lv index =
     ( 
               --[brief] Selects an Item in the Listview by integer index
               --[param] lv - The System.Windows.Forms.ListView class control
               --[param] index - An integer of the item to select. Note that
               --        .NET arrays are zero based.
               --[return] Returns the selected ListViewItem if the selection was
               --         valid, otherwise it returns undefined


              local result = undefined
              if (index != undefined) and (lv.items.count != 0) and (index != -1) then
              (
                      if ( index >= lv.Items.count) do
                      (
                            index = lv.Items.count - 1 -- off the end, use last item
                      )
                      li = lv.Items.item[ index ]


                      if li != undefined do
                      (
                            li.selected = true
                            result = li
                       )
              )
             else if (index == -1) do
             (
                   lv.selectedItems.clear() 
             )
             result
     ),

     ---------------------------------------
     -- 表格成员操作
     ---------------------------------------
     function GetLvItemName lv nRow nColumn =
     (
              --[brief] Gets the text from the listviewItem or subItem. The listview
              --        must be in report mode, which means displaying its data in a
              --        grid format. All .NET arrays are zero based.
              --[param] lv - The System.Windows.Forms.ListView class control
              --[param] nRow - An integer for the row, or ListViewItem to query
              --[param] nColumn - An integer for the column (if any) to help locate the cell
              --        by an x y coordinate system.
              --[return] A string from the specified cell.


             local result = ""
             if nRow >= 0 and \
             nRow < lv.Items.count and \
             nColumn >= 0 and \
             nColumn < (lv.columns.count) then
             (
                  local li = lv.Items.item[ nRow ]
                  local si = li.subItems.item[ncolumn]
                  result = si.text
              )
             else
             (
                  result = ""
             )
             result
     ),


     function SetLvItemName lv nRow nColumn newName =
     (
             --[brief] Sets the text from the listviewItem or subItem. The listview
             --        must be in report mode, which means displaying its data in a
             --        grid format. All .NET arrays are zero based.
             --[param] lv - The System.Windows.Forms.ListView class control
             --[param] nRow - An integer for the row, or ListViewItem to query
             --[param] nColumn - An integer for the column (if any) to help locate the cell
             --        by an x y coordinate system.
             --[param] newName - A string to place into the specified cell.


             if nRow >= 0 and \
             nRow < lv.Items.count and \
            nColumn >= 0 and \
            nColumn < lv.columns.count then
            (
       local li = lv.Items.item[ nRow ]
       local si = li.subItems.item[ncolumn]
       si.text = newName as string
      )
     ),
     ---------------------------------------
     -- ListViewItem Operations
     ---------------------------------------
     function GetLvItemCheck lv index =
     (
      --[brief] Queries whether a ListViewItem is checked or not. A listview Item
      --        must be first displaying checkboxes for this to take effect.
      --        Note: All .NET arrays are zero based.
      --[param] lv - The System.Windows.Forms.ListView class control
      --[param] index - The index of the listview Item to query
      --[return] true if checked, false if not checked
      local result = false
      if index >= 0 and index < lv.Items.count then
      (
       li = lv.Items.item[ index ]
       result = li.checked
      )
      result
     ),
     function SetLvItemCheck lv index newState =
     (
      --[brief] Sets a ListViewItems checked state. A listview Item
      --        must be first displaying checkboxes for this to take effect.
      --        Note: All .NET arrays are zero based.
      --[param] lv - The System.Windows.Forms.ListView class control
      --[param] index - The index of the listview Item to query
      --[param] newState - A boolean value that contains the state.
      if index >= 0 and index < lv.Items.count then
      (
       li = lv.Items.item[ index ]
       li.checked = newState
      )
     ),
     function SetLvItemRowColor lv index newColor =
     (
      --[brief] Sets the row color for a listview control.
      --[param] lv - The System.Windows.Forms.ListView class control
      --[param] index - The index of the listview Item to modify
      --[param] newColor - A maxscript color
      if index >= 0 and index < lv.Items.count then
      (
       local li = lv.Items.item[ index ]
       li.ForeColor = MXSColor_to_dotNetColor newColor
       --cache these for fast lookup
       local si = li.SubItems.item
       local siCount = (li.SubItems.count - 1)
       local newNETColor = MXSColor_to_dotNetColor newColor
       for i = 0 to siCount do
       (
        si[i].ForeColor = newNETColor
       )
      )
     ),
     function GetLvItemCount lv =
     (
      lv.items.count 
     ),
     function GetLvItems lv =
     (
      --[brief] Returns a maxscript array of ALL ListViewItems in the listview control
      --[param] lv - The System.Windows.Forms.ListView class control
      --[return] A maxscript array of System.Windows.Forms.ListViewItem objects
      local result = #()
      local nCount = lv.items.count - 1 --.NET arrays are zero based
      local lvItems = lv.items
      for i = 0 to nCount do
      (
       append result lvItems.item[i]
      )
      result
     ),
     function GetLvItemByName lv stringName =
     (
      --[brief] Searchs the listview control for any listview Items that have
      --        a name matching the passed in string.
      --[param] lv - The System.Windows.Forms.ListView class control
      --[param] stringName - The string to search for
      --[return] An array of all items with the stringName, or undefined
      --         if no items were found
      local result = lv.Items.Find stringName true
      if result.count == 0 do (result = undefined)
      result
     ),
     ---------------------------------------
     -- The Grand Initialization Method
     ---------------------------------------
     function InitListView lv pLabelEdit:    true \
          pAllowReorder: true \
          pCheckBoxes:   false\
          pFullRowSel:   true \
          pMultiSel:     true \
          pGridLines:    true \
          pHideHeaders:  false\
          pAllowDrop:    false\
          pInitColumns:  #()  \
          pInitColWidths:#()  =
     (
      --Initialization Function to set general properties of a listview control
      
      ------------------------------------
      -- user defined options
      ------------------------------------
      -- Allow the user to edit item text.
      lv.LabelEdit = pLabelEdit;
      -- Allow the user to rearrange columns.
      lv.AllowColumnReorder = pAllowReorder;
      -- Display check boxes.
      lv.CheckBoxes = pCheckBoxes;
      -- Select the item and subitems when selection is made.
      lv.FullRowSelect = pFullRowSel;
      -- Enable multiple selections
      lv.multiselect = pMultiSel
      -- Display grid lines.
      lv.GridLines = pGridLines;
      -- Set Drag and Drop
      lv.allowDrop = pAllowDrop
      ------------------------------------
      -- other options
      ------------------------------------
      -- Set the view to show details.
      local view = dotNetClass "System.Windows.Forms.View"
      lv.View = view.Details;
      -- Sort the items in the list in ascending order.
      local sortOrder = dotNetClass "System.Windows.Forms.SortOrder"
      lv.Sorting = sortOrder.Ascending;
      
      -- Add columns (if supplied) and name them
      local index = 1
      local doSetWidth = if (pInitColWidths.count == pInitColumns.count) then true else false
      for caption in pInitColumns do
      ( 
       local width = if (doSetWidth) then pInitColWidths[index] else undefined 
       local header = AddLvColumnHeader lv pCaption: caption pWidth: width
       index += 1
      )
      
      -- Set Listview to System Colors
      local textColor   = MXSColor_to_dotNetColor (((colorman.getColor #text  )*255) as color)
      local windowColor = MXSColor_to_dotNetColor (((colorman.getColor #window)*255) as color)

      lv.backColor = windowColor
      lv.foreColor = textColor
     )
    )

    global lvops = ListViewOps()

    /*
    if (true) do --for testing
    (
     lvstuff = ListViewOps()
     
     rollout stuff ~STUFF_ROLLOUT_CAPTION~ 250 height: 250
     (
      local flip = true
      dotNetControl lv "Listview" pos: [5,5,0] 240 height: 240
      on stuff open do
      (
       lvstuff.InitListView lv pInitColumns: #(~LVSTUFF_COL_TITLE_FIRST~,~LVSTUFF_COL_TITLE_MIDDLE~,~LVSTUFF_COL_TITLE_LAST~) pCheckBoxes: true
       lvstuff.InitImageList lv #("$Ui\\icons\\tvObj.ico", "$Ui\\icons\\tvCutObj.ico", "$Ui\\icons\\tvSet.ico") 
        
       lvstuff.AddLvItem lv pTextItems: #("Chris", "Paul", "Johnson")
       lvstuff.AddLvItem lv pTextItems: #("Kenneth", "Robert", "Benson","bang","gee","whiz")
       lvstuff.AddLvItem lv pTextItems: #("Jared","Lee","Hess") pInsertAt: 0
       
       local findA = lvstuff.GetLvItemByName lv "Hess"
       local findB = lvstuff.GetLvItemByName lv "Robert"
       
       lvstuff.HighLightLvItem lv.items.item[0] #bold (color 255 0 0)
       lvstuff.HighLightLvItem lv.items.item[1] #italic (color 0 185 0)
       lvstuff.HighLightLvItem lv.items.item[2] #underline (color 0 0 255)
        
       local theItem = lvstuff.AddLvItem lv pTextItems: #("Jared","Lee","Hess") pInsertAt: 0
       theItem.indentCount = 1
       

       --lvstuff.DeleteLvItem lv 2
       --lvstuff.DeleteLvItem lv 1
       --lvstuff.DeleteLvItem lv 0
      )
      on lv click arg do
      (
       if flip then
       (
        lvstuff.SetLvItemRowColor lv 0 red
        lvstuff.SetLvItemRowColor lv 1 red
        lvstuff.SetLvItemRowColor lv 2 red
       )
       else
       (
        lvstuff.SetLvItemRowColor lv 0 green
        lvstuff.SetLvItemRowColor lv 1 green
        lvstuff.SetLvItemRowColor lv 2 green
       )
       flip = not flip
      )
      on lv columnClick columnHeader do
      (
       lv.ListViewItemSorter = dotnetobject "MXS_dotNet.ListViewItemComparer" columnHeader.column
       lv.ListViewItemSorter = undefined
      )
     )
     
     createdialog stuff
    )
    */

  • 相关阅读:
    固定表格宽度被TABLE的95%给弄没效果了
    界面只有一个文本框时,回车就会产生页面提交事件
    控件开发读书笔记
    调整window.open窗口大小并且不闪烁
    对showModalDialog窗口的大小调整
    borderwidth的没效果的原因
    “解决方案资源管理器”中不能自动选择正在编辑的文档
    HTML编辑器中不要跳来跳去
    华硕本本Fn+F2不能打开无线
    VS2008打上SP1后,修正javascript智能提示的两个问题
  • 原文地址:https://www.cnblogs.com/softimagewht/p/2359539.html
Copyright © 2011-2022 走看看