johnvisiomvp

Life with Visio and other Microsoft Toys!

Dual Outlets

leave a comment »

The VBA code to stack shapes was used to create a series of shapes that represented inserts into the cap of a bottle that allowed hoses to be connected. For the single connections, the shapes making up the stack were horizontally symmetrical, so after stacking the shapes it was a simple matter of aligning all the shapes around their centers. The dual connections were only slightly more complex. All the shapes were aligned around the same center, but the shape through the cap was offset from the rest. So, it was just a matter of adding a horizontal guide to align to the edge of the bottom shape above the cap and then horizontally move the part within the cap to align to the guide. The next step was to use the Size & Position window to add the horizontal offset to that shape.

So, now I had a single outlet shape with the proper offset. The next step was to group the shape, duplicate the group and align the two grouped shapes horizontally and vertically. The result is a dual version of the shape. Cleanup involved deleting the duplicated section through the cap, ungrouping and doing a Join operation to simplify the shape. Since I had to do a number of shapes of various cap sizes, outlet sizes and offsets, I kept a master of the single outlet version (the one with the offset), so I could earebuild the shapes.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

August 21, 2015 at 7:49 am

Posted in Visio, Shapes

Tagged with ,

Are Visio Shapes Stacked against you?

leave a comment »

Recently I have been working on some Visio shapes that were basically a stack of rectangles. Though Visio has tools for aligning and distributing shapes, it does not have an easy way of stacking shapes. If you are lucky enough to have shapes that are multiples of the grid size, it is a piece of cake. If not, the guides can be used to connect a shape, above or below the guide. If you want to do more than two it gets tricky. First, you have to determine the top of the shape to determine where to place the next guide. Then use the Size / Position dialog to set the position of the guide. You can then add the next shape to the guide.

This of course would be tedious, but long before Visio was acquired by Microsoft, it was the first non Microsoft company to fully implement VBA. So, now the problem is trivial, turn on developer mode and write some VBA. So, this routine will take the selected shapes and stack them.

Public Sub StackVertical()
Dim vsoSelect As Visio.Selection
Dim vsoShape As Visio.Shape
Dim ShapeH As Double
Dim OldShapeH As Double
Dim pin As Double

Set vsoSelect = Visio.ActiveWindow.Selection
If vsoSelect.Count > 0 Then
Set vsoShape = ActiveWindow.Selection.Item(1)
pin = vsoShape.Cells(“piny”).Result(“inches”) + vsoShape.Cells(“LocPinY”).Result(“inches”)

For Each vsoShape In vsoSelect
ShapeH = vsoShape.Cells(“Height”).Result(“inches”)
vsoShape.Cells(“piny”) = pin – (OldShapeH + ShapeH) / 2
pin = pin – (OldShapeH + ShapeH) / 2
OldShapeH = ShapeH
Next vsoShape
Else
MsgBox “You Must Have Something Selected”
End If

End Sub

… and the following code will stack the shapes horizontally.

Public Sub StackHorizontal()
Dim vsoSelect As Visio.Selection
Dim vsoShape As Visio.Shape
Dim ShapeW As Double
Dim OldShapeW As Double
Dim pin As Double

Set vsoSelect = Visio.ActiveWindow.Selection
If vsoSelect.Count > 0 Then
Set vsoShape = ActiveWindow.Selection.Item(1)
pin = vsoShape.Cells(“pinx”).Result(“inches”) – vsoShape.Cells(“LocPinx”).Result(“inches”)

For Each vsoShape In vsoSelect
ShapeW = vsoShape.Cells(“Width”).Result(“inches”)
vsoShape.Cells(“pinx”) = pin + (OldShapeW + ShapeW) / 2
pin = pin + (OldShapeW + ShapeW) / 2
OldShapeW = ShapeW
Next vsoShape
Else
MsgBox “You Must Have Something Selected”
End If

End Sub
Though you could do a select area, it may be safer to use the Ctrl key to select the shapes in the stacking order you want.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

August 14, 2015 at 1:05 pm

Posted in Shapes, Visio

Tagged with ,

Future of Visio?

with one comment

Visio was introduced 22 years ago and has unfortunately become complacent. The Visio wannabees have become established and use half-truths to promote their products. What was Visio’s last oh wow feature, something to make the market pay attention?

In its’ life time, most under the Microsoft brand, Visio has come out with some interesting innovations, Data Graphics, Containers, Rules, the shapesheet and a programmable model. Before joining Microsoft, Visio was the first non-Microsoft company to fully embrace VBA.

Initially, Visio was a simple way of making connected diagrams. Drop a predefined shape and add a connection line. If the shape moves, the lines remained connected. Unlike other packages at the time, which did not have the connection feature, you were not limited to the eight shapes they supplied. The Visio team had added some magic behind the shapes, called the shapesheet. My handwriting is atrocious and I can not draw, but with the shapesheet I am able to create some fantastic shapes. Nothing compared to the mastery of one of the original shape miesters like Chris Roth, but adequate. The shapesheet contains formulas that react to the shapes surroundings. So, you could start a shape from scratch or build on an existing shape. Chris Roth’s site is the place to be if you want to be a shape developer.

