Søg på DotNyt:
Denne blog er flyttet til www.nielsbrinch.com


torsdag den 28. juni 2007

OneOnOne -- Animering af elementer

skrevet af Niels Brinch

Det er relativt nemt at animere et element i Silverlight direkte i XML. Jeg vil gerne gøre det så mine spillere i OneOnOne bevæger sig jævnt i stedet for at bevæge sig i ryk. Da bevægelsen er afhængig spillets forløb, skal animationen defineres i min C#-kode og ikke i XML.

Alligevel starter jeg med at definere en grundanimation i XML som jeg så kan redigere løbende. Herunder er defineret animationer for at justere på player1's x- og y-koordinater. Navnet DoubleAnimation kommer af den værdi som skal justeres er af typen double.

  <Canvas.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard x:Name="player1Timer">
<DoubleAnimation x:Name="player1AnimationX"
Storyboard.TargetName="player1"
Storyboard.TargetProperty="(Canvas.Left)"
/>
<DoubleAnimation x:Name="player1AnimationY"
Storyboard.TargetName="player1"
Storyboard.TargetProperty="(Canvas.Top)"
/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Canvas.Triggers>

DoubleAnimation er angivet Storyboard.TargetName som er henvisning til det element som denne animation skal virke på. Desuden er angivet Storyboard.TargetProperty som er den property på elementet som animationen løbende skal påvirke. Der er paranteser om property'ens navn, fordi den er sammensat (med punktum).


Jeg tilføjer også lignende animationer for spiller 2 og for bolden. I min metode som modtager instruktioner fra serveren om hvor hver spiller skal flyttes hen, vil jeg gerne redigere og starte animationen, i stedet for at flytte spilleren i ét ryk.


// Animation for player 1
player1Timer.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 100));

player1AnimationX.RepeatBehavior = new RepeatBehavior(1);
player1AnimationX.AutoReverse = false;
player1AnimationX.From = (double)player1.GetValue(Canvas.LeftProperty);
player1AnimationX.To = gameState.Player1.XPosition;

player1AnimationY.RepeatBehavior = new RepeatBehavior(1);
player1AnimationY.AutoReverse = false;
player1AnimationY.From = (double)player1.GetValue(Canvas.TopProperty);
player1AnimationY.To = gameState.Player1.YPosition;

Duration angiver varigheden af animationen. Mit spil er i kontakt med serveren hvert 100 millisekunder, hvilket gør det passende at lade animationen vare i 100 millisekunder.


RepeatBehavior kan f.eks. bruges til at angive at animationen skal gentages uendeligt eller et bestemt antal gange. I dette tilfælde vil jeg allernådigst bede om at spilleren kun flyttes én gang.


AutoReverse kan bruges til at inkludere "den modsatte" animation. I dette tilfælde ville det betyde at spilleren løber tilbage på sin plads igen. Det er ikke relevant.


From og To angiver de double-værdier som der skal ændres fra og til i løbet af animationen.


Til sidst starter jeg animationerne og så fungerer det:


player1Timer.Begin();
player2Timer.Begin();
ballTimer.Begin();

Og må jeg lige tilføje: Det øger spilbarheden i helt ufattelig grad at det er animeret.

0 kommentarer

tirsdag den 26. juni 2007

OneOnOne -- Implementering

skrevet af Niels Brinch

Dette indlæg er del af OneOnOne - Et simpelt multiplayer-spil i Silverlight.

For at Silverlight-applikationen kan køre har jeg lagt OneOnOneServer op på www.gyxi.com/OneOnOneServer. Det er en almindelig webservice-applikation, så det vil jeg ikke uddybe hvordan jeg har gjort.

Jeg har lagt Silverlight-applikationen op på www.gyxi.com/OneOnOneClient. Det gælder følgende elementer:

- ClientBin og indholdet.image
- Resources-mappen som indeholder filer til GOA WinForms.
- Page.xaml
- Silverlight.js
- TestPage.html.js
- TestPage.html

Desuden skal der tilføjes nogle MIME types til serverens IIS. Hvis det er IIS 6 kan du højreklikke på Local computer i din IIS og vælge Properties. Her er der mulighed for at tilgå de registrerede MIME types. Tilføj:

.xaml = application/xaml+xml
.dll = application/x-msdownload

