- 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 » Artiklar » Enheter, Units
Operativsystem: Windows 95/98/ME/2000/XP
Delphiversion: Delphi 3 eller senare
Komponenter: Inga
  Publicerad: 2003-01-25
Läst: 2962
Röster: 5
Skribent: Staffan Berg

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:

Observera att vi bara skriver in funktionshuvudet i interface-delen. Den övriga koden för funktionen skriver vi in under implementation.


implementation

function InBetween(tal,min,max:integer):boolean;
begin
if
(tal>=min) and (tal<=max) then
InBetween:=True
else
InBetween:=False;
end;

Observera att vi bara skriver in funktionshuvudet i

Formulärets kod

För att nu testa denna funktion skall vi skapa några kontroller och lite kod för formuläret. Börja med att infoga en textruta och en kommandoknapp till ditt formulär. Dubbelklicka på knappen och skriv sedan in nedanstående kod:


procedure TForm1.Button1Click(Sender: TObject);
var inmatning:integer;
begin
inmatning:=StrToInt(Edit1.Text);
if Not InBetween(inmatning,0,10) then
ShowMessage('Ej giltigt värde');
end;









Testkör programmet. Pröva sedan att ändra i andra och tredje parametern och upptäck att du gjort en generell funktion som testar om ett heltal är inom giltiga gränser.
En redan färdig unit kan sedan användas i alla applikationer. Det är bara att välja Project/Add To Project... för att lägga till en enhet som redan finns.


Vid tangentbordet
/Staffan Berg



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