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]