Herefter kan du bare besøge din TestPage.html og så virker din Silverlight-applikation. Senest opdaterede udgave af OneOnOne ligger her: www.gyxi.com/OneOnOneClient/TestPage.html men kræver du har en ven som vil være med (eller åbner to browservinduer).

4 kommentarer

søndag den 24. juni 2007

OneOnOne -- Formularelementer

skrevet af Niels Brinch

Dette indlæg er del af OneOnOne - Et simpelt multiplayer-spil i Silverlight.

Der er ikke inkluderet nogen mulighed for at indsætte formular-elementer i Silverlight. Jeg vil gerne have at folk indtaster deres eget navn inden de får lov at spille, så man ved hvem man spiller imod. Til det har jeg fundet GOA WinForms som er ret nemt at gå til.

Efter du har installeret GOA WinForms er det allernemmest at skabe et nyt projekt og vælge GOA WinForms som skabelon:

image

Men hvis du vil tilføje mulighed for formularer i en eksisterende Silverlight-applikation, kan du gøre sådan:

1. Der hvor du har installeret GOA finder du to filer.

image

2. I dit Silverlight-projekt skal du tilføje en reference til dll-filen.

3. Og tilføj en mappe navngivet "Resources" hvor du kopierer zip-filen ind.

image

4. Indsæt en formular-sektion i Page.xaml og en NameSpace-attribut på dit Canvas.

<Canvas x:Name="parentCanvas"
Name="parentCanvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="OneOnOneClient.Page;assembly=ClientBin/OneOnOneClient.dll"
Width="400"
Height="600"
Background="Green"
xmlns:goa="clr-namespace:NETiKA.Silverlight;assembly=ClientBin/Goa.Windows.Forms.dll"
>
<goa:WinFormHost Width="300"
Height="100"
Canvas.Left="50"
Canvas.Top="250"
FormClass="OneOnOneClient.PlayerNameForm"
/>
</Canvas>

5. Bemærk den attribut der hedder "FormClass". Den skal pege på den klasse som indeholder selve formularen. Der kan du f.eks. copy-paste fra denne fil og tilpasse namespaces, klassenavn og selvfølgelig hvilke formular-elementer du vil benytte.


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace OneOnOneClient
{
public class PlayerNameForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnOk;

private System.ComponentModel.Container components = null;

public PlayerNameForm()
{
InitializeComponent();

//
// TODO: Add constructor logic here
//
}

protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}

private void InitializeComponent()
{
this.btnOk = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnOk
//
this.btnOk.Location = new System.Drawing.Point(50, 50);
this.btnOk.Text = "OK";

//
// Form1
//
this.Controls.Add(this.btnOk);
this.Text = "Form1";
this.ResumeLayout(false);
}

public static void Main()
{
//
// TODO: Add application logic here
//
Application.Run(new PlayerNameForm());
}
}
}

Du kan nu indsætte formular-elementer fuldstændig som i en Windows-applikation. Uden at have prøvet det, vil jeg tro man kan designe sit vindue med designeren, direkte i en Windows-applikation og så bare copy-paste derfra.

0 kommentarer

lørdag den 23. juni 2007

Astoria - ny artikel om Microsofts nyeste barn

skrevet af Christian H. Nielsen

Så fik jeg igen tid til at få skrevet en artikel og denne gang har jeg kastet mig over "Astoria" - som er et projekt Microsoft arbejder på som skal gøre data tilgængelig på en generisk måde til brug i klient applikationer.

http://dotnetnerd.dk/articles/astoria.aspx

0 kommentarer

fredag den 22. juni 2007

OneOnOne -- Reager på tastetryk

skrevet af Niels Brinch

Dette indlæg er del af OneOnOne - Et simpelt multiplayer-spil i Silverlight.

Jeg fik flyttet en spiller, men det var ved hjælp af en hardkodet linje kode. Det skulle gerne være spilleren selv der bestemmer hvor vedkommende skal flyttes hen. Jeg vil lade piletasterne styre spillerens retning. Tilstået, ikke nogen særligt original idé, men det føles bare rigtigt at gøre det sådan.

Jeg ved ikke hvordan, men jeg går ud fra jeg skal sætte en "KeyDown"-event på mit ParentCanvas.