Then custom properties were added so the shapes could contain more than a picture of the object. The information could surface in reports or be used to alter the shapes appearance. A critically low value could change the shape colour to red. Along the way, it was possible to interrogate a Visio drawing or modify it under the control of a program. Data Graphics added the ability to add KPIs to a shape without cluttering a drawing. Since one use of Visio drawings was to illustrate processes, rules were added (I am willing to bet most people are not aware that there were Visio Rules (Check out David Parker’s books, he is our Rules wizard)). So, with rules you could check a drawing for compliance and is with most things Visio, you were not limited to the rules in the box. As I said, David Parker wrote the book on it.

So, what happened? When Visio was on its’ own, it had full control of the marketing and training, but as part of Microsoft, Visio is just a small piece of the puzzle. Now marketing has a plethora of products to promote and sales can make their quota on other products. Unfortunately, a lot of people are unaware of Visio’s capabilities. Most consider it just a diagramming tool using clipart. On the Microsoft site, there are a number of “Visio” stencils which are no more than clipart encapsulated in a Visio shape, with none of the smarts of a true Visio shape.

Visio 2013 was a great product, but it was released more than three years ago. So far, there have been no hints of what is to come, or if there will be a new version.

So what needs to happen? There needs to be a stronger marketing campaign to promote Visio both inside and outside Microsoft. Has anybody heard of an ad for Visio? The sales force needs to aggressively promote Visio features, especially to the regions. By the time information reaches the regions, the gung ho attitude has been watered down and Visio has become just a clipart diagramming tool.

There should be a Visio-lite to get more on board. A web version would take of the Visio wannabees who complain that there is no a Mac version.

The programming of Visio should be simplified. In the old days I use to use VB until Visio spoiled me with VBA. I have tried to return, but the various methods, like VSTO have too much overhead or the process of including shapes is convoluted and keeps changing. There should also be training. At one point there was certification for Visio, but that has lapsed. And when I talk about programming Visio, I also include those who want to master the shapesheet.

Price

I have owned almost all versions of Visio, except Visio Maps, but I am probably not the best person to comment on the price. I have never paid for a version. What got me interested in Visio was a Visio 1 sampler that was on a Windows 3.1 upgraded evaluator floppy from Microsoft Canada. I started answering questions on the ShapeWare forum on CompuServe and as Visio improved, was given beta versions and then the final releases. Having said that, I do find the price high. This is software, not a physical object, so dropping the price just means you have to sell more for the same revenue. A lower price would increase demand and destroy the main reason used by the wannabees.

MSO shapes – (MSO – MicroSoft Office) For a long time, the other Office products, Word, Excel, PowerPoint and Publisher have had Visio like capabilities. The problem is that these drawings can not be copied into Visio and the experience continued. What you get is a single grouped shape. Ungroup it and it falls apart. A simple red text box becomes a shape for the fill colour, a shape for the outline, a shape for the text. So you end up redrawing using real Visio shapes. At some point the MSO shapes need to merge into Visio.

As part of the learning curve, anyone who wants to appreciate the power of Visio should visit the websites of my fellow Visio MVPs: David Parker, John Goldsmith and especially Chris Roth.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

January 27, 2015 at 3:46 am

Posted in Visio

Universal Apps – Settings on stun

leave a comment »

Settings are one of those things that are not the same between Windows and the phone. In Windows, there are charms and developer can add their code to Charms like Settings, on the phone, the developer has to handle it on a page they create that they call by adding a button to the screen, usually an AppBar button. So, the user has a nice UI experience on the phone and the developer has to match the experience on the phone. Normally this is done with the AppBar. There are also several other housekeeping tasks, (help, about, reviews, promos for your other apps) that also compete for the AppBar.  On my WP7 apps, with only four AppBar buttons, I had to make use of the AppBar menu buttons as well. To allow multilingual text on the buttons, this was done in code behind and got a bit messy.

Now with Universal Apps, a method is needed to try and reuse some of the code. So, rather than managing multiple buttons, it was easier to use a single button and make the page called a bit smarter. The logical choice appeared to make the “Settings” page a Panorama or a Pivot page with each housekeeping task having their own subpage. Since Panorama has gone and Pivot is on it’s way out, a HubPage appears to be the solution. So a button to get to the page and scrolling left or right to get to the information worked nicely. The overlapping of the hub sections gives a nice hint at the next hub section.

Of course, there is still the issue with duplicating the code for Windows and the Phone. This can be easily handled by making each housekeeping task a user control  placed in the shared folder. So the different mechanisms for calling the housekeeping task are stored in the Windows and the Phone folders and the actual functions, that are probably going to evolve over time, are in the Shared Folder.

Windows will use commands to invoke flyouts of the housekeeping tasks, and the Phone will use a HubSection to do the same thing.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

August 4, 2014 at 5:35 pm

Universal Apps – Sort of?

