---
title: "Glos program.."
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/27835-glos-program"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alvar s"
published: "2000-10-26T17:03:00.000Z"
updated: "2000-11-06T14:49:00.000Z"
replies: 5
views: 437
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/27835-glos-program"
---

# Glos program..

## #1 — Alvar s, 2000-10-26T17:03Z

Frågor markerade med \* betyder att det är bra om du laddar hem källkoden [här](http://user.tninet.se/~xkk718a/delphi.zip) och svarar utifrån den... 

1\*: Hör gör man så att man kan skriva små och stora bokstäver blandade i en edit? ( nu måste man ju skriva exakt som man själv skriver..  )

2: Kan man använda en bild till en "button" ? Dvs: Bilden ska vara inuti "button:en" ( men intrycknings effekten ska vara kvar... )

3\*: Kan man använda bilder till rättningen? Dvs: När jag har 1 rätt visas bild1.jpg och när jag har 2 rätt visas bild bild2.jpg etc... ( i stället för text som inte ser lika bra ut... )

4\*: Kan man göra så att orden som är med slumpas fram från en annan fil? ( med kryptering så att man inte kan fuska... )

Permalänk: https://www.webforum.nu/p/27835

## #2 — the proclaimer, 2000-10-26T19:22Z

2: du kan ju prova SpeedButton eller BitBtn?!

Permalänk: https://www.webforum.nu/p/400423

## #3 — Matte, 2000-10-27T01:08Z

1\. I Edit1's event OnExit lägger du in följande kod:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  With sender as TEdit do Text:=AnsiLowerCase(Text);
end;
Du kan sedan använda samma procedure till alla dina Edit.

3\. Lägg en Image på din TForm. Ladda sedan in aktuell bild med Image1.Picture.LoadFromFile.
Alternativt kan du lägga in alla dina bilder i varsin Image där du sätter visible till False.
Du ska kanske tänka på hur det blir om du har 30 eller 50 glosor. Kanske det istället går att hitta andra vägar att göra ditt program roligare än en särskild bild beroende på antal rätt.

4\. Det är rekommendabelt att lägga glosorna i en separat fil. Du kan t.ex lägga dom i en typad fil.
Under Type lägger du in något i stil med det här:
Glostyp=Record
  Ord1:String\[20\];
  Ord2:String\[20\];
  Svargrad:Integer;
  Anvand:Boolean;
End;
Under Var lägger du in något i stil med det här:
Glosfil: File Of Glostyp;
GlosArray: Array of Glostyp:
Läs in dina glosor i en Array och slumpa från Array'en.
Lämpligtvis har du ett separat program för att skriva glosor till filen.
Vad det gäller kryptering är jag nollställd, men du kan exempelvis ändra ordningstalet för bokstäverna med 10 när du läser till och från filen.

Permalänk: https://www.webforum.nu/p/400424

## #4 — Alvar s, 2000-11-04T14:20Z

1\*: Jag fick det inte att funka :( ( dvs: jag klarar det inte ;) ) Kan du visa med med [källkoden](http://user.tninet.se/~xkk718a/delphi.zip)?

4\*: Fattar inget här heller :) [Kan du visa med källkoden...](http://user.tninet.se/~xkk718a/delphi.zip) ?

[5\*](http://user.tninet.se/~xkk718a/delphi.zip): På form2 kan ju vissa ord komma flera gånger, hur gör man så att dom endast får komma upp en gång?

6: Om jag har en ComboBox med 3 alternativ, hur gör jag för att en kod ska köras för en viss rad? ( viss text dvs.. )

7: "edt1.text:= '';" / Hur ska man skriva inom "" för att man ska kunna skriva 2 olika saker men ändå få rätt?

> Lämpligtvis har du ett separat program för att skriva glosor till filen.

Hur gör man? :)

Permalänk: https://www.webforum.nu/p/400425

## #5 — Matte, 2000-11-04T19:20Z

1\.
För Edit1 funkar det ju.
För Edit2’s Event OnExit väljer du Edit1Exit.
För Edit3’s Event OnExit väljer du Edit1Exit.

4\. 
Du ska nu få ett separat program att skriva in dina glosor med.
Lägg in följande under Type i Form1’s unit:
type
  Glostyp=Record
    Ord1:String\[25\];
    Ord2:String\[25\];
    Svargrad:Integer;
    Anvand:Boolean;
  End;

Lägg in följande under Var i Form1’s unit:
var
  Form1: TForm1; {Finns redan, ska ej skrivas in}
  Glosfil:File of Glostyp;

På Form1’s Event OnActivate skriver du in följande kod:
procedure TForm1.FormActivate(Sender: TObject);
var i,j:Integer;Glosa:Glostyp;
begin
  With StringGrid1 do
  begin
    Cells\[0,0\]:='Svenska';
    Cells\[1,0\]:='Engelska';
    Cells\[2,0\]:='Svårighetsgrad';
    RowCount:=2;
    For i:=0 to 2 do cells\[i,1\]:='';
    try
      AssignFile(Glosfil,'Minaglosor.glo');
      Reset(Glosfil);
      While not Eof(Glosfil) do
      begin
        If Cells\[0,1\]\<\>'' Then RowCount:=RowCount+1;
        Read(Glosfil,Glosa);
        For j:=1 to Length(Glosa.Ord1) do
          Glosa.Ord1\[j\]:=Chr(ord(Glosa.Ord1\[j\])-10);
        For j:=1 to Length(Glosa.Ord2) do
          Glosa.Ord2\[j\]:=Chr(ord(Glosa.Ord2\[j\])-10);
        Cells\[0,RowCount-1\]:=Glosa.Ord1;
        Cells\[1,RowCount-1\]:=Glosa.Ord2;
        Cells\[2,RowCount-1\]:=IntToStr(Glosa.Svargrad);
      end;
      CloseFile(Glosfil);
    except
      Rewrite(Glosfil);
      CloseFile(Glosfil);
    end;
    SetFocus;
  end;
end;

Lägg en TstringGrid på Form1.
Skriv in följande Properties för StringGrid1:
ColCount = 3
FixedCols = 0
FixedRows = 1
Options-GoEditing = True
Scrollbars = ssVertical
Ställ in lämpligliga Kolumnbredder för Stringgrid1.
Lägg in följande på Event OnKeyDown:
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;  
Shift: TShiftState);
begin
  If Key=VK_DOWN then
  With StringGrid1 do
  If Row=RowCount-1
  then RowCount:=RowCount+1;
end;
Lägg in följande på Event OnKeyPress:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  If Key=#13 Then
  With StringGrid1 Do
  If Col\<2 Then Col:=Col+1 Else
  Begin
    If Row=RowCount-1 then RowCount:=RowCount+1;
    Row:=Row+1;
    Col:=0;
  End;
  If StringGrid1.Col=2 Then
  Begin
    If (Key\<\>#13) and (Key\<\>#8) and (Key\<\>#27) Then
    If (Key\<#48) or (Key\>#57) Then Key:=#0;
  End;
end;

Lägg en TBitBtn på form1.
Skriv in följande Properties för BitBtn1:
Kind = bkYes
Caption = &Spara
Lägg in följande kod på BitBtn1’s Event OnKlick:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j:Integer;Glosa:Glostyp;
begin
  AssignFile(Glosfil,'MinaGlosor.glo');
  Rewrite(Glosfil);
  With StringGrid1 do
  For i:=1 to RowCount-1 do
  If (Cells\[0,i\]\<\>'') and
     (Cells\[1,i\]\<\>'') and
     (Cells\[2,i\]\<\>'')
  then begin
    Glosa.Ord1:=Cells\[0,i\];
    Glosa.Ord2:=Cells\[1,i\];
    Glosa.Svargrad:=StrToInt(Cells\[2,i\]);
    For j:=1 to Length(Glosa.Ord1) do
      Glosa.Ord1\[j\]:=Chr(ord(Glosa.Ord1\[j\])+10);
    For j:=1 to Length(Glosa.Ord2) do
      Glosa.Ord2\[j\]:=Chr(ord(Glosa.Ord2\[j\])+10);
    Write(Glosfil,Glosa);
  end;
  CloseFile(Glosfil);
  Close;
end;
Lägg ytterligare en TBitBtn på Form1.
Skriv in följande Properties för BitBtn2:
Kind = bkCancel
Caption = Avbryt
Lägg in följande kod på BitBtn2’s Event OnKlick:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Close;
end;

Nu är det dags att använda glosorna i ditt program.
Lägg in följande under Type i Form2’s unit:
type
  Glostyp=Record
    Ord1:String\[25\];
    Ord2:String\[25\];
    Svargrad:Integer;
    Anvand:Boolean;
  End;

Lägg in följande under Var i Form2’s unit:
var
  Form2: Tform2; {Finns redan, ska ej skrivas in}
  Glosfil:File of Glostyp;
  Gloslista:Array of Glostyp;
  SlumpGlosor:Array\[1..20\] of Glostyp;

På Form1’s Event OnActivate skriver du in följande kod:
procedure TForm1.FormActivate(Sender: TObject);
var i:Integer;Glosa:Glostyp;
begin
  try
    AssignFile(Glosfil,'Minaglosor.glo');
    Reset(Glosfil);
    While not Eof(Glosfil) do
    begin
      Read(Glosfil,Glosa);
      For i:=1 to Length(Glosa.Ord1) do
        Glosa.Ord1:=Chr(ord(Glosa.Ord1)-10);
      For i:=1 to Length(Glosa.Ord2) do
        Glosa.Ord2:=Chr(ord(Glosa.Ord2)-10);
      Glosa.Anvand:=False;
      SetLength(Gloslista,Length(Gloslista)+1);
      Gloslista\[High(Gloslista)\]:=Glosa;
    end;
    CloseFile(Glosfil);
  except
    Rewrite(Glosfil);
    CloseFile(Glosfil);
  end;
end;

Lägg sedan till följande procedure till Unit2 för att ta fram en slumpad lista på 20 ord. Där finns en spärr för att inte använda samma ord 2 gånger förrän programmet startar igen. Använd den slumpade Array’en för att hämta glosord och rätta.
procedure Slumpaord;
Var i,j,k,L,EjAnvanda:Integer;
begin
  EjAnvanda:=0;
  For i:=0 to High(Gloslista) do
  If not Gloslista.Anvand Then EjAnvanda:=EjAnvanda+1;
  For i:=1 to 20 do
  Begin
    SlumpGlosor.Ord1:='';
    SlumpGlosor.Ord2:='';
  End;
  Randomize;
  For i:=1 to 20 do
  If EjAnvanda\>0 then
  Begin
    j:=1+Random(EjAnvanda);
    L:=0;
    k:=0;
    While L\<j do
    begin
      If not Gloslista\[k\].anvand Then L:=L+1;
      If L\<j Then k:=k+1;
    End;
    EjAnvanda:=EjAnvanda-1;
    Gloslista\[k\].Anvand:=True;
    SlumpGlosor:=Gloslista\[k\];
  End;
end;

5\.
Se 4.

6\.
Comboboxens Event OnChange eller onClick.
Om du vill flytta över text: Edit1.Text:=Combobox1.Items\[Combobox1.ItemIndex\]
Om du vill välja procedure:
Case ComboBox1.ItemIndex of
  0: ….
  1: ….
  2: ….
End;

7\.
Man får leta i strängen efter ”;” och om man hittar ”;” så får man ta ut ordet som finns före och göra en jämförelse. Ta bort strängen t.o.m. ”;” och kör sedan om proceduren.

\[Redigerat av Matte den 04 nov 2000\]

Permalänk: https://www.webforum.nu/p/400426

## #6 — Alvar s, 2000-11-06T14:49Z

1: Jag lyckades efter mycket testande att skapa en "procedure" :) Programmet gick igång... men det funkade inte :( Måste man göra nåt speciellt förutom att skriva in koden?

4: Fattar inget nu heller :) Kan du göra en källkods fil? :)

5: Se 4…

6: Förstog inte här heller :) Hur får man in text på andar rader.. ? Gick inte med Items/Tstrings :(

7: Fattade inte här heller :e ( jag är inte så bra på det här än ;) ) Om jag vill att ordet "hej" och "tja" ska vara rätt, hur gör jag då? ( endast dom 2 dvs.. )

8: Finns det nån bra bok jag borde läsa? :) ;)

Permalänk: https://www.webforum.nu/p/400427

---

Tråden på webben: https://www.webforum.nu/amne/programmering/27835-glos-program
