'Theme.MultiLabel 'Label multiple fields of theme '**** get list of fields to label theTitle = "Label Multiple Fields" theView = av.GetActiveDoc theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFtab theFList = theFTab.GetFields theMsg = "Select Fields to Label" theFields = MsgBox.MultiList(theFList,theMsg,theTitle) if (theFields = nil) then return nil end '**** label fields for each f in theFields theTheme.SetLabelField(f) theLabeler = Labeler.Make(theView.GetDisplay.ReturnExtent) theLabeler.Load(theTheme) theView.GetAutoLabels(theLabeler, false) endHowever, the results are not very satisfactory. Another approach is to create one label per feature, containing stacked text. If you want to use ArcView's labeler, what you need to do is create a concatenated item. The following script will work for numeric and character fields:
'Theme.ConcanFields 'Create character field representing concatenation of other fields '**** check if theme is editable theTitle = "Concatenate Fields" theView = av.GetActiveDoc theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFtab if (theFTab.IsEditable.Not) then theMsg = "Active Theme is not editable."+NL+ "Please start editing first." MsgBox.Error(theMsg,theTitle) return nil end '**** get list of fields to concatenate theFList = theFTab.GetFields theMsg = "Select Fields to Concatenate" theFields = MsgBox.MultiList(theFList,theMsg,theTitle) if (theFields = nil) then return nil end '**** get name of field to add theFieldName = MsgBox.Input("Name of New Field",theTitle,"LabelText") if (theFieldName = nil) then return nil elseif (theFTab.FindField(theFieldname) <> nil) then MsgBox.Error("Field Already Exists.",theTitle) return nil end '**** add field theWidth = 0 for each f in theFields theWidth = theWidth + f.GetWidth + 1 end if (theWidth > 254) then MsgBox.Error("Maximum width (254) exceeded.",theTitle) return nil end theField = Field.Make(theFieldName,#FIELD_CHAR,theWidth,0) theFTab.AddFields({theField}) '**** calculate values for each r in theFtab theValue = "" for each f in theFields theWidth = f.GetWidth fp = f.GetPrecision if (fp > 0) then theString = theFtab.ReturnValue(f,r).SetFormatPrecision(fp).AsString else theString = theFtab.ReturnValue(f,r).AsString end if (theValue = "") then theValue = theString else theValue = theValue + NL + theString end end theFtab.SetValue(theField,r,theValue) endNote that the table in question must be editable (i.e. a shapefile in edit mode). Otherwise, if you don't care about positioning, you can try the "brute force" approach:
'Theme.StackLabel 'Create stacked labels of multiple fields '**** get list of fields to label theTitle = "Label Multiple Fields" theView = av.GetActiveDoc theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFtab theFList = theFTab.GetFields theMsg = "Select Fields to Label" theFields = MsgBox.MultiList(theFList,theMsg,theTitle) if (theFields = nil) then return nil end '**** create labels for each r in theFtab theValue = "" for each f in theFields theWidth = f.GetWidth fp = f.GetPrecision if (fp > 0) then theString = theFtab.ReturnValue(f,r).SetFormatPrecision(fp).AsString else theString = theFtab.ReturnValue(f,r).AsString end if (theValue = "") then theValue = theString else theValue = theValue + NL + theString end end theShape = theFTab.ReturnValue(theFTab.FindField("shape"),r) thePoint = theShape.ReturnCenter theGraphicText = GraphicText.Make(theValue,thePoint) theView.GetGraphics.Add(theGraphicText) theGraphicText.Invalidate end