leave a comment »

In WP8, I can set up a view and use a few SortDescriptions and I have view several my data in a sorted format. Not so with a universal app. The answer I received from the forums is that:

Universal apps are based on WinRT, not Silverlight. As you can see in the relevant APIs:

Windows.UI.XAML.Data.CollectionViewSource does not have a SortDescriptions property.

System.Windows.Data.CollectionViewSource does have a SortDescriptions property.

So, it appears UAs have taken a step back from phone apps.  Sorting, something that should be standard, does not exists.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

July 25, 2014 at 5:48 pm

Universal Apps – TextBox

leave a comment »

Though not specifically for Universal Apps, the TextBox control has been nicely enhanced. In the past, if we wanted a header, we had to add a TextBlock before the TextBox. This meant coordination was required every time the TextBox had to be repositioned. Now the TextBox control includes a Header parameter. If you are not entirely happy with how the Header appears, There is a HeaderTemplate.  Just include

<TextBox.HeaderTemplate><DataTemplate>Text=”Header”</DataTemplate></TextBox.HeaderTemplate>

within the TextBox control. Now you can format it to your hearts content and it will move with the TextBox if it is repositioned.

Another new feature is that you can include a watermark within the TextBox as a placeholder. So if the TextBox is empty, it displays some default  text.  This is handled by the PlaceholderText parameter.

Of course, those that know me know that I like making everything multilingual. These parameters do not disappoint, they also support multilingual text. Just add a x:Uid to the TextBox and include rows in the resource file referencing that Uid. So, if the Uid is Num1, your resource file should include Num1.Header and Num1.PlaceholderText. If you do add the HeaderTemplate, it can use an x:Uid within the TextBox or a different x:Uid within the HeaderTemplate.

No matter how many times I do it, I still need to double check the difference between TextBox and TextBlock.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

July 9, 2014 at 8:31 pm

Universal Apps – Starting from Windows Phone 7

leave a comment »

So, in other posts I have mentioned what is new as far as Multilingual support and Navigation is concerned. Now it is time to point out other differences.

For those lovers of Blend, it is now gone. Okay, it is still there, but it has lost its’ place on the Project menu. Now you have to right click a xaml file to invoke it. It is definitely a tool to be used.

Isolated Storage seems to have gone. You now use
var localSettings =Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values[“MyFirstVar”] = “Hello Windows”;

if(localSettings.Values.ContainsKey(“MyFirstVar”)
Object value = localSettings.Values[“MyFirstVar”];
or
var roamingSettings =Windows.Storage.ApplicationData.Current.RoamingSettings;
if(roamingSettings.Values.ContainsKey(“MyFirstVar”)
Object Value = roamingSettings.Values[“MyFirstVar”];

Signatures on routines have changed. EventArgs has been replaced by RoutedEventArg.

OrientationChanged has now gone. So has Split if you peeked at Windows 8 development. Use the SizeChanged keyword on the XAML page. Use Windows.Current.Bounds.Width to get the widths value. you can use
ApplicationViewOrientation winOrientation = ApplicationView.GetForCurrentView().Orientation;
if (winOrientation == ApplicationViewOrientation.Landscape)
{
// Landscape layouts
}
else if (winOrientation == ApplicationViewOrientation.Portrait)
{
// Portrait layouts
}

For keyhandling, replace System.Windows.Input.Key.D0 with Windows.System.VirtualKey.Number0.

 

So how do you do convert a WP7 app to a universal app? Since there is no update button, you will have to do it manually. Unlike WP7/WP8 development, app names have to be unique, so the first step is to reserve the name. The next step is to create a Universal App with that name. As Andy points out in , the UA templates do not fully support navigation, so delete MainPage.xaml and create a new one based on Basic Page.

Within the Windows and Phone folders, create a strings folder as mentioned in the article on the Multilingual toolkit. The first version of you app may be unilingual, but by setting the ground work, adding new languages should be relatively easy. The hard part will be creating all the blarney and screen shots for the marketplace. Luckily, the Multilingual Toolkit can help (It is designed to help handle translations and not all string translatons will be INSIDE the app.).

Within the Shared folder, create a new folder called Old and place the XAML, CS and image files of the WP7 or WP8 project in it. Along with any other data that is needed by the project. This will be your working folder and the items will be removed from the folder as you convert. You did remember to do a backup of the original project? ;-)

Within the Windows and the Phone folders, create new XAML with the names used in the original project. Copy the main part of the original XAML to the new XAML files, ignoring the declaration section. Within the Shared folder create a class for the C# code behind and name it with the same name as the code behind. Place the content of the code behind within it ignoring the Usings,  Anything with Phone in the name will have to be replaced, so the Usings can be recreated (or in some cases pointed to new locations).

 

This is a work in progress, so I will be updating this post in the future.

Enjoy.

John Marshall… Visio MVP       Visio.MVPs.org

Written by johnvisiomvp

June 22, 2014 at 3:35 pm

Follow

Get every new post delivered to your Inbox.

Join 389 other followers