Saturday, December 16, 2006

Som aftalt er her VB-koden til synkronisering af ribbon. Denne kode er til en PowerPoint add-in som indsætter en dato i det aktuelle slide. Se de tidligere indlæg for en nærmere forklaring på koden.

Først ThisAddIn.vb:

Public Class ThisAddIn

  
Public WithEvents ctp As
Microsoft.Office.Tools.CustomTaskPane
  
Private cal As
MonthCalendar
  
Private WithEvents btn As
Button

  
Private Sub ThisAddIn_Startup(ByVal sender As Object,
 
ByVal e As System.EventArgs) Handles Me
.Startup

    cal =
New
MonthCalendar()
    cal.Left = 10
    cal.Top = 10

    btn =
New
Button()
    btn.Text =
"Klik på mig"
    btn.Left = 10
    btn.Top = cal.Height + 20

    
Dim ctrl As UserControl = New
UserControl
    ctrl.Controls.Add(cal)
    ctrl.Controls.Add(btn)
    ctp =
Me.CustomTaskPanes.Add(ctrl, "min test"
)
    ctp.Visible =
False

  End
Sub

  Private Sub ThisAddIn_Shutdown(ByVal sender As Object,
 
ByVal e As System.EventArgs) Handles Me
.Shutdown
    
Me
.CustomTaskPanes.Remove(ctp)
  
End
Sub

  Private Sub btn_Click(ByVal sender As Object,
 
ByVal e As System.EventArgs) Handles
btn.Click
    
Dim textbox As
Microsoft.Office.Interop.PowerPoint.Shape = _
    Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange(1)
    Globals.ThisAddIn.Application.ActiveWindow.Selection.TextRange.Text _
    = cal.SelectionStart.ToLongDateString
  
End
Sub

  Private Sub ctp_VisibleChanged(ByVal sender As Object,
 
ByVal e As System.EventArgs) Handles
ctp.VisibleChanged
    ribbon.IsVisible =
Not
ribbon.IsVisible
  
End
Sub

End
Class

Så Ribbon.xml

<customUI xmlns="http://schemas.microsoft.com/
office/2006/01/customui
" onLoad="OnLoad">
  <
ribbon>
    <
tabs>
      <
tab idMso="TabAddIns">
        <
group id="MyGroup"
               label="My Group">
          <
toggleButton id="toggleButton1"
                        
size="large"
                        label="My Button"
                        screentip="My Button Screentip"
                        onAction="OnToggleButton1"
                        
imageMso="HappyFace"
                        
getPressed="getpressed" />
        </
group>
      </
tab>
    </
tabs>
  </
ribbon>
</
customUI>

Slutteligt den del af ribbon1.vb som er tilføjet/rettet:


  
Private _isVisible As Boolean
  Public Property IsVisible() As Boolean
    Get
      Return _isVisible
    
End Get
    Set(ByVal value As Boolean)
      _isVisible = value
      ribbon.InvalidateControl(
"toggleButton1")
    
End Set
  End Property

  Public Function getpressed(ByVal control As
 
 Office.IRibbonControl) As Boolean
    Return IsVisible
  
End Function

  Public Sub OnToggleButton1(ByVal control As Office.IRibbonControl,
  
ByVal isPressed As Boolean)
    Globals.ThisAddIn.ctp.Visible = isPressed
  
End Sub

posted on Saturday, December 16, 2006 5:46:44 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]

I tidligere indlæg har vi set på brugen af custom task pane og ribbon, men mangler at sørge for automatisk synkronisering af den oprettede ribbon knap således, at når brugeren lukker custon task pane-vinduet ved at klikke på krydset så er dette afspejlet af knappen. Gør som følger:

  • Tilret ribbon1.xml således, at der oprettes en call back metode kaldet getpressed. Denne metode kaldes af Office enten når der er behov for det eller vi konkret beder om det (ved at bruge Invalidate jf. senere)

<customUI xmlns="http://schemas.microsoft.com/office/
2006/01/customui
" onLoad="OnLoad">
  <