public void Page_Loaded(object o, EventArgs e)
{
parentCanvas.KeyDown += new KeyboardEventHandler(parentCanvas_KeyDown);
}

void parentCanvas_KeyDown(object sender, KeyboardEventArgs e)
{
double y = (double)player1.GetValue(Canvas.TopProperty);
player1.SetValue(Canvas.TopProperty, y-10);
}

imageOvenstående burde få spilleren til at løbe lidt op (y-10) uanset hvilken tast der trykkes på. Halløjsa ... det virker! Efter 20 tryk på en tast, er min spiller nået helt op til bolden. Fremragende. Spillet begynder at tage form. Det var næsten sjovt!


Hvis du ser nærmere på billedet kan du se der er et lille 2-tal på skærmen. Det er en lille TextBlock jeg har sat ind på skærmen, til at vise forskellige systemoplysninger til debugging. Man får tilsyneladende ikke noget at vide om, hvis der sker en Exception, heller ikke selvom man kører i Debug-tilstand (F5).


Piletasterne
Silverlight fanger tilsyneladende ikke piletasterne ved KeyDown. Microsoft har tidligere afvist problemet, men jeg har beskrevet til dem hvordan fejlen kan genskabes. Anyway - jeg anvender UHJK i stedet for piletasterne, for KeyDown er bedst synes jeg.


Her er et eksempel som viser at Silverlight IKKE understøtter en fuld udgave af .NET. Der er nemlig en enum som man kan bruge til let at identificere hver tast i frameworket, men den ligger i et namespace man ikke har adgang til gennem Silverlight. I stedet er jeg nødt til at lave min egen lille enum med de taster jeg har brug for:


private enum Keys
{
u = 50,
j = 39,
h = 37,
k = 40
}

Så skal der kodes lidt:


void parentCanvas_KeyDown(object sender, KeyboardEventArgs e)
{
try
{
double y = (double)player1.GetValue(Canvas.TopProperty);
double x = (double)player1.GetValue(Canvas.LeftProperty);

switch (e.Key)
{
case (int)Keys.u:
y -= 10;
break;
case (int)Keys.j:
y += 10;
break;
case (int)Keys.h:
x -= 10;
break;
case (int)Keys.k:
x += 10;
break;
}

player1.SetValue(Canvas.TopProperty, y);
player1.SetValue(Canvas.LeftProperty, x);
}
catch (Exception exc)
{
debug.Text = exc.Message;
}
}

Nøj det var nemt.


Og det virker endda. Prøv selv her!

0 kommentarer

Silverlight: Access Denied på TestPage.html.js

skrevet af Niels Brinch

Jeg fik en JavaScript-fejl hver gang jeg prøvede at vise min Silverlight-applikation på min computer. Den kunne tilsyneladende ikke komme i kontakt med den fil i mit Silverlight-projekt som hedder TestPage.html.js.

Min mistanke faldt på mit antivirus-program, AVG Free Edition. Den tror selvfølgelig TestPage.html.js er et forsøg på at få en javascript-fil til at ligne en html-fil. MEGET farligt! :P

Efter en hurtig Google-søgning viste det sig at være rigtigt. Gad vide om Microsoft ikke vælger at benytte TestPage.js som default navn i stedet for, i den endelige version af Silverlight/Orcas.

Løsning

Afinstaller dit antivirus-program og genstart computeren.

0 kommentarer

tirsdag den 12. juni 2007

Få Windows XP IIS 5 til at anvende .NET 2.0

skrevet af Niels Brinch

Da jeg forsøgte at få min web application, OneOnOneServer, til at fungere uden CTRL+F5 i Visual Studio, opdagede jeg min Windows XP IIS stadig var indstillet til at køre .NET 1.1. Der var tilsyneladende ingen mulighed for at ændre det. Er du i samme situation, så har jeg lavet en lille vejledning til at løse problemet her:

1. Brug run -> cmd til at vise kommando-prompten.

image

2. Besøg din .NET 2.0-mappe og skriv aspnet_regiis -i

image

Herefter burde dine sites køre med .NET 2.0, hvilket det også skal når du anvender .NET 3.0 eller .NET 3.5.

1 kommentarer

OneOnOne -- Kommuniker med server

