| Part/Chapter/Page | Notes, Errata etc | 
  | Part 1: Overview Of The Visio Development Environment 17 | 
  | 
  Chapter 1: Introduction 19
    
      Programmable Diagramming: Enter Visio 20The Development Challenges 20Who This Book Is For 21What This Book Covers 22What This Book Does Not Cover 22Caveat: This Book Is Probably Wrong! 22Companion Website for Tools, Samples, Updates 23Visio Version Information 23Acknowledgements 23 | 
 | 
  |  
  Chapter 2: Overview of Visio Territory 25
    
      The User's View 25The Developer's View 26
        
          Generic Solution Structure 26At the Heart 26Automation 26Added Functionality 27Connections To Data 29Example Scenarios 30First Look At Visio Structure 30
        
          "Model + View + Controller" Structure 32Document Types and Roles 33Where The ShapeSheet Environment Fits In 33ShapeSheet Heavily Used In Automation Too 34The Automation Environment 34Visio Model vs. Solution Model 35From Here 36 | p32: Fig 2-3 "features of interest" | 
  | 
    Chapter 3: A Plan For Coping 37
    
      Planning Your Course Of Study 37Preparation 39
        
          Developing Visio Solutions Book ("DVS") 39Multiple Monitors 39Get Comfortable With VBA 39Visio 2002 Developer's Survival Pack Browser Tools 40
        
          Events Browser 40UIObjects Browser 40CommandBars Browser 40Inheritance Browser 40XML Browser 40Bulk VS?-to-XML Converter 40Visio.bin Browser 40Download and Installation 41Visio 2002 Developer's Survival Pack Utilities 41
        
          VB-to-VSL Adapter Component 41Registration Tools 41Other References and Support 41
        
          Books 41Newsgroups 41Websites 41More Visio Tools 42Preliminary Visio and VBA Skillset 42
        
          Preliminary User-level Visio Activities 42Some ShapeSheet Activities 43Preliminary Developer-Level Activities 43From Here 44 |  | 
  | Part 2: Visio Structural Breakdowns 45 | 
  | 
  Chapter 4: Visio Object Model 47
    
      Expanded Object Model 47
        
          Objects with Cells 49Collections Versus Individual Objects 49User Interface Objects Shown Abbreviated 49Layer Objects 49Relationship To DVS and Poster Object Models 49Browsable Object-Property-Method Tables 49Tools for Object Model Browsing 50
        
          Visimation Xpose 50VBA Object Browser 51VBA Locals Window 51XML Browser 52Additional Tools 52From Here 52 |  | 
  | 
  Chapter 5: ShapeSheet Structure and Functions Introduction 53
    
      Orientation 53
        
          Complete Automation Understanding Must Include Cells ! 53ShapeSheet-Environment Covers "Content" Branch of Object Model
    54ShapeSheet Organized as Sections, Rows and Columns 54ShapeSheet Section-Row-Cell Reference Tables 56ShapeSheet Orientation Continued 56
        
          "All ShapeSheets Behave the Same" 56How the ShapeSheet Applies to Diagram Shapes 56Objects Which Contain Cells Via Dummy Shapes 57Objects Which Contain Cells Directly 57ShapeSheet Sections and Rows 58
        
          Varying Section-Row Structures 58Sections and Rows vs. Objects 60ShapeSheet Formulas and Functions 60From Here 62 |  | 
  | Part 3: Visio Functional Areas In Depth 63 | 
  | 
  Chapter 6: Visio Files: Drawings, Stencils, Templates 65
    
      Top Concepts 65
        
          Organizing Our Overview 66Use XML Browser 67File Relationships 67
        
          Drawing File Point-of-View 67Drawing File With Stencil 68Template file 69Summary of Roles of Document Components 71Silly Visio File Tricks 71File Architecture Implications 71
        
          Developing Masters and Styles 72Where To Put VBA Code? 72From Here 72 | p70: Resources such as Styles [...] In other situations you may decide that a
