Archimedes
April 25th, 2014, 11:45 AM
I want to make a text quest and I need some help with debugging. When I click on an action in listbox that differs from first in the list, I have to click it twice to proceed. I've noticed that after each click focus goes to first item. I tried to move focus to another place but it didn't help. Any ideas?
So. Main window.
var
Form1: TForm1;
SelectedCase:integer;
SaveName: string;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm1.SaveGameClick(Sender: TObject);
begin
case Combobox1.ItemIndex of
0:SaveName:='save\Save1.sav';
1:SaveName:='save\Save2.sav';
2:SaveName:='save\Save3.sav';
3:SaveName:='save\Auto.sav';
end;
if (Combobox1.ItemIndex>-1) then Unit3.Save;
end;
procedure TForm1.LoadGameClick(Sender: TObject);
begin
case Combobox1.ItemIndex of
0:SaveName:='save\Save1.sav';
1:SaveName:='save\Save2.sav';
2:SaveName:='save\Save3.sav';
3:SaveName:='save\Auto.sav';
end;
if (Combobox1.ItemIndex>-1) then Unit3.Load;
end;
procedure TForm1.NewGameClick(Sender: TObject);
begin
Form2.Position:=poDesktopCenter;
Form2.Show;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
//SelectedCase:=0;
SelectedCase:=ListBox1.ItemIndex;
Memo1.SetFocus;
LoadWorld;
end;
end.
Unit with all procedures (Unit3)
type
Data = Record
CharName:string[255];
StageNumber:integer;
Stats:array[1..9] of integer;
Inventory:array[1..50] of byte;
SpecialAbilities:array[1..9] of boolean;
SpiderAbilities:array[1..9] of boolean;
end;
var
Main:Data;
SaveFile: file of Data;
procedure Save;
procedure Load;
procedure LoadWorld;
procedure Stage1;
procedure Stage2;
procedure Stage3;
procedure Stage4;
procedure Stage5;
implementation
procedure Save;
begin
AssignFile(SaveFile,SaveName);
ReWrite(SaveFile);
Write(SaveFile,Main);
CloseFile(SaveFile);
end;
procedure Load;
begin
AssignFile(SaveFile,SaveName);
Reset(SaveFile);
if FileSize(SaveFile) <> 0 then
begin
Read(SaveFile,Main);
CloseFile(SaveFile);
LoadWorld;
end
else CloseFile(SaveFile);
end;
procedure Stage1;
begin
Main.StageNumber:=1;
case SelectedCase of
0:Main.StageNumber:=2;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage1.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage1.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage1.jpg');
end;
procedure Stage2;
begin
case SelectedCase of
0:Main.StageNumber:=3;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage2.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage2.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage2.jpg');
end;
procedure Stage3;
begin
case SelectedCase of
1:Main.StageNumber:=4;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage3.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage3.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage3.jpg');
end;
procedure Stage4;
begin
case SelectedCase of
0:Main.StageNumber:=5;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage4.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage4.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage4.jpg');
end;
procedure Stage5;
begin
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage5.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage5.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage5.jpg');
end;
procedure LoadWorld;
begin
if (Main.StageNumber mod 5=0) then
begin
SaveName:='save\Auto.sav';
Save;
end;
case Main.StageNumber of
1:Stage1;
2:Stage2;
3:Stage3;
4:Stage4;
5:Stage5;
end;
end;
end.
New game window. Contains character name input window and start button.
var
Form2: TForm2;
Name:string;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var i:byte;
begin
Name:=Edit1.text;
for i:=1 to length(Name) do Main.CharName[i]:=Name[i];
Form2.Hide;
Unit3.Stage1;
end;
end.
So. Main window.
var
Form1: TForm1;
SelectedCase:integer;
SaveName: string;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm1.SaveGameClick(Sender: TObject);
begin
case Combobox1.ItemIndex of
0:SaveName:='save\Save1.sav';
1:SaveName:='save\Save2.sav';
2:SaveName:='save\Save3.sav';
3:SaveName:='save\Auto.sav';
end;
if (Combobox1.ItemIndex>-1) then Unit3.Save;
end;
procedure TForm1.LoadGameClick(Sender: TObject);
begin
case Combobox1.ItemIndex of
0:SaveName:='save\Save1.sav';
1:SaveName:='save\Save2.sav';
2:SaveName:='save\Save3.sav';
3:SaveName:='save\Auto.sav';
end;
if (Combobox1.ItemIndex>-1) then Unit3.Load;
end;
procedure TForm1.NewGameClick(Sender: TObject);
begin
Form2.Position:=poDesktopCenter;
Form2.Show;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
//SelectedCase:=0;
SelectedCase:=ListBox1.ItemIndex;
Memo1.SetFocus;
LoadWorld;
end;
end.
Unit with all procedures (Unit3)
type
Data = Record
CharName:string[255];
StageNumber:integer;
Stats:array[1..9] of integer;
Inventory:array[1..50] of byte;
SpecialAbilities:array[1..9] of boolean;
SpiderAbilities:array[1..9] of boolean;
end;
var
Main:Data;
SaveFile: file of Data;
procedure Save;
procedure Load;
procedure LoadWorld;
procedure Stage1;
procedure Stage2;
procedure Stage3;
procedure Stage4;
procedure Stage5;
implementation
procedure Save;
begin
AssignFile(SaveFile,SaveName);
ReWrite(SaveFile);
Write(SaveFile,Main);
CloseFile(SaveFile);
end;
procedure Load;
begin
AssignFile(SaveFile,SaveName);
Reset(SaveFile);
if FileSize(SaveFile) <> 0 then
begin
Read(SaveFile,Main);
CloseFile(SaveFile);
LoadWorld;
end
else CloseFile(SaveFile);
end;
procedure Stage1;
begin
Main.StageNumber:=1;
case SelectedCase of
0:Main.StageNumber:=2;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage1.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage1.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage1.jpg');
end;
procedure Stage2;
begin
case SelectedCase of
0:Main.StageNumber:=3;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage2.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage2.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage2.jpg');
end;
procedure Stage3;
begin
case SelectedCase of
1:Main.StageNumber:=4;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage3.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage3.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage3.jpg');
end;
procedure Stage4;
begin
case SelectedCase of
0:Main.StageNumber:=5;
end;
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage4.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage4.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage4.jpg');
end;
procedure Stage5;
begin
Form1.Memo1.Lines.Clear;
Form1.ListBox1.Items.Clear;
Form1.Memo1.Lines.LoadFromFile('story\Stage5.txt');
Form1.ListBox1.Items.LoadFromFile('case\Stage5.txt');
Form1.Image1.Picture.LoadFromFile('img\Stage5.jpg');
end;
procedure LoadWorld;
begin
if (Main.StageNumber mod 5=0) then
begin
SaveName:='save\Auto.sav';
Save;
end;
case Main.StageNumber of
1:Stage1;
2:Stage2;
3:Stage3;
4:Stage4;
5:Stage5;
end;
end;
end.
New game window. Contains character name input window and start button.
var
Form2: TForm2;
Name:string;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var i:byte;
begin
Name:=Edit1.text;
for i:=1 to length(Name) do Main.CharName[i]:=Name[i];
Form2.Hide;
Unit3.Stage1;
end;
end.