skrevet af Niels Brinch

Dette indlæg er del af OneOnOne - Et simpelt multiplayer-spil i Silverlight. For at kunne gøre spillet til et multiplayer-spil skal hver spillers Silverlight-applikation kunne kommunikere med hinanden, hvilket skal ske via en fælles server.

Det er let.

Virkelig let.

1. Højreklik på dit Silverlight-projekt.

2. Vælg "Add Web Reference"

3. Indtast url'en til din webservice. I mit tilfælde er den http://localhost/OneOnOneServer/Service.asmx

4. Navngiv din reference - kald den f.eks. OneOnOneServer.

Færdig!

Du kan nu kalde din server fra din Silverlight-applikation, f.eks. sådan:

new OneOnOneServer.Service().IsGameReady(gameId);


Muligt problem 1: Da jeg forsøgte at få min web application, OneOnOneServer, til at fungere uden CTRL+F5 i Visual Studio, opdagede jeg min Windows XP IIS stadig var indstillet til at køre .NET 1.1. Der var tilsyneladende ingen mulighed for at ændre det. Er du i samme situation, så har jeg lavet en lille vejledning til at løse problemet her


Muligt problem 2, hvis du får "Error invoking service": [System.Web.Script.Services.ScriptService] skal stå lige over klassedefinitionen i din web service. Du skal tilføje en reference til System.Web.Extensions før det fungerer.


Muligt problem 3: Man kan ikke kalde webservices på tværs af domæner. Hvis du vil være sikker på du ikke gør det, kan du angive en relativ url til webservicen et sted i koden, f.eks. service.Url = "../OneOnOneServer/Service.asmx".

0 kommentarer

mandag den 11. juni 2007

OneOnOne -- Tegning

skrevet af Niels Brinch

Dette indlæg er del af OneOnOne - et simpelt multiplayer-spil i Silverlight og handler om at tegne i sin Page.xaml.

Et Silverlight-projekt starter med at indeholde en Page.xaml hvor der er defineret et Canvas. Vi skal prøve at tegne en fodboldbane med en bold og en spiller i hver ende.

I mit Canvas indsætter jeg et Rectangle til hvert mål, et Rectangle til hver spiller og en Ellipsis til at være bolden. Målene gøres hvide, den ene spiller gøres brun og den anden mørkeblå. Bolden gøres lysegrå.

<Canvas x:Name="parentCanvas"
Name="parentCanvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="OneOnOneClient.Page;assembly=ClientBin/OneOnOneClient.dll"
Width="400"
Height="600"
Background="Green"
>
<Rectangle Canvas.Left="125" Canvas.Top="575" Height="25" Width="150" Fill="#FFFFFF" Name="goal1" x:Name="goal1"></Rectangle>
<Rectangle Canvas.Left="125" Canvas.Top="0" Height="25" Width="150" Fill="#FFFFFF" Name="goal2" x:Name="goal2"></Rectangle>
<Rectangle Canvas.Left="185" Canvas.Top="520" Height="30" Width="30" Fill="Maroon" Name="player1" x:Name="player1"></Rectangle>
<Rectangle Canvas.Left="185" Canvas.Top="55" Height="30" Width="30" Fill="Navy" Name="player2" x:Name="player2"></Rectangle>
<Ellipse Canvas.Left="190" Canvas.Top="290" Height="20" Width="20" Fill="#EEEEEE" Name="ball" x:Name="ball"></Ellipse>
</Canvas>

Dette er en kort forklaring af de attributter som er anvendt på hvert element:

Canvas.Leftimage
Antal pixels fra venstre side af lærredet som elementet befinder sig på.

Canvas.Top
Antal pixels fra toppen af lærredet som elementet befinder sig på.

Height
Angivelse af hvor højt elementet skal være i pixels.

Width
Angivelse af hvor bredt elementet skal være i pixels.

Fill
Hvad der skal fyldes i elementet. Her kan skrives HTML-farver.

x:Name
Dette er navnet som du kan bruge til at finde elementet med i din CodeBehind. Tag ikke fejl af denne attribut og den attribut som hedder Name.

Jeg håber dette giver et lille overblik over hvordan man tegner i Silverlight. Hvis man skal tegne mere, skal man overveje at anvende Expression Blend.

2 kommentarer