ribbon>
    <
tabs>
      <
tab idMso="TabAddIns">
        <
group id="MyGroup"
               label="My Group">
          <
toggleButton id="toggleButton1"
                        
size="large"
                        label="My Button"
                        screentip="My Button Screentip"
                        onAction="OnToggleButton1"
                        
imageMso="HappyFace"
                        
getPressed="getpressed" />
        </
group>
      </
tab>
    </
tabs>
  </
ribbon>
</
customUI>

  • Opret nu et felt med tilhørende egenskab i Ribbon1-klassen. Når feltet tildeles en værdi kaldes samtidigt invalidate som vil gennemtvinge et kald til den føromtalte getpressed

    private bool isVisible;

    
public bool IsVisible
    {
      
get { return isVisible; }
      
set {
        ribbon.InvalidateControl(
"toggleButton1");
        isVisible =
value; }
    }

  • Opret getpressed-metoden i Ribbon1-klassen og returner IsVisible

public bool getpressed(Office.IRibbonControl control)
{
  
return IsVisible;
}

  • Nu mangler vi blot at fange den hændelse som custom task pane-vinduet smider når det bliver lukket. Tilføj en eventhandler til ThisAddIn_StartUp i ThisAddIn-klassen

ctp.VisibleChanged += new EventHandler(ctp_VisibleChanged);

  • Og tilføj følgende metode der ændre værdien af isVisible (som igen sørger for at kalde InvalidateControl)

void ctp_VisibleChanged(object sender, EventArgs e)
{
  ribbon.IsVisible = !ribbon.IsVisible;
}

Nu vil ToggleButton-kontrollen blive synkroniseret når custom task pane-vinduet lukker.

Du kan læse mere om ribbon callback metoder her:

 

posted on Saturday, December 16, 2006 5:13:59 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Friday, December 15, 2006

Så blev SP1 frigivet til VS 2005 (pro og op - der er frigivet en separat SP til Express). Find den her og find readme om opdateringen her.

posted on Friday, December 15, 2006 8:41:32 PM (Romance Standard Time, UTC+01:00)  #    Comments [2]

Så lige at Ted Pattison har en artikel i MSDN Mag der giver en intro til generering af Word dokumenter med .NET 3. Har ikke selv læst den endnu, men vi snakkede en del om fremgangsmåden på Mød Microsoft. Måske er artiklen det du behøver for at komme igang? Se

http://msdn.microsoft.com/msdnmag/issues/06/11/BasicInstincts/

posted on Friday, December 15, 2006 9:27:11 AM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Thursday, December 14, 2006

I indlægget om "Simpel demo af Custom Task Pane" mangler der som nævnt at kunne åbne og lukke custom task pane-vinduet med en Ribbon-knap. Det er heldigvis en simpel opgave:

  • Tilføj Ribbon-support ved "Add new item"->"Ribbon support"
  • Sørg for, at partial definitationen af ThisAddIn-klassen udkommenteres (jf. kommentarerne i ribbon1.cs)
  • Sørg for at ctp-variablen i ThisAddIn.cs er defineres som public
  • Ret ctp.Visible = true til ctp.Visible = false i ThisAddIn_StartUp (ThisAddIn.cs)
  • Ret OnToggleButton1-metoden i ribbon1.cs i Ribbon callbacks-regionen til følgende

public void OnToggleButton1(Office.IRibbonControl control, bool isPressed)
{
  
Globals.ThisAddIn.ctp.Visible = isPressed;
}

  • Bemærk brugen af Globals der som nævnt under foredraget er en indgang til diverse objekter - herunder ThisAddIn
  • Tryk på F5 og find den nye knap i Add-Ins-tabben. Klik på knappen hvorefter vores custom task pane vil dukke op. Endnu et klik vi fjerne vinduet igen

exceladdin2.jpg

Det var jo nemt nok men opgaven er desværre ikke løst helt korrekt - prøv at lukke custom task pane-vinduet ved at klikke på det lille kryds i højre hjørne. Vinduet lukker korrekt men bemærk at vores togglebutton i Ribbon ikke synkroniseres og viser at vinduet er lukket. Det kræver en ekstra indsats som jeg vender retur til i næste indlæg.