template should define particular styles. | 
  | 
  Chapter 7: Shapes 73
    
      
        Comfort First 73 Shapes and Masters 73 "Hello World" via Automation and VBA 74 Single Shape Type, Distinguishing Attributes 74Shape Features Overview 74Identity and Name 76
        
      Coordinate Space and Alignment Box 78
        
          Coordinate Space 79One-Dimensional Shapes (Connectors) 80Alignment Box 80Selectively Enabling/Disabling Various Geometry-Controlling Features 82Geometry and Geometry Attributes 82
        
          Geometry Row Types. 82Geometry Attributes 83Geometry-Related Formatting 83Adjusting Feature Positions: Controls 83Text 84
        
          Text Position 84Text Appearance 84Useful Text Idioms 85Fields: ShapeSheet Values to Text 86Text To ShapeSheet: SHAPETEXT( ) 86Text To ShapeSheet Value: EVALTEXT() 86Setting the Text from the ShapeSheet 87Selectively Enabling/Disabling Text Behaviors 87Character Section: Controlling Text Format 87Studying Visio's Supplied Stencils and Templates 88From Here 89
        
          Shapes With Member "Sub-Shapes" (Group Shapes) 89Connectors, 1-D Shapes 89Glue, Connections and Connection Points 89Solution-Specific "Data" 89Styles and Masters 89Layers 89Right-Click Context Menu: Actions 89Events 90Foreign Objects 90Hyperlinks 90 |  | 
  | 
  Chapter 8: Masters and Shapes 91
    
      "Master" versus "Shape Instance" 91Master-To-Shape and Shape-To-Master 92
        
          Starting From the New Master Command 92Starting From Drawing Page 92Stencil File versus Document Stencil 93
        
          Instances Are Always Created From Local Stencil 94Master Matching Alternatives 94Development Implications 94Other Wrinkles 95From Here 95 | Fancy Feature: Master Adds Cells To Page 
  2002-08-08 | 
  | 
  Chapter 9: Some ShapeSheet Practicalities 97
    
      ShapeSheet Cell Reference Syntax 97
        
          Finding Out Cell Names 98Universal and Local Row and Cell Names 98
        
          Which Names Are Which? 99ShapeSheet Calculation Dependencies 100
        
          Cells Set Multiple Ways 100Monitoring Recalc Loops 102Keys To Solution 102Trickier Example 102To REALLY Break A Loop 103Twin Peaks Example 103Flaky Recalculation Problems 104The DEPENDSON( ) Function 105Guard( ) Function Revisited 107ShapeSheet Cell Types and Units 107
        
          Internal Numeric Value versus Output Appearance 107"Magic" X, Y Extraction 108Assumed Units 108Formula Change Tracking 108XML Files Handy for Studying 109From Here 109 |  | 
  | 
  Chapter 10: Composite Shapes Using Groups 111
    
      Group Structure 111
        
          Group As Holder Only 111Group As Shape With Sub-Shapes 112Member Coordinate Space 113Group Behavior Variants 114
        
          Resize Behavior 114Add On Drop, a Very Promising Feature 115Controlling The Alignment Box 116Controlling Formatting 116A Composite Shape Example 117
        
          Structure 117Behavior 118ShapeSheet 118Editing The Structure With VBA Functions 120Embellishments 123Protection/Enablement Issues 124Composite Shapes: Ready To Deploy? 124Form-Style Text Behavior 125
        
          Navigation 125Text Clipping 126From Here 126 |  | 
  | 
  Chapter 11: Connectors, Routing and Layout 127
    
      Plan of Attack 127Connectors Using Ordinary ShapeSheet Features 128
        
          1-D Coordinate Space 128Straight Connector 129Curve Connector 130Right Angle Connector 130Shortcomings 131Universal Connector 131Further Caveats 134Summary of Simple Connectors Implementation 134Dynamic Layout Services 135
        
          Overview of Dynamic Layout Services 135Basic DLS Participation Eligibility: ObjType 136Dynamic Layout Services Details 137Routing 138Connector "Appearance" 139Line Jumps 139Plowing 139Layout 140Dynamic "Walking" Glue 141Page-level DLS Disable: DynamicsOff 141Dynamic Connectors 141
        
          Dynamic Connector Geometry 142Implications For Geometry Dependents 142Text Pin 143Connection Points 143Control Points 144Enable/Disable Dynamic Connector Functionality 144Some Dynamic Connector Developer Issues 144Alternative Solutions to Fancy Routing 147
        
      Dynamic Layout Performance Hints 149Comparison of Connector Strategies 150From Here 151 |  | 
  | 
  Chapter 12: Glue and Connects 153
    
      Orientation 153What Glues to What 155Glue In Action 155
        
          Initialization 155How Gluer Depends on Gluee 157Control Point to Connection Point 157Connector Endpoint to Connection Point 157Connector to "Shape": Dynamic or "Walking" Glue 157Various Parts to Guide Lines 158Visio's Gendered, Directional Connection Points 158Factors Affecting User Operation of Glue 161
        
          Enhanced Snap and Glue Control in Visio 2002 161Lock/Guard Glue Formulas 162Connections To/From Group Member Shapes 163Some Glue Issues 163
        
          Dynamic Glue (_WALKGLUE) Issues 163Connects Objects: Reporting On Connections 163
        
          Connects Just Reports on Cells 164Some Connections Report As Two Connect Objects 164Other Notes 164
        
          Temporary Connection Points 164From Here 165 |  | 
  | 
  Chapter 13: Formatting Via Masters and Styles 167
    
      Mastering Master Concepts 168
        
          Copying versus Inheritance 168The Initial Master-Instance Relationship 168Verifying Inheritance/Local Behavior 169Creating and Removing Local Override Formulas 170Severing Master-Shape Inheritance 170Master Identity and Names 170Styles-The Basics 170
        
          Style "Attribute Sets": Three Sets of Cells 171Style-to-Style Inheritance 172Master and Style Inheritance, Together At Last 172Inheritance Browser 174Three "Sub-Style" Attribute-Sets Versus Overall
    "Style" 174Applying a Style 174Applying a Style Switches Inheritance For Entire Attribute-Set 175Applying a Local Formula or Value to a Cell 175Does "Apply Style" Beat Guard() and LockFormat? 175Reverting a Section or Cell to Inheritance 176Un-Applying a Style (Revert to Inheritance-from-Master) 176Style Collisions 176Style Philosophy and Application 177
        
          Styles as Named Sets of Attribute-Values 177Styles for Conveying Semantics 177The Evil "Color Scheme" Add-On 177Rethinking the Motivation 178
        
      Style Miscellany 179
        
          Seemingly Superfluous Sections? 179Some Development Implications 179
        
          Incomplete Inheritance Visibility 179The Need for Tools 180From Here 180 | p174: Inheritance Browser [...] and where these inherit from. | 
  | 
  Chapter 14: Line and Fill Patterns and Line Ends 181
    
      Relationship Between Pattern Masters and Instances 181
        
      Line Pattern and Line End Miscellany 183
        
          Creating Unscaled Line-Ends 183Line End Sizing Ratios 184Line Pattern and Line End Positioning 185Other Wrinkles 186From Here 186 |  | 
  | 
  Chapter 15: Layers 187
    
      
    Orientation 187Layer Structure And Behavior 188
        
          A Page's Layers Versus the Layers Object 188A Shape's Layer Membership 188Adding/Deleting Layers 188Assigning Shapes to Layers 188Using Layers 189
        
          Layers For Shape Data Attributes and Querying 189Querying Made Feasible 190Layer Control Tricks 191From Here 191 |  | 
  | Part 4: Building Visio Solutions 193 | 
  | 
  
    
    Chapter 16: Building Solutions: Introduction 195
    
      Overview 195Alternative Solution Forms 196Implications 198
        
          Angle of Upcoming Solution Topics 199Different Visio Roles, Different Forms of Solution 199
        
          Visio for Rendering/Output 199Visio for Information Capture 200"Discipline-Specific Drawing Environment" 200Discrete Operations on Drawing 201Adding Intelligence to Shapes: "Shape Services" 201Adding Intelligence to Drawings: Drawing-wide Semantics 201Drawings as Views of Models 202Visio as Control Panel 202From Here 203 | p196: Alternative Solution Forms [...] each solution form in detail. | 
  | 
  Chapter 17: The "User Interface" Functionality 205
    
      
    Orientation 205
    
      Two User Interface Models to Choose From! 206Study Sequence 206Overview of UIObject-Based Object Model 207
        
          Items 207"Groups" of Items 207"Sets" Handle "Context" 207Extent of User Interface Data 209Three "Levels" Of UI Customization 209UIObjects: Messy Details 210UIObject Browser: Completing the Picture 211Overview of CommandBars-Based UI Object Model 211
        
          Visio's Use of CommandBars 212CommandBarControl Events 213CommandBar Browser 214Document-Specific CommandBars? 214UIObjects and CommandBars, Together At Last 215
        
          UIObject-Based Model to CommandBars 215CommandBars to UIObject-Based Model 217Implications for CommandBarControl Events 218Usability of CommandBar Model 218General UI Strategy Using the UIObject-Based Model 219
        
          Constructing a Custom UI 219Working With The Active UI 220Persisting and Instating a Custom UI 221Don't Forget ShapeSheet Actions Section! 223Wrinkles 223
        
          Potentially Confusing UIObject Names 223Persistent Events on Most Visio Templates Causes UI Confusion 223Disappearing Toolbar Items 224Example UI Exercises 224
        
          Adding UI Elements 224Minimal UI 226From Here 227 | Additional note on "temporary" CommandBars. The book notes that altering the Visio UI via the CommandBars model results in
  changes to Application's Custom UI, which are in turn persisted to custom.vsu
  (p209).  Not mentioned is the fact that the CommandBar.Add method has a
  parameter called "Temporary", which prevents the CommandBar changes
  from persisting from session to session. (This does little to change my
  conclusion that the CommandBar model is not very usable with Visio.)
 | 
  | 
  Chapter 18: Events and Other Notifications 229
    
      
    Overview 229
    
      Several Different Event Mechanisms 229Where To Put The Code? 231Event Persistence 231Notifications from ShapeSheet Activities 231
        
          CALLTHIS 232RUNADDON 233RUNADDONWARGS 235Dedicated Event Cells 235Automation Events Overview 235
        
          Spectrum of Events Exposed 236Event Filters 236Document Events 236WithEvents Event Handling 237
        
          WithEvents Overview 237Code for WithEvents: Simple Case 238"Forgetful" VBA? 239Example With Model 239Code for WithEvents: More Realistic Case, Using Class Module 239Further Issues 242Events Via EventList.Add and AddAdvise 243
        
      EventList.Add 244EventList.AddAdvise 246
        
          Simple Event Sink Example 247Event Sink with Forwarding 248Persistence 249AddAdvise Compared To WithEvents 249EventList Interacts With WithEvents 249Filters 250Miscellaneous Issues 252
        
          NoEventsPending versus VisioIsIdle 252BeforeXXX Events 253VB/VBA Issue With Signed Two-Byte EventCode Values 253Event Support That Visio Lacks 254From Here 254 | p231: Table 18.2 [...] RUNADDON: Runs an addon program (or calls addon code in
  a VSL) or calls VBA code.  (The part about RUNADDON executing arbitrary
  VBA code supplied in its argument string accidentally didn't get deleted --
  RUNADDON no longer has this feature as of Visio 2002). Added Note: Grouping Interacts With Shape
  and Cell References and Events | 
  | 
  Chapter 19: VBA-Based Solutions 255
    
      
    Overview 255The Modules of a VBA Project 256
        
          Cross-Project and ShapeSheet-to-Project References 259Project Names 261Be Aware of VBA Project Behavior Options! 261Getting Rid of a VBA Project 262Where To Put Solution Code 262
        
          Put VBA Code In Stencil 263Solution-In-Stencil Gotchas 264Benefits and Drawbacks of VBA-Based Solutions 266From Here 266 | Frank K's Notes on VBA Window Handles and Code Location 
  2002-08-08 | 
  | 
  Chapter 20: Visio Solution Library Solutions: VSLs and Addons 267
    
      
    Overview of VSL Features 268The VSL API 268
        
          The Visio-to-VSL Conversation 269Introducing the VBVSL_Adapter 270
        
          Overview of VBVSL and Adapter 270Minimal "VBVSL_Min" Example 271IVBVSL Interface Details 271Fulfilling the Needs of VBVSL.cls 274Structure For More Complex VSLs 278
        
          Breaking Down Functionality By Addon Or "Command"? 279Installation, Registration and Uninstallation 280
        
          VSL/Addon Registration With Visio 280Visio.bin Utilities 281VSL Unregistration 281Additional VSL Installation Considerations 282Summary of Benefits and Drawbacks to VSLs 282
        
          Benefits 282Drawbacks 283From Here 283 | p274: How Visio and Adapter [...] fill in the needs of VBVSL.cls. | 
  | 
  Chapter 21: Exe and Out-of-Process Solutions 285
    
      
    Out-Of-Process Concerns 286Integration With Visio 286ReflectArgs Exe Example 287Conclusions 289From Here 289 |  | 
  | 
  Chapter 22: COM Addin Solutions 291
    
      
    COM Addins Overview 291COM Addins In Visio 292Conclusion 293From Here 293 |  | 
  | 
  Chapter 23: Solution Window Management 295
    
      
    Out-of-Process vs. In-Process Windows 295Default Visual Basic Form Behavior 296Modal Form 296Modeless Form 296Coordinating modeless windows with Visio 296Plain Desktop window 297Plain MDI Child window 299Anchor window 300Stencil window 304From Here 305 |  | 
  | 
  Chapter 24: ShapeSheet Service Addons 307
    
      
    Event Lifetimes and "ShapeSheet Services" 307
    
      ShapeSheet Services Pattern 308Demo ShapeSheet Services Sample 308Main ShapeSheet Services Concepts 309"Demo ShapeSheet Services" Sample 309
        
          I-Am-Selected Service 310Supporting Utility Functions 313Connect Count Service 314Navigation Keys Service 315Further Notes on Demo ShapeSheet Services Sample 316Conclusions 317From Here 317 |  | 
  | 
  Chapter 25: Visio and XML 319
    
      
    Visio 2002's XML Features 319Making Sense of XML 320
        
          What XML Looks Like 320It's A Document, No Wait, It's A Database, No Wait... 321MSXML 321XSL and XSLT 322Schemas 322Namespaces 323Hands-On "XML for Visio" 324
        
          Studying VDXs To Learn Visio Structure 324"XML for Visio" for Hard-to-Fix Fixups 325SolutionXML Examples 325Processing "XML for Visio" Files 328
        
          Ideas 328Using MSXML to Iterate Through All Nodes 329View 329Change: Re-Mastering Shapes 331Let MSXML Do The Walking: XSL Patterns and XPath 331Visio XML Straight To HTML, in Code 332Visio XML Straight To HTML, in Browser 333Wrinkles 334Generating XML for Visio 335From Here 338 |  | 
  | 
  Chapter 26: Visio and ActiveX 339
    
      
    Using Ordinary ActiveX Controls in a Visio Document 339
    
      Dynamically Adding ActiveX Controls to Drawing 340Documents Linked/Embedded In Visio 341Visio ActiveX Control? Not Quite: Visio Embedded 342
        
          WebBrowser-Based Demo 342Accessing Visio from Within an "ActiveX Shape" 344
        
      From Here 347 | p340: Design Mode vs Run Mode [... end of section...] To enable smoother
  debugging, you may want to establish an Init routine that centralizes the code
  for initializing global variables, hooking events etc, to be called from
  DocumentOpen as usual, and also from RunModeEntered. p346: User Control [...] Ambient [...] you can look up this object in
  Chapter 30. Actually, in Visio's type library this is called "IVAmbients"
  and is in Chapter 30 in the "Util" branch.
   Visio Embedded (via WebBrowser): Followup 
  (courtesy Jakub S) 2002-08-08 | 
  | 
  Chapter 27: Common Solution Techniques 349
    
      
    Drag And Drop to/from Solution Windows 349
    
      Persisting Solution Data 355
        
          Text In Cell 355XML 355VisXData and IStorage 355When to Persist 357Undo 357
        
      Bitmap Import and Export with Visio 359Internationalization: Universal versus Local Names 360Document Protection 361Paths and Curves 361Registry 362Version Info 362From Here 364 | A Collection of Bitmap Notes 2002-08-08   | 
  | Part 5: Browsable Reference to Visio Structure 365 | 
  | 
  
    
    Chapter 28: ShapeSheet Section-Row-Cell Structure 367
    
      Reading The Tables 367
        
          Constants 367Finding The Section Of Interest 368 |  | 
  | 
  Chapter 29: ShapeSheet Functions 387
   | Table 29-2. caption should read "Visio 2002". It's not actually
  wrong (there are the same set of functions in Visio 2002 as in Visio 2000) but
  it looks silly! | 
  | 
    Chapter 30: Visio Objects, Properties and Methods 395
      
    Object/Property/Method Table Organization 395Object Summary Table 398
        
          COM-Related Columns 398Event DispInterfaces 398 | p422: Evidently due to obscure cosmic ray activity, the object
  "Page" appears in its correct alphabetical order, but is labeled
  IVPage. In fact, for most Visio objects you can use the SomeObjectName or
  IVSomeObjectName forms interchangeably. I prefer to use the non-IV form. (In
  actual use, I try to always qualify it with the library name, like this:
  "Visio.Page" to avoid confusion with same-named objects from other
  libraries.) | 
  | 
  Chapter 31: Events Table 459 |  | 
  | Index 463 |  |