søndag den 10. juni 2007

OneOnOne - Et simpelt multiplayer-spil i Silverlight

skrevet af Niels Brinch

For at komme lidt rundt i hjørnerne af Silverlight har jeg besluttet jeg vil lave et lille simpelt multi-player-spil. Eller i hvert fald starte på det.

Det skal være et lille spil hvor man har hver sin lille mand og en bold som det gælder om at sparke ind i modstanderens mål.

Selve spillet skal selvfølgelig ske i en simpel Silverlight-klient som reagerer på spillerens tastetryk. Spillerne sidder ved hver sin computer og deres fælles spil skal styres via en webservice som kaldes igen og igen af hver spillers Silverlight-klient.

Ja, I har ret, det kommer ikke til at fungere særligt godt med en webservice. Der bør helst være en fast socket-forbindelse til den type spil. Men nu bliver det altså sådan. Det er som sagt bare for at få prøvet lidt forskelligt med Silverlight. Og for Silverlight tror jeg webservices kommer til at spille en altafgørende rolle.

Jeg starter med at oprette et Silverlight-projekt som hedder OneOnOneClient og en web application der hedder OneOnOneServer.

OneOnOneServer
Server-delen skal have en Web Service som OneOnOneClient kan kalde. Denne WebService skal i første omgang indeholde en metode som modtager et spillernavn og returnerer et "GameID". Når to spillere har det samme GameID kan spillet mellem de to personer gå igang.

Når spillet kører skal en metode kaldes igen og igen som modtager hvad spilleren har gjort (f.eks. trykket på venstre piletast) og returnerer hvor de to spillere og bolden nu befinder sig. Inklusive eventuelle ændringer som er forårsaget af hvad den anden spiller har foretaget sig.

De tre metoder på serveren ser sådan ud:

public string PleaseCreateGame(string playerName)
En spiller melder sig til at ville spille og modtager en streng som er en guid der enten identificerer et kommende spil eller et allerede oprettet spil, alt efter om en modstander allerede venter.

public bool IsGameReady(string gameId)
Herefter spørger klienten igen og igen om spillet er klar. Det er klar når der er to spillere. Hvis den aktuelle spiller er spiller nummer 2, vil dette metodekald svare 'true' med det samme.

public GameState Play(string gameId, short user, string action)
Når spillet er i gang kaldes denne metode igen og igen med spillets id, spilleren som har foretaget handlingen (1 eller 2) samt hvilken handling der er blevet foretaget. Metoden returnerer et "GameState"-objekt som hører til spillet og fortæller hvor bolden og de to spillere befinder sig lige nu.

OneOnOneClient
Dette er Silverlight-applikationen. Den viser en grøn firkant (banen), to spillere (firkanter) og en bold (en cirkel). Derudover viser den en mulighed for at indtaste sit navn og vente på at spillet kan gå i gang - hvilket kan ske når der melder sig en modspiller.

Bag scenen kaldes førnævnte webservice-metoder en hel masse gange. Det forsøges at samle al spil-logikken inde bag "Play"-metoden så Silverlight-applikationen kan holdes relativt uvidende om spillet.

1. Tegn
Det første jeg skal gøre er, at tegne de elementer jeg skal bruge, ved at redigere min Page.xaml.

Læs her hvordan

2. Flyt en spiller
Inden jeg begynder at sætte events på alting, skal jeg lige have styr på at flytte spillerne på skærmen. Det skal selvfølgelig ske på baggrund af tastetryk, men lige nu vil jeg bare flytte spiller 1 lidt frem.

Her er det lige lidt tricky.

Jeg kan let finde player1-objektet i min CodeBehind, men der er ikke umiddelbart nogen mulighed for at sætte X- og Y-koordinater på det. Efter en længere undersøgelse har jeg fundet ud af, man skal anvende en generisk "SetValue"-metode på objektet:

player1.SetValue(Canvas.LeftProperty, 10);

Med ovenstående flyttes player1 til 10 pixels fra venstre side.

3. Kommunikér med server

For at kunne gøre spillet til et multiplayer-spil skal hver spillers Silverlight-applikation kunne kommunikere med hinanden, hvilket skal ske via en fælles server.

Læs her hvordan

4. Reagér på brugerinput