posted on Thursday, December 14, 2006 10:38:19 AM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Tuesday, December 12, 2006

Jeg lovede på Mød Microsoft at publisere noget af demokoden. Vi starter lidt blidt med at vise meget simpel brug af Custom Task Pane i en Excel add-in.

Gør som følger:

  • Sørg for at have Office 2007, VS (pro eller højere) og VSTO 2005 SE installeret
  • Lav et C# 2007 Excel Add-in Projekt (skal nok skifte lidt mellem sprogene - næste gang bliver det i VB)
  • Definer tre variabler private for ThisAddIn-klassen (eksempelvis lige over ThisAddIn_Startup-metoden)


Microsoft.Office.Tools.CustomTaskPane ctp;
MonthCalendar cal;
Button btn;

  • Tilføj følgende kode til ThisAddIn_Startup

// Kalender
cal = new MonthCalendar();
cal.Left = 10;
cal.Top = 10;
// Knap
btn = new Button();
btn.Text =
"Klik på mig";
btn.Left = 10;
btn.Top = cal.Height + 20;
btn.Click +=
new EventHandler(btn_Click);
// Brugerkontrol med kalender og knap
UserControl ctrl = new UserControl();
ctrl.Controls.Add(cal);
ctrl.Controls.Add(btn);
// Tilføj kontrol til Custom Task Pane og vis den
ctp = this.CustomTaskPanes.Add(ctrl, "min test");
ctp.Visible =
true;

  • Tilføj følgende eventhandler

void btn_Click(object sender, EventArgs e)
{
  
this.Application.ActiveCell.Value2 =
      cal.SelectionStart.ToShortDateString();
}

  • Tilføj følgende til ThisAddIn_ShutDown

this.CustomTaskPanes.Remove(ctp);

  • Klik på F5

Nu vil add-in'en blive installeret og en kalender og en knap vil være tilgængelig i en custom task pane. Når der klikkes på knappen indsættes den i kalenderen valgte dato.

exceladdin1.jpg

Add-in'en er ikke særlig praktisk fordi der blandt andet oprettes en custom task pane i Addin_Startup, og den eneste måde brugeren kan styre om vinduet skal være tilgængeligt eller ej er ved at starte og stoppe add-in'en og det er naturligvis ikke så godt. Bedre var det hvis vinduet kunne styres af brugeren gennem en knap på ribbon - og det handler næste indlæg om.

I øvrigt: Hvis du gerne vil slette en installeret add-in så klik på Office-knappen og vælg Excel options. Herefter klikker du på Add-ins-fanen og vælger COM add-ins i Manage-listen (nederst) og klikker på Go... Nu kan den ønskede add-in fjernes.

Ovennævnte kode er i øvrigt fra en artikel til det Alt om DATA som kommer primo januar.

 

posted on Tuesday, December 12, 2006 11:15:48 AM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Saturday, December 09, 2006

Som nævnt under VSTO præsentationer på Mød Microsoft er der to VSTO bøger som jeg mener er interessante

Sidstnævnte er først tilgængelig i løbet af december.

Nu tyder det på at der er en ny (og mere bred) på vej som også ser interessant ud

Bogen handler både om VSTO (SE) og WSS/MOSS og ud fra indholdsfortegnelsen at dømme er den spændende. Det er en APress-bog og skulle komme i løbet af foråret.

posted on Saturday, December 09, 2006 3:14:40 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Friday, December 08, 2006

I går gik Microsoft Office Open XML igennem nåleøjet hos ECMA, og er nu en godkendt standard. Læs pressemeddelelsen her. Næste skridt er en ISO certificering.

Læs i øvrigt også hvad IBM syntes om certificeringen.

posted on Friday, December 08, 2006 1:56:58 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Thursday, December 07, 2006

