- 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 » Strängar
Operativsystem: Windows 95/98/ME/2000/XP
Delphiversion: Delphi 3 eller senare
Komponenter: TEdit, TBitBtn, TButton, TList
  Publicerad: 2002-02-06
Läst: 3971
Röster: 7
Skribent: Staffan Berg

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.

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