Händelser i Delphi
Förord
Denna artikel beskriver bland annat de metoder för händelseprogrammering som finns 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ö.Innehåll
»»
»
»
»
Relaterade artiklar
» Arraystrukturer» Introduktion till Delphi # 1
» Iteration
» Procedurer och funktioner
» Räkna med Delphi
» Skapa program i Delphi
» Strängkonstanter och strängvariabler
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
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.
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.
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.
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
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.
Detta är en grafisk komponent som kan representera olika geometriska figurer. Du hittar Shapekomponenten på fliken Additional på komponentpaletten.
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.
Dubbelklicka sedan på knappen Ellips och komplettera händelsen enligt nedan.
Kör programmet och testa att klicka på de båda knapparna.
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.
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.
Button1.Caption
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 ned.
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Color := clRed;
end;
- 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.
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 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.
0 Kommentarer