I dag blev Mød Microsoft afholdt i København, og jeg talte endnu engang på to sessioner om VSTO-udvikling (samt en del andet). Syntes igen det gik fint - mange mennesker, god stemning, alle demoer kørte, og jeg vrøvlede ikke for meget (syntes jeg da selv).

Jeg vil som aftalt over de næste dage uploade noget af demokoden.

Husk, at slide og links kan findes her, og slides fra de andre præsentationer kan findes gennem Dorthes blog.

posted on Thursday, December 07, 2006 8:53:17 PM (Romance Standard Time, UTC+01:00)  #    Comments [2]
 Wednesday, December 06, 2006

http://us1.trymicrosoftoffice.com/

kan man finde forskellige Office 2007 applikationer i en 60 dags prøveversion - herunder Office 2007 Professional.

Jeg må dog indrømme at jeg ikke har hentet en prøveversion så jeg skal ikke sige om det spiller som forventet (umiddelbart kan jeg ikke finde info omkring muligheden for at downloade til europa). Hvis du prøver så smid lige en kommentar med dine erfaringer.

Til orientering så ligger den også på MSDN men det kræver det rigtige abonnement.

posted on Wednesday, December 06, 2006 9:05:14 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Tuesday, December 05, 2006

Jeg er retur i Odense fra den første Mød Microsoft om Office 2007-udvikling som blev afholdt i Århus i dag, og jeg syntes virkelig det har været en god dag. Der var både gode sessioner og mange mange mennesker.

Jeppe Rørbæk indledte og Pau Larsen lagde herefter ud med en introduktion til 2007 Microsoft Office System, og Rene Løhde fulgte efter med en kort session om Office Open XML. Herefter startede de to spor hvor Erik Westermann fra Teknologisk Institut og Henrik Sørensen fra Option delte server (WSS 3.0 og MOSS) og jeg tog mig af klientdelen. Der var nogenlunde lige mange personer på de to spor. Nikolaj Winnes lukkede og slukkede med en OBA-session (Office Business Application) for alle.

Hos mig på klient-sporet syntes jeg vi kom godt rundt om det hele – jeg kunne allerede efter første session dog se at jeg ville løbe ind i et problem med tiden – så jeg skar pause med 15 min. Men så passede det også fint. Alle demoerne kørte som forventet, og jeg tror at dispositionen var ok. Nu må vi se hvad evalueringerne siger (hvis du var med så husk endelig at lave en evaluering – det er den eneste måde vi bliver bedre på).

Jeg lovede at blogge et enkelt link – nemlig The Office 2007 UI Bible. Det er en god Ribbon-ressource som jeg havde glemt at tage med på mine slides (som du i øvrigt kan finde her).

Slutteligt lovede jeg at smide noget af demokoden op, og så snart vi har været i København (torsdag) "gør jeg noget".

Husk – hvis du endnu ikke er meldt til Mød Microsoft i København torsdag – så kan du nå det endnu.

posted on Tuesday, December 05, 2006 8:23:49 PM (Romance Standard Time, UTC+01:00)  #    Comments [1]
 Monday, December 04, 2006

I morgen går det løs med Mød Microsoft i Århus. Som før nævnt har jeg to sessioner omkring Office 2007 klient udvikling. Vi har denne gang valgt at samle links til slides med videre på Dorthes blog

http://blogs.msdn.com/msdneventsdk/default.aspx

Her burde dukke et indlæg op i løbet af kort tid med oplysninger om hvor på MSDN.dk slides kan findes. Indtil dette sker kan du finde slides i PDF her:

VSTO_moedms_dec2006_cronberg.pdf (2,37 MB)

Der findes en del links i mine slides, men jeg vil alligevel gentage dem i dette indlæg. Vender retur hvis der er spørgsmål eller kommentarer i Århus.

posted on Monday, December 04, 2006 3:48:44 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]

En hurtig besked - Alt om DATA nr 17 er på gade og jeg har til orientering et par artikler i. Vores serie om ASP.NET2 udvikling er nået til nr 4 og handler denne gang om Master pages. Sidste del kommer i næste nummer. Yderligere er der en artikel fra Tech-Ed Barcelona.