Før det kan kaldes et spil, skal spillerne have mulighed for at vælge hvordan de skal bevæge sig. Dette gøres ved hjælp af tastaturet.

Læs her hvordan

5. Indtast oplysninger

Det skal være muligt at se hvem man spiller mod, derfor afkræves man at indtaste sit navn, før spiller kan starte. Dette gøres ved hjælp af en tredjeparts-komponent.

Læs her hvordan

6. Implementering

Det er fint spillet fungerer i mit lokale udviklingsmiljø, men det bør også kunne fungere på en offentligt tilgængelig server. Særligt når det er et online multiplayer-spil.

Læs her hvordan

 

Prøv det "færdige" spil her

0 kommentarer

søndag den 3. juni 2007

Silverlight-overblik

skrevet af Niels Brinch

Jeg har et stykke tid været klar over at Silverlight er noget ganske særligt. Jeg har læst det er et flash-lignende resultat, som kan samarbejde med min .NET-kode. Det lyder godt, men har ikke haft et gyldent overblik over hvad det egentligt består af og hvordan det virker.

Overblikket har jeg nu, og jeg vil dele det med jer. Silverlight består af tre dele.

1. En xaml-fil som definerer udséendet.
2. En CodeBehind-fil som giver fuld programmatisk adgang.
3. En Designer som tillader grafiske virtuoser at undgå at lære xml.

XAML
Det starter med en xml-fil (med endelsen .xaml) som indeholder xml der repræsenterer et canvas, det vil sige det lærred som vi kan tegne på. Deri kan der indsættes elementer, f.eks. teksten "Hello World" som jeg har gjort herunder:

image

Man kan sidestille xaml med aspx. Resultatet fra en aspx er html, hvor resultatet fra en xaml er noget der minder om flash.

CodeBehind
Ovenstående xml-fil har en codebehind-fil. Åbn den for xaml som du ville hvis det var en aspx-fil.

image

Og ja, der gemmer sig en vaskeægte C#-fil inde bagved, som selvfølgelig lige så vel kunne være en VB-fil. Derinde kan man tilgå elementerne på lærredet, f.eks. ovenstående TextBlock og sætte dens text, gøre den usynlig m.m.

image

Det er altså den ultimative programmatiske tilgang til xaml-filen. Selvfølgelig virker intellisense og alt det andet. En programmør vil føle sig hjemme nu.

Designer
Man kunne tro der var en Design-visning direkte i Visual Studio, ligesom der er til aspx. Men det er der ikke. I stedet skal man åbne xaml-filen i en ekstern editor, som Microsoft kalder Expression Blend.

image

Her skal man så lære noget nyt. Expression Blend er en omfattende applikation hvor man vistnok kan uhyggeligt mange ting. Her føler en flash-designer sig måske relativt hjemme. Jeg gør ikke.

image

0 kommentarer

lørdag den 2. juni 2007

Billeder i Windows Live Writer

skrevet af Niels Brinch

Jeg vil følge op på det fantastiske blog-skrivningsprogram som Christian (SuperZapper) netop har fortalt om. Især savner jeg en nem måde at indsætte billeder i min blog på. Det er besværligt gennem Blogger's interface, hvilket er årsagen til jeg aldrig inkluderer billeder i et indlæg. Men det er legende let med Windows Live Writer.

Så let sættes det op til f.eks. Blogger:

1. Hent programmet fra http://writer.live.com/ (ligesom Christian fortalte)

2. Under installationen indtaster du url'en til din blog og dine adgangsoplysninger til blogging-software'n. Programmet finder selv ud af at det f.eks. er Blogger der er anvendt på dotnyt.dk.

image

3. Windows Live Writer fortæller at Blogger ikke umiddelbart kan bruges til at lægge billeder og giver mig i stedet muligheden for at definere en ftp hvor billederne skal ligge.

image

4. Færdig - jeg skriver nu dette blog-indlæg og copy-paster faktisk bare billeder direkte ind i editoren. Jeg bruger Gadwin Printscreen til at lave screenshots lynhurtigt som lægges i udklipsholderen.

Her til sidst et screenshot som viser hvordan det ser ud mens jeg skriver netop dette indlæg:

image

1 kommentarer


 
Til forsiden

Niels Brinch

- Seneste indlæg