Показать полную графическую версию : паскаль задача с меню и открытием файла нужна помощь
DiGer911
11-11-2009, 17:03
нужно сделать программу чтобы при выборе строчки открывался файл с текстовой информацией.
я начал делать вот что получилось
uses crt;
type mas = array [1..9] of string[20];
const stor: mas = ('1','2','3','4','5','6','7','8','9' );
var i,k: byte;
kod: char;
begin
clrscr;
writeln(' название программы');
Kod:=' ';
while kod<>#27 do
begin
for i:=1 to 9 do begin
if I=K then begin
textbackground(1);
textcolor(0);
end
else begin
textbackground(0);
textcolor(15)
end;
gotoxy(1,i+1);
write(stor[i]);
end;
kod:=readkey;
if kod=#0 then
begin
kod:=readkey;
if kod=#72 then
if k>1 then k:=k-1 else k:=9;
if kod=#0 then
end;
end;
end.
c:=readkey;
if c=#80 then
begin
gotoXY(10,whereY-1);
write(s);
end;
if c=#72 then
begin
gotoXY(10,whereY+1);
write(s);
end;
нужно связать это меню с текстовыми файлами,хотябы помогите чтобы прога реагировала на нажатие клавиши enter при выборе строчки
DiGer911. Я тут вашему коду некую читаемость придал.
Расставьте пожалуйста комментарии к программе.
В частности - какой end; что закрывает.
Какой скан код, к какой кнопке относится.
Напишите логику ее работы.
uses crt;
type
mas = array [1..9] of string[20];
const
stor: mas = ('1','2','3','4','5','6','7','8','9' );
var
i,k: byte;
kod: char;
begin
clrscr;
writeln(' название программы');
Kod:=' ';
while kod<>#27 do
begin
for i:=1 to 9 do
begin
if I=K then
begin
textbackground(1);
textcolor(0);
end
else
begin
textbackground(0);
textcolor(15)
end;
gotoxy(1,i+1);
write(stor[i]);
end;
kod:=readkey;
if kod=#0 then
begin
kod:=readkey;
if kod=#72 then
if k>1 then
k:=k-1
else
k:=9;
if kod=#0 then
end;
end;
end.
c:=readkey;
if c=#80 then
begin
gotoXY(10,whereY-1);
write(s);
end;
if c=#72 then
begin
gotoXY(10,whereY+1);
write(s);
end;
Вместо множественных if _ then используйте конструкцию case _ of.
DiGer911
11-11-2009, 18:43
type mas = array [1..9] of string[20];
const stor: mas = ('1','2','3','4','5','6','7','8','9' );
var
i,k: byte;
n,kod: char;
begin
clrscr;
writeln(' название ');
Kod:=' ';
while kod<>#27 do
begin
for i:=1 to 9 do
begin
if I=K then begin
textbackground(5);
textcolor(0);
end
else
begin
textbackground(0);
textcolor(15)
end;
gotoxy(1,i+1);
write(stor[i]);
end;
kod:=readkey;{передвижение клавишей вверх}
if kod=#0 then
begin
kod:=readkey;
if kod=#72 then
if k>1 then k:=k-1 else k:=9;
if kod=#27 then
end;
kod:=readkey;
if kod=#0 then
begin
kod:=readkey;{передвижение клавишей вниз}
if kod=#80 then
if k>1 then k:=k+1 else k:=k-1;
if kod=#27 then
end;
end;
end.
вот обновил немного код,пока что работает только перемещение,т.е перемещение для выбора нужной строчки,но тоже с проблемами,только снизу вверх и нужно нажимать 2раза на клавишу вверх или вниз.проверьте в паскале сами поймете что к чему.
я сам с трудом понимаю как работает,т.к взял половину изходника из другой задачи,но решить както это надо!нам это ничего непреподавали а сделать надо!вот и хожу по форумам
помогите чем можете пожалуста
сейчас оттрассировать не успею. В воскресенье в лучшем случае.
DiGer911
11-11-2009, 20:14
люди,переделал прогу!теперь проблема в том что неоткрывает файл!никаких ошибок невыдает!а содержимое непоказывает!
текстовый файл создал но хз в чем проблема!помогите блин завтра надо сдать
Uses CRT;
Const MaxMenuItem = 4;
Var Ret : Byte;
f: text;
s: string;
Function MainMenu(R_Select:Byte):Byte;
Type TMenu = record
X,Y : Byte;
S : String[20];
End;
Var
Menu : Array [0..MaxMenuItem] Of TMenu;
Run : Boolean; {ўлЎа** Їг*Єв ¬Ґ*о}
Sel : Byte;
TC, TB : Byte; {color}
Procedure DrawMenu;
Var I : Byte;
Begin
For I := 0 To MaxMenuItem Do
Begin
GotoXY(Menu[I].X, Menu[I].Y);
Write(Menu[I].S);
End;
End;
Procedure Select (I:Byte);
Begin
TextBackground(TC); TextColor(TB);
GotoXY(Menu[I].X, Menu[I].Y);
Write(Menu[I].S);
TextBackground(TB); TextColor(TC);
End;
Procedure DeSelect (I:Byte);
Begin
GotoXY(Menu[I].X, Menu[I].Y);
Write(Menu[I].S);
End;
Begin
Menu[0].S := 'item 0'; Menu[0].X := 5; Menu[0].Y := 4;
Menu[1].S := 'item 1'; Menu[1].X := 5; Menu[1].Y := 5;
Menu[2].S := 'item 2'; Menu[2].X := 5; Menu[2].Y := 6;
Menu[3].S := 'item 3'; Menu[3].X := 5; Menu[3].Y := 7;
Menu[4].S := ' exit '; Menu[4].X := 5; Menu[4].Y := 8;
ClrScr;
TC := TextAttr mod 16;
TB := TextAttr div 16;
DrawMenu;
Sel := R_Select;
Select(Sel);
Run := False;
While Not Run Do Begin
Case ReadKey Of
#13 : Run := True;
#27 : Begin
Run := True;
Sel := MaxMenuItem;
End;
#0 : Case ReadKey Of
#72 : Begin
DeSelect(Sel);
If Sel = 0
Then Sel := MaxMenuItem
Else Sel := Sel - 1;
Select(Sel);
End;
#80 : Begin
DeSelect(Sel);
If Sel = MaxMenuItem
Then Sel := 0
Else Sel := Sel + 1;
Select(Sel);
End;
End;
End;
End;
MainMenu := Sel;
ClrScr;
End;
Begin
ClrScr;
Ret := 0;
Repeat
Ret := MainMenu(Ret);
Case Ret Of
0: Begin
WriteLn('‚лЎа** Їг*Єв: ', Ret);
assign(f,'c:\A.txt');
reset(f);
close(f);
ReadLn;
End;
1: Begin
WriteLn('‚лЎа** Їг*Єв: ', Ret);
ReadLn;
End;
2: Begin
WriteLn('‚лЎа** Їг*Єв: ', Ret);
ReadLn;
End;
3: Begin
WriteLn('‚лЎа** Їг*Єв: ', Ret);
ReadLn;
End;
Else Begin
WriteLn('‚л室 Ё§ Їа®Ја*¬¬л');
ReadLn;
End;
End; {case Ret}
Until Ret = MaxMenuItem;
End.
var
f: text;
s: string;
begin
assign(f,'filename');
reset(f);
readln(f,s);
close(f);
end;
assign(f,'c:\A.txt'); reset(f); close(f); »
а почему он должен что-то показать - ты его открываешь и тут же закрываешь ничего не сделав.
DiGer911
11-11-2009, 21:45
Alan85,
да,я уже понял в чем ошибка=)ступил я=)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.