- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 



 FuzzyDizzie » Delphi » Grundkurs » Händelser
Operativsystem: Windows 95/98/ME/2000/XP
Delphiversion: Delphi 3 eller senare
Komponenter: TEdit, TButton, TShape
  Publicerad: 2002-02-01
Läst: 5088
Röster: 8
Skribent: Staffan Berg

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.

Edit1.Color := clRed;


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 clAquaBrush.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.

© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -