dinsdag 13 januari 2009

Delphi Prism & Compact Framework

Met Delphi Prism kan ook voor het .Net Compact Framework gecompileerd worden.
Hiermee kan eenvoudig .Net applicaties voor mobile apparaten gemaakt worden.
Hoewel het Compact Framework beperkter is, kan met de nieuwste 3.5 versie ook bijv. LINQ
gebruikt worden.


Een nadeel echter is dat de Form designer door Microsoft hard-coded voor C# en VB gemaakt is.
(hopelijk dat dit in de 2010 versie van Visual Studio verholpen is). Hier is wel eenvoudig omheen
te werken: de normale WinForms designer kan namelijk ook gebruikt worden, met de hand moet
eenmalig de niet ondersteunde properties verwijderd worden.

Als eerste moet het .Net Compact Framework 3.5 geïnstalleerd worden:
http://msdn.microsoft.com/en-us/netframework/aa497280.aspx

Vervolgens kan in Delphi Prism een Windows Forms project gemaakt worden:

Project properties

Open na het maken van het project de properties van het project:

Hierin moet het "Framework folder" verwijzen naar het Compact Framework:
C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE


Voor het gemak veranderen we gelijk het "Output path" naar een gedeelde directory, zodat we later eenvoudig in de Mobile Emulator het programma kunnen testen.

Om te voorkomen dat we tijdens het runnen een ResourceNotFound exception krijgen, verwijderen we het icoon:

References

Nu zal het project nog niet compileren: omdat voor het Compact Framework gecompileerd wordt, moeten de references aangepast worden. Selecteer alle references, rechtermuis klik, en dan "Properties":

Verander vervolgens de "Ignore version" van "False" naar "True":

Test scherm

We gaan nu een test scherm maken. Omdat de resolutie van ons mobiel apparaat niet zo groot is, stellen we ons form hierop in: 240x400

We plaatsen nu een aantal controls op het form, bijvoorbeeld:

Om de test compleet te maken, dubbel klikken we op de "Add to list" knop en voegen we de volgende regel code toe:

Main.pas

...

method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);

begin

listBox1.Items.Add( textBox1.Text );

end;

Compileren

Nu zal het project nog steeds niet willen compileren, maar we zijn er bijna. Eerst moeten de regels code waar de compiler over struikelt uitgeschakeld worden, omdat het Compact Framework deze niet ondersteunt. Bijvoorbeeld: STAThread, Application.EnableVisualStyles, ThreadException, etc:

Program.pas

//[STAThread]

class method Program.Main;

begin

//Application.EnableVisualStyles();

//Application.SetCompatibleTextRenderingDefault(false);

//Application.ThreadException += OnThreadException;

using lMainForm := new MainForm do

Application.Run(lMainForm);

end;

In de Form designer bijvoorbeeld FormattingEnabled, AutoSize, etc:

Main.Designer.pas

...
//self.comboBox1.FormattingEnabled := true;//self.checkBox1.AutoSize := true;

//self.checkBox1.UseVisualStyleBackColor := true;

//self.listBox1.FormattingEnabled := true;

...

//self.PerformLayout();

We verwijderen nog een aantal regels, totdat alles compileert. Vervolgens kunnen we ons programma testen:

Op deze manier kun je eenvoudig en snel testen en debuggen: je hebt hiervoor geen mobiel apparaat of emulator nodig!

Mobile Emulator

Nu is het tijd om ons programma op een mobiel apparaat te testen. Het makkelijkste is om hiervoor een emulator te gebruiken. Installeer hiervoor de nieuwste emulator images:
Windows Mobile 6.1.4 Emulator Images

Vervolgens starten we de 240x400 image op:

Om ons programma te kunnen testen moeten we onze gedeelde directory instellen, via Configure:

En dan de "Shared Folder" in de "General" tab:

We kunnen nu deze map openen in de "File Explorer" door de "Storage Card" te selecteren:

Voordat we ons test programma kunnen testen, moet eerst het Compact Framework nog in de emulator geïnstalleerd worden. Hiervoor heb ik het bestand "NETCFv35.wm.armv4i.cab" in de gedeelde map gekopieerd. Dit bestand staat normaal gesproken in installatie map van het Compact Framework:
c:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\NETCFv35.wm.armv4i.cab

Nadat het Compact Framework geïnstalleerd is, kunnen we ons test programma starten:

Tip: Sluiten ipv minimize

Standaard worden mobiele programma's niet afgesloten (door te klikken op het X rechtsbovenin), maar geminimaliseerd: als de gebruiker het programma weer opstart, verschijnt het programma direct omdat het nog in het geheugen staat. Dit voorkomt dat de gebruiker elke keer een poos moet wachten totdat het programma weer gestart is.
Voor debuggen is dit natuurlijk lastig: je moet elke keer je programma "killen" via de "Task Manager". Verander hiervoor de propertie "MinimizeBox" van het form, en zet deze op "False", nu verschijnt een "Ok" knop in plaats van een "X" knop op het scherm, en wordt het programma afgesloten in plaats van geminimaliseerd!

Geen opmerkingen: