Rösta på artikeln
Strängkonstanter och strängvariabler
I detta kapitel skall vi bekanta oss med några verkligt grundläggande
begrepp inom all programmering, konstanter och variabler. Dessa två begrepp åskådliggörs
med hjälp av datatypen String som behandlas för att in- och utmatning av värden
skall kunna klaras av med hjälp av komponenter i Delphi.
Strängkonstanter
Vi skall titta på några konstanta stränguttryck av datatypen
string. Placera ut en etikett (Label) och en knapp på ett formulär. Skriv in följande
kod under knappen klickhändelse.
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := 'Du tryckte på knappen!';
end; |
När du sedan kör programmet ser du att texten 'Du tryckte på
knappen!' skrivs ut i etiketten. Egenskapen Caption är i detta exempel en variabel
som kan innehålla text och i detta exempel tilldelas den alltså texten 'Du tryckte
på knappen!' . Ett strängvärde som detta består alltså av en massa tecken omgärdat
med två apostrofer. Eftersom sådana här strängar inte kan ändras kallas de
för konstantsträngar.
Exemplet ovan tilldelades egenskapen Caption värdet av
en konstantsträng. Vi skulle kunna ha uppnått samma effekt genom att deklarera denna
som en strängkonstant enligt nedan.
procedure TForm1.Button1Click(Sender: TObject);
const strKonst = 'Du tryckte på knappen!';
begin
Label1.Caption := strKonst;
end;
|
Notera följande:
-
I procedurer deklareras konstanter omedelbart efter procedurhuvudet.
-
Deklarationen inleds med det reserverade ordet const.
-
Ett ensamt likhetstecken används för att definiera konstantvärdet.
I deklarationen talar Delphi om att konstanten strKonst skall
ha värdet 'Du tryckte på knappen!'. På alla de ställen strängkonstanten strKonst används
ersätts den med motsvarande värde.
Man deklarerar en konstant för att det kan vara lättare än att
ange ett namn istället för ett värde. Eller för att samma konstantuttryck förekommer
många gånger i programkoden. Vill man ändra på värdet behöver man bara göra det på
ett enda ställe, nämligen i deklarationen.
Några konstantdeklarationer
Här följer några exempel på konstantdeklarationer
const
strKonst = 'Du tryckte på knappen!';
s = 'hejsan svejsan';
program = 'Object Pascal';
|
En konstantdeklaration inleds som sagt med det reserverade ordet const.
Därefter följer en uppräkning av konstanterna. Varje rad betraktas som en programrad
och avslutas med ett semikolon enligt namngivningsreglerna.
Strängvariabler
Egenskapen Caption för en komponent måste vara en
variabel av en typ som kan innehålla strängar. Vi är emellertid inte begränsade till
att använda enbart egenskaper hos komponenter när vi behöver en variabel. Vi kan,
på ett liknande sätt som med konstanter, deklarera egna variabler.
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
s = 'hejsan svejsan';
Label1.Caption := s;
end;
|
Variabeldeklarationen inleds med det reserverade ordet var.
I proceduren deklareras en variabel med namnet s. Variabeln är av typen string,
som också är ett reserverat ord.
I procedurkroppen tilldelas först variabeln s en konstantsträng
i satsen s := 'Du tryckte på knappen!';. Därefter tlldelas egenskapen Caption
hos etiketten värdet av variabeln s: Label1.Caption := s;
Några variabeldeklarationer
Här följer några exempel på variabeldeklarationer
var
namn : string;
adress1, adress2 : string;
a,b,c : string;
|
I exemplet ovan deklareras sex variabler i ett s k "var-block".
En variabeldeklaration inleds med det reserverade ordet var. Därefter följer det en
uppräkning av variablerna. Varje variabel inleds med namnet på den, därefter följer
ett kolon och sedan vilken datatyp variabel deklareras med. Raderna avslutas med ett
semikolon.
En variabel är alltså en slags behållare i vilken du kan lagra
data. När vi deklarerar en variabel måste vi alltså ange vilken typ som vi tänker
lagra i "behållaren". När variabeln sedan används i programmet har precis det antal
minnesceller som krävs för att lagra data av denna datatyp reserverats för variabeln
så att det verkligen kan lagras någonstans i minnet. Kompilatorn håller reda på att
rätt typ av data stämmer överens med det som lagras i variablerna.
Sammanslagning av strängvariabler
Här följer ett exempel på hur man kan addera strängar.
procedure TForm1.Button1Click(Sender: TObject);
var s,t,u,v : string;
begin
s := 'fantaster';
t := 'Hej';
u := 'alla';
v := 'Delphi!';
Label1.Caption := t+u+v+s;
end;
|
Med proceduren ovan kommer etikettens text att få värdet 'Hej
alla Delphi fantaster!'
Utmatning av strängar
Det finns flera metoder att presentera värdet av
en sträng. Du kan använda
-
En label, etikett (som vi nyss har testat).
-
En editeringsruta, textruta.
-
En dialogruta i vilken strängens värde skrivs ut. Vi har varit
inne på ShowMessage. En annan variant är MessageDlg (se hjälpen i Delphi för att se
hur denna används).
Inmatning till en sträng med en inmatningsruta
I våra exempel i detta kapitel har direkta tilldelningar till
strängvariabler gjorts. Ofta vill man kunna mata in ett värde till en strängvariabel
när programmet körs. Man kan tillämpa olika metoder för att få detta utfört varav
vi skall demonstrera två.
Nedan demonstreras ett exempel med en inmatningsruta, s k Inputbox.
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
s := InputBox('Inmatning', 'Ange en sträng', 'Hej');
Label1.Caption := 'Du angav strängvärdet: '+ s;
end;
|
När du kör denna procedur kommer du att få upp dialogrutan
som på bilden nedan. Till Inputboxen anges tre strängar.
-
Titel (Inmatning)
-
Ledtext (Ange en sträng)
-
Standardvärde (Hej)
När dialogrutan för Inputbox stängs lämnar den en sträng tillbaka
och denna lagras i variabeln s. Det finns en annan liknande dialogruta för inmatning
som heter InputQuery. Se hjälpen för hur denna används.
Inmatning med en editeringsruta
En annan mycket bra metod för att mata in strängvärden kan vara
att använda en editeringsruta, textruta. I detta exempel skall vi byta ut våra traditionella
kommandoknappar till bildknappen BitBtn. Skillnaden är egentligen bara att
bildknappen kan vara försedd med en grafisk bild, som i Delphi kallas Glyph.
Med egenskapen Kind kan man välja mellan ett antal standardbilder
för situationer som OK, Cancel etc.
Begär ett nytt projekt och placera två etiketter, en editeringsruta
och två BitButton.komponenter på formuläret enligt bilden.
Det kan var bra att veta att om man använder knappar tillsammans
med en editeringsruta så genereras händelsen OnClick för den knapp vars egenskap Default har
satts till True om Enter-knappen trycks ned.
Det vi vill skall hända är fäljande
-
När programmet startar skall editeringsrutan ha fokus. Det kommer
den också att ha eftersom det var det första komponenten som placerades ut på formuläret.
-
Då användaren har matat in sitt namn och trycker Enter eller
klickar på OK-knappen skall namnet skrivas ut på etiketten.
-
Så snart ett nytt namn skrivits in skall namnet på etiketten
raderas.
-
Om användar klickar på Cancel-knappen skall programmet
avslutas. Det enda som krävs för detta är att man på Cancel-knappen ger egenskapen Kind värdet bkClose.
procedure TForm1.BitBtn1Click(Sender: TObject);
var s : string;
begin
s := Edit1.Text;
Edit1.Text := '';
Label2.Caption := 'Schysst namn '+s;
Edit1.SetFocus;
end;
|
-
Klicka på editeringsrutan. Välj fliken Events i objektinspektorn.
Dubbelklicka i värderutan för händelsen OnChange. Detta är en händelse som
genereras så fort något ändras i textrutan. Komplettera händelseproceduren nedan.
procedure TForm1.Edit1Change(Sender: TObject);
begin
Label2.Caption := '';
end;
Provkör programmet!
|
Listrutan Listbox
Det finns ett antal komponenter där med vars hjälp
man kan lagra strängar i en lista. En sådan komponent är Listbox som du hittar under
fliken Standard i komponentpaletten. Strängarna lagras i egenskapen Items som också
har metoder för hantering av strängarna. Några av dessa är
-
Items.Add Sätter en sträng i listan. Strängen sorteras in i
listan om egenskapen Sorted har värdet True, annars sätts strängen sist i listan.
-
Items.Insert. Sätter in en sträng på en viss plats i listan.
-
Items.Delete. Tar bort en sträng på en viss plats i listan.
Listrutan har också några användbara egenskaper för listhantering
i
-
Sorted. Om Sorted har True sorteras listan.
-
ItemIndex. Anger numret på aktuell sträng. Strängarna numreras
med början på index 0.
-
Column. Med denna egenskap väljer man antal kolumner. Standardvärdet
är 0 vilket innebär att listrutan har en kolumn.
-
Clear. Tömmer hela listrutan.
Inmatning med editeringsrutan till en listruta
Placera ut en editeringsruta, en listruta och fyra
bildknappar enligt bilden nedan. Sätt namnegenskap och Captionegenskap på bildknapparna
enligt de på bilden, alltså Addera, Sortera, Rensa och Avsluta.
-
Dubbelklicka på Addera-knappen och komplettera händelseproceduren
enligt nedan.
procedure TForm1.AdderaClick(Sender: TObject);
var s : string;
begin
s := InRuta.Text;
Listruta.Items.Add(s);
Inruta.Text := '';
Inruta.SetFocus;
end;
|
-
Dubbelklicka på Sortera-knappen och komplettera händelseproceduren
enligt nedan.
procedure TForm1.SorteraClick(Sender: TObject);
begin
Listruta.Sorted := True;
Inruta.SetFocus;
end;
|
-
Dubbelklicka på Rensa-knappen och komplettera händelseproceduren
enligt nedan.
procedure TForm1.RensaClick(Sender: TObject);
begin
Listruta.Clear
Listruta.Sorted := True;
Inruta.Text := '';
Inruta.SetFocus;
end;
|
I händelseproceduren AdderaClick deklareras en lokal
variabel s som används för att lagra värdet i inmatningsrutan. Därefter adderas
värdet av s till listan. Detta är egentligen överflödigt eftersom man direkt
kunde ha skrivit:
Lista.Items.Add(InRuta.Text);
Provkör nu programmet och testa att mata in några namn. Nu kommer
listan att fyllas på med de namn som du skriver in. Du kan också trycka på Enter-knappen
efter att du har skrivit in ett namn i editeringsrutan. Namnet kommer att läggas till
i listrutan på samma sätt som när du klickar på OK-knappen och detta beror
på att Defaultegenskapen sattes till värdet True när du valde Kind-egenskapen
bkOK.
|