I øvrigt starter jeg 2007 en ny serie - denne gang om udvikling på Office-2007-platformen. Der kommer til at være fem artikler omkring udvikling til både klient og server. Vender lige retur når jeg har fastlagt dispositionen. Giv mig endelig et prej hvis der er nogen specielle ønsker.

Jeg har åbnet mulighed for at skrive kommentarer til indlæg igen, men sidste gang blev jeg oversvømmet med spam. Vi må se hvordan det går nu.

posted on Monday, December 04, 2006 1:07:58 PM (Romance Standard Time, UTC+01:00)  #    Comments [1]
 Sunday, December 03, 2006

Hvis man har arbejdet som udvikler på et SharePoint-projekt inden Office 2007 kender man uden tvivl til SmartPart der giver mulighed for at benytte brugerkontroller i SharePoint 2.0 webparts. Tingene er jo noget nemmere i WSS 3.0 og MOSS regi fsva udvikling af webparts, men der er fra Microsoft fortsat ikke frigivet en komponent til at wrappe en ASP.NET 2.0 brugerkontrol til en kompileret webpart (den skulle dog være på vej efter hvad jeg har hørt).

Heldigvis har U2U som står bag SmartPart frigivet en ny version til Office 2007 så vi igen nemt kan benytte brugerkontroller som webparts i WSS/MOSS.

Se mere her hvor der også er link til en screencast.

posted on Sunday, December 03, 2006 9:12:51 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Thursday, November 30, 2006

Så er det i næste uge det går løs i både Århus (tirsdag) og København (torsdag). Der er allerede mange tilmeldte - men der er fortsat plads har jeg hørt. Hvis du ikke allerede er tilmeldt så kan du altså nå det endnu.

http://www.microsoft.com/danmark/msdn/events/moed_microsoft.mspx

Hele dagen kommer til at handle om udvikling til den nye Office 2007-platform - såvel klient som server - og hvis du ikke kender til Office som en udviklingsplatform så bør du sætte tiden af til at komme og høre hvad man kan med såvel Visual Studio Tools for Office (VSTO) som SharePoint.

Det er mig der står for klientsporet så kom endelig forbi og hils på når du dukker op.

posted on Thursday, November 30, 2006 2:30:59 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]
 Tuesday, November 28, 2006

Følgende servere ligger nu til download på MSDN (med det rette abonnement):

  • Office Forms Server 2007
  • Office Groove Server 2007
  • Office Project Server 2007
  • Office Sharepoint Server 2007

Se MSDN Subscriber Downloads

posted on Tuesday, November 28, 2006 9:15:46 AM (Romance Standard Time, UTC+01:00)  #    Comments [1]
 Sunday, November 26, 2006

Så er der hjælp for dem som kan have svært ved at finde de konkrete forskelle mellem de mange servere i Office 2007 og 2003. Der er lavet et meget udførligt regneark som viser forskellene på

  • Windows SharePoint Services 3.0
  • SharePoint Portal Server 2003
  • Office SharePoint Server 2007 for Search
  • Office Forms Server 2007
  • Office SharePoint Server 2007 Standard CAL
  • Office SharePoint Server 2007 Enterprise CAL or for Internet Site

Der bliver kigget på features som samarbejde, portal, søgning, CMS, formularer, 6. Business Intelligence, administration og platform.

Regnearket givet et ret godt overblik.

Se indlæg fra Roberto D'Angelo "Microsoft Office SharePoint Server 2007 products comparison matrix"

posted on Sunday, November 26, 2006 8:44:56 PM (Romance Standard Time, UTC+01:00)  #    Comments [0]

Når du trænger til et MEGET anderledes brugerinterface til en søgemaskine - så prøv

http://www.msdewey.com/

Ikke særlig brugbar i det lange løb - men den er godt lavet :)

msdewey.jpg

posted on Sunday, November 26, 2006 10:40:57 AM (Romance Standard Time, UTC+01:00)  #    Comments [0]