Rösta på artikeln
Att skriva program i Delphi
Delphi är ett av de verktyg som erbjuder en visuell programutvecklingssmiljö
under Windows. Det finns ett flertal som erbjuder något liknande, t ex Visual Basic,
Powerbuilder, Visual C++, Borland C++ Builder, Borland JBuilder, Visual Café m fl.
Delphi har en stor fördel (jämfört med de två förstnämnda i alla fall) att språket
är helt objektorienterat, vilket innebär att programmen exekverar något snabbare.
De allra flesta programmiljöer strävar åt att utveckla program objektorienterat eftersom
det är en modernare och i förlängningen också enklare metod. Visual Basic har emellertid
med sin nya .Net-plattform gått över till att bli en helt och hållet objektorienterad
utvecklingsmiljö.
Att skriva program rent allmänt består av två faser. Först analyser
man vad programmet skall vara en lösning till, därefter realiseras lösningen i form
av ett program. Den första delen, programanalysen, är gemensam för vanlig konventionell
DOS-programmering (eller C och Assembler, om du så vill) och programmering med ett
visuellt verktyg. Hur lösningen ser ut rent praktiskt, implementeringen, skiljer sig
däremot väldig mycket åt i de båda fallen.
Med ett Delphiprogram har användaren hela tiden möjlighet att
välja vad som skall utföras härnäst. Varje program är uppdelat i ett flertal programdelar.
Varje programdel är ofta knutet till något grafiskt objekt som är placerat någonstans
på formuläret. Programmet med dess alla objekt reagerar sedan på händelser som inträffar
när användaren klickar på dem. Det finns en uppsjö med sådana händelser som är kopplat
till de grafiska objekten. Olika grafiska objekt kan reagera på samma typ av händelse.
Några händelser kan inträffa t ex när
-
ett fönster skapas eller stängs (händelsen OnCreate resp OnClose)
-
ett grafiskt objekt som det kan klickas eller dubbelklickas
på (händelsen OnClick resp OnDblClick)
-
när muspekaren rör sig över ett grafiskt objekt (OnMouseMove).
Som du sett i kapitlet komponenter så är det lätt att åstadkomma
en grafisk miljö med olika komponenter på ett formulär. Men det händer ingenting så
när du klicka på dem så länge det inte är någon kod skriven för dem.
Hela tiden som ett Delphiprogram körs inträffar händelser i
en oavbruten följd. Om du inte har skrivit kod för en händelser inträffar ingenting
som reaktion på händelsen. Har du skrivit kod, ja, du utförs det som du skrivit kod
för. Att skriva händelseprocedurer är en vanlig företeelse i Delphi och det är först
nu som programmerinegn påminner om en mera konventionell programmering.
Inställning av kompilatorn
När vi nu står i begrepp att skriva egen programkod
kan det vara lämpligt att titta på hur vi bör ha vår kompilator inställd. Det finns
ett antal inställningar att göra för hur vi vill att den inbyggda kompilatorn skall
behandla programkoden när den översätter den till exekverbar kod.
Välj Project/Options från huvudmenyn och klicka sedan
på fliken Compiler i det dialogfönster som visas på skärmen.
Komplettera boxarna Runtime Errors och Syntax Options med
att kryssa i rutorna enligt figuren (Range checking, Overflow checking och Complete
boolean evaluation). Kryssa av Optimization så att kompilatorn inte avlägsnar
onödiga variabler från koden. Du vill kanske vara säker på att kunna se värdet av
en viss variabel då du stegar dig fram i proceduren.
Standardmässigt är Extended syntax förkryssat. Detta är nödvändigt
för att de flesta demonstrationsprogrammen skall fungera. Det tillåter bl a att man
hanterar en funktion som om det vore en procedur och det är inte särskilt lämpligt
när man skall lära sig hur dessa begrepp fungerar. När ditt program är färdigutvecklat
kan du gå tillbaka och ändra tillbaka till de ursprungliga inställningarna.
Händelser, Events
Varje komponent har att antal händelser som komponenten kan
reagera på. Formuläret som ju är ett Windowsfönster när programmet körs kan knytas
till ganska många händelser. Även en knapp skall kunna reagera på olika händelser.
Öppna en projekt och markera en kommandoknapp. Klicka därefter
på fliken Events i objektinspektorn.
På bilderna ovan kan du se vilka händelser som finns tillgängliga
för ett formulär (Form1) och vilka som finns tillgängliga för en kommandoknapp
(Button1).
Händelseprocedurer
I Delphi är det lätt att skriva händelseprocedurer. Det finns
flera sätt att göra detta. Om du vill åstadkomma en OnClick-händelse för en kommandoknapp
är det enklast att dubbelklicka på den. Dubbelklickar du på formuläret aktiveras en
OnCreate-händelse som standard. Vill du skapa en annan händelse så kan du välja detta
i Objektinspektorn.
Ett litet exempel för att generera en klickhändelse för en kommandoknapp.
-
Placera ut en knapp på formuläret.
-
Dubbelklicka på knappen. Delphi kommer nu automatiskt att placera
dig i editorfönstret, där en mall för händelseproceduren redan ställts i ordning.
-
Lägg mellan orden begin och end till det enklaste
tänkbara kodkommandot Close; som stänger ner programmet.
procedure TForm1.Button1Click(Sender:
TObject);
begin
Close;
end; |
Namnet på händelseproceduren TForm1.Button1Click är det
systematiska namn som Delphi ger till en sådan här procedur. I nmanet har du först
en del (TForm1 följt av en punkt), vilket innebär att det här är fråga om något
som finns på formuläret Form1. Efter punkten anges sedan vilken komponent det
är frågan om, i det här fallet Button1. Sist anges vilken händelse det är frågan
om, Click (händelsen OnClick). Inom parentes anges med Sender vilket
objekt som eventuellt genererade händelsen.
Om du nu testkör programmet och klickar på den enda knappen
kommer programmet omedelbart att stängas ner och det var ju det vill ville när vi
skrev in Close;.
Några Pascalbegrepp
Reserverade ord
Som nämndes i det första introduktionskapitlet så är det egentligen
Pascalkod som Delphi använder sig av. I Pascal (precis som i andra programmeringsspråk)
finns det s k reserverade ord som har en speciell innebörd för kompilatorn. Vi har
redan varit inne på några av dem (begin, end och procedure). De reserverade
order markeras alltid med fetstil i editorn och du är alltid tvungen att använda dem
på det sätt som de är avsedda för. Du kan alltså inte använda dessa ord i andra syften
(variabelnamn t ex).
Programrad
Raden med instruktionen kallas för programrad. Alla programrader
avslutas med ett semikolon. Detta semikolon är ett meddelande till kompilatorn att
nu är programraden slut. Fattas det ett semikolon så genereras ett kompileringsfel.
Att glömma ett semikolon är det i särklass vanligaste felet för en Pascalprogrammerare.
Kommentar
En ofta viktig är att lägga in kommentarer i din programkod.
Med kommentarer mitt ibland programkoden blir det lättare med t ex felsökning när
du vill göra ändringar i koden. Ju mer komplex kod desto viktigare blir det att kommentera.
Du kan använda klammerparenteser {} för att kommentera. Du kan också använda tecken
(**) enligt nedan. Fr o m version 2 kan du även använda två snedstreck efter varann
//, där kompilatorn ignorerar texten efter dessa på samma rad.
Namnregler för identifierare
Namnet på en procedur är en s k identifierare. Namngivningen
av dessa måste följa vissa regler.
-
Enbart engelska bokstäver och siffertecken får användas. Understrykningsstreck
går också bra att använda. Däremot är inga skiljetecken eller blanksteg tillåtna.
-
Namnet måste alltid börja med en bokstav
-
Namnet kan i princip vara lika långt som längden av en rad men
systemet bryr sig bara om de första 63 tecknen.
-
Ingen skillnad görs på stora och små bokstäver.
|
braNamn
|
giltigt |
|
dåligtNamn |
ogiltigt, innehåller ett å |
|
007Bond |
ogiltigt, börjar med en siffra |
|
Bond007 |
giltigt |
|
Kalle_Anka |
giltigt |
|
Kalle Anka |
ogiltigt, innehåller ett blanksteg |
Du bör eftersträva att välja namn som talar om vad identifieraren
står för. Helst ett kort och träffande namn. Undvik alltför långa namn som i längden
kan vara arbetssamma att skriva. Sannolikheten att skriva fel ökar också då.
Namn på egenskaper
De flesta komponenter har som sagts en mängd olika egenskaper.
Under programmets gång kanske vi vill att värdet för en egenskap skall ändras. Denna
egenskap måste då ha ett unikt namn så det är helt klart vilken egenskap som avses.
I Pascal namnges egenskapen med en s k punktnotation. Om du t ex vill referera
till egenskapen Caption för en kommandoknapp skriver du.
Antag att du placerat en etikett på ditt formulär. Om du avser
att ändra etikettens färgegenskap så blir namnet på färgen Label1.Caption. Du
skriver alltså komponentens namn först, sedan en punkt och därefter egenskapen.
Ändra egenskaper under programkörning
Alla de egenskapsvärden du anger i Objektinspektorn kan du också
tilldela direkt i programkoden. Faktum är att du har större frihet då eftersom varje
komponent ofta har fler egenskpaer än som visas i objektinspektorn.
Editeringsrutan
Edit
-
Välj ett nytt projekt och placera ut två knappar och en editeringsruta
(textruta) på formuläret.
-
Ändra egenskapen readOnly för editeringsrutan till True.
-
Ändra textvärdet för egenskapen Text för editeringsrutan från
"Edit1" till "Här ändras färgen".
-
Ändra titlarna (egenskapen Caption) på knapparna till Röd och
Gul.
-
Dubbelklicka på knappen Röd. Komplettera händelseproceduren
enligt nedan.
-
Dubbelklicka sedan på knappen Gul och skriv in enligt nedan.
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Color := clYellow;
end;
|
När du kör programmet färgas textrutan Röd
respektive Gul. I de båda händelseprocedurerna tilldelas egenskapen Color olika
färgvärden, clRed och clYellow. Egenskapen Color fungerar som
en slags behållare för ett färgvärde. Oftast kallar vi en sådan för variabel.
Tilldelning
I händelseprocedurerna ovan förekommer tilldelningar.
Tilldelningsoperatorn (:=) används för att tilldela en
variabel ett värde. Programsatsen innebär att egenskapen Color tilldelas värdet clRed.
Vid en tilldelning kopieras datavärdet från höger till vänster sida om tilldelningsoperatorn.
Komponenten
Shape
Detta är en grafisk komponent som kan representera
olika geometriska figurer. Du hittar Shapekomponenten på fliken Additional på
komponentpaletten.
-
Egenskapen Shape hos Shapekomponenten anger vilken grafisk
figur man vill ha (rektangel, cirkel, ellips etc.).
-
Med egenskapen Pen väljer man vilken stil, tjocklek som
figurer skall ritas med.
-
Egenskapen Brush bestämmer hur figurens inre yta skall
se ut beträffande mönster och färg.
Placera ut två knappar och en komponent av typen Shape på ett
formulär enligt nedan.
Ändra titlarna på knapparna till Rektangel resp Ellips.
Prova dig fram med Shapekomponenten och dess egenskaper. Välj färgen clAqua på Brush.Color och
färgen clWhite på Pen.Color.
Dubbelklicka på knappen Rektangel för händelsen OnClick. Komplettera
proceduren enligt nedan.
procedure TForm1.Button1Click(Sender: TObject);
begin
Shape1.Shape := stRectangle;
end;
|
Dubbelklicka sedan på knappen Ellips och komplettera
händelsen enligt nedan.
procedure TForm1.Button1Click(Sender: TObject);
begin
Shape1.Shape := stEllipse;
end;
|
Kör programmet och testa att klicka på de båda knapparna.
|