Rösta på artikeln
Förord
I den här artikeln tar jag upp hur enheter, units, kan användas i Delphi. Artikeln
tar också upp hur funktioner som ligger i en unit kan användas i hela projektet.
Grundstommen i en Unit
All källkod i Delphi sparas alltid som en unit, .pas-fil. Skapar du ett nytt formulär
i ditt projekt, så skapas också en ny unit. Du kan även addera units utan att det
nödvändigtvis behöver finnas ett formulär kopplat till dem. Om du väljer File/New
från menyn så öppnas en dialogruta där du kan välja att lägga till en ny unit. Delphi
lägger automatiskt till dessa fyra rader kod:
unit Unit1;
interface
implementation
end.
|
SQL
Lägga till poster
Den första raden anger att det är en unit och vilket namn den har. Du skall inte ändra
namnet på denna rad. Delphi ändrar namnet automatiskt då du sparar enheten första
gången.
Den andra raden, interface, talar om att gränssnittet
för uniten börjar här. Efter den raden skall du skriva den kod som skall vara synlig
för andra enheter som skall använda sig av funktioner som finns här. Det kan till
exempel vara deklarationer av konstanter och variabler som skall vara tillgängliga
i hela programmet. Det kan också vara datatypsdefinitioner eller klasser du vill ha
tillgång till i dina formulär. Om du lägger till en egen unit för att kunna skapa
generella procedurer och funktioner skall procedur- respektive funktionshuvudet finnas
under interface. Själva koden för proceduren eller funktionen skrivs däremot under
implementation.
Även implementation av klassers metoder skall finnas under implementation.Den tredje
raden som läggs till automatiskt anger var implementationen börjar. Det som
skrivs här är oftast koden till klassmetoder (om det är klasser man bygger i uniten),
procedurer och funktioner.
Den sista raden, som alltid måste finnas, anger att det är sista raden i uniten. Ordet end avslutas
här med en punkt. Det är enda stället i koden då ordet end avslutas
med punkt.
Använda en Unit
För att kunna använda de funktioner och procedurer som är skrivna i en annan Unit
måste vi tala om för de andra formulären att vi vill använda dessa. Detta görs genom
att lägga till namnet på enheten under uses. Denna avdelning har du säkert
upptäckt redan finns ganska långt upp i formulärets kod.
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls;
|
Har du sysslat med databaser och
Här anges att formuläret vill ha tillgång till procedurer, funktioner, klasser eller
deklarationer som finns i de uppräknade enheterna. De enheter som Delphi själv lägger
till efter uses är enheter som ingår i Delphi, så kallade standardenheter.
När du själv skapar en egen unit som du sedan vill addera till ditt projekt måste
du ange i uses-delen att just denna enhet skall användas. Om du skapar en enhet
som namnges med generellt så lägger du alltså till det namnet under uses-delen.
Det kan då se ut så här:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, generellt;
|
När kompilatorn skall översätta koden går den in i de uppräknade
enheterna och läser in allt som finns under interface, och i och med detta
kan formuläret få tillgång till koden i enheterna.
I vissa speciella fall kan du råka ut för att det blir en korsreferens. Tänk dig att
enheten Generellt vill ha tillgång till enheten Kontroll. Då lägger
du givetvis till Kontroll efter uses i enheten Generellt. Samtidigt behöver enheten Kontroll ha
tillgång till något i enheten Generellt. Då måste du ju lägga till Generellt
efter uses i Kontroll. Detta blir en korsreferens.
För att undvika korsreferenser kan du i stället infoga en egen uses direkt
under ordet implementation.
...
implementation
{$R *.DFM}
uses Generellt;
...
|
Proceduren raderar alla
För
För att testa vår nyskapade unit skall vi nu skriva en funktion i denna. Funktionen
vi skall skriva skall kontrollera om ett inmatat värde hamnar i ett angivet intervall.
Om talet hamnar utanför intervall så skall ett felmeddelande uppenbara sig som förkunnar
att värdet är ogiltigt. Vi kallar denna funktion för InBetween. Börja med att skriva
in funktionshuvudet i interface-delen, enligt nedan:
interface
function InBetween(tal,min,max:integer):boolean;
|
enligt nedan:
|