Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2012, 01:30   #1
fanat94
 
Регистрация: 11.04.2012
Сообщений: 6
По умолчанию меню на Pascal

Тут одна проблема:
Не работают exe - файлы.
Заранее спасибо ...
Вот код:
Код:
program menu;
uses crt,dos,graph;
type stroka=array [1..3] of string[16];
const
item1:array[1..4]of string[15]=('‡*ў¤***п','Џа®Ја*¬*','„®Ї®¬®Ј*', '‚Ёеi¤');
item2:stroka=('‡*ў¤***п','Џа® *ўв®а*','Љ®¬Ї«ҐЄб*i зЁб«a');
item3:stroka=('Џа® Їа®Ја*¬г','‚ЁЄ®****п','');
item4:stroka=('„®Ї®¬®Ј*','Љ*«мЄг«пв®а','');
otstup=10;
var i,j:integer;
kol,gd,gm:integer;
key,vertkey:char;
metca,metca2:boolean;
name:string;
f:text;
procedure choose(a:integer);forward;
procedure clearvert(x1,y1,x2,y2:integer;colora:integer);forward;
procedure text(name:string;a:integer);forward;
procedure exe(name:string;a:integer);forward;
procedure active(j:integer);
begin
gotoxy((80 div kol)*j-otstup,1);
textcolor(red);
textbackground(green);
write(item1[j]);		end;
procedure deactive(j:integer);
begin
  gotoxy((80 div kol)*j-otstup,1);
  textcolor(black);   textbackground(lightgray);
  write(item1[j]);
end;
procedure mainmenu ( kol:integer);
var j:integer;
begin
  window(1,22,80,22);
  write('      ENTER-ўЁЎiа    ESC-бЄ*бгў***п  ',chr(26),' ',chr(27),' - ЇҐаҐ¬iйҐ**п Єгаб®а*');
metca:=true;
window(1,1,80,1); textbackground(lightgray);
clrscr;
for j:=1 to kol do
  begin
gotoxy((80 div kol)*j-otstup,1);
if j=1 then active(j)
else deactive(j);
end;
j:=1;
repeat
   key:=readkey;
if (key=#0) and keypressed
    then key:=readkey;
case key of
#77:  begin
    deactive(j);
    inc(j);
    if j=kol+1 then j:=1;
    active(j);
end;
#75: begin
    deactive(j);
    dec(j);
    if j<1 then j:=kol;
    active(j);
end;
#13: choose(j);
end;
until metca=false;
end;
procedure vertmenu(kol1:integer; mas:stroka; a:integer);
var j:integer; metca2:boolean;
procedure activevert(j:integer);
begin
   gotoxy(5,j*2-1);
   textcolor(red);   textbackground(green);
   write(mas[j]);
end;
procedure deactivevert(j:integer);
  begin
     gotoxy(5,j*2-1);
     textcolor(black);   textbackground(lightgray);
     write(mas[j]);
  end;
begin
  textbackground(lightgray); textcolor(black);
  window((80 div kol)*a-otstup,2,(80 div kol)*(a+1)-otstup,kol1*2);
clrscr;
for j:=1 to kol1 do
   begin
      if j=1 then activevert(j)
      else deactivevert(j);
    end;
j:=1; metca2:=true;
repeat
vertkey:=readkey;
 if vertkey=#0 then
      vertkey:=readkey;
 case vertkey of
 #80: begin
        deactivevert(J);
        inc(j);
if j=kol1+1 then j:=1; activevert(j);
	end;
#72:begin
  deactivevert(j);
       dec(j);
  if j<1 then j:=kol1; activevert(j);
end;
#27: begin
       clearvert((80 div kol)*a-otstup,2,(80 div kol)*(a+1)-otstup,kol*2,0);
   metca2:=false;
   end;
#13:begin
clearvert((80 div kol)*a-otstup,2,(80 div kol)*(a+1)-otstup,kol1*2,0);
case a of
1: begin
    case j of
    1: begin
         text('zavdan.pas',a); break;
         end;
    2: begin
        text('avtor.pas',a); break;
        end;
    3: begin
        text('komchisl.pas',a); break;
        end;
     end;
end;
   2: begin
        case j of
        1: begin
             text('kod_komplex.pas',a); break;
             end;
     2: begin
             exe('komplex.exe',a); break;
         end;
     end;
 end;
    3: begin
         case j of
         1: begin
          text('help.pas',a); break;
          end;
     2:begin
          exe('kalkylyator,exe',a); break;
          end;
          end;
end;
 end;
 end;
end;
until metca2=false;
end;
procedure choose(a:integer);
begin case a of
1:begin
vertmenu(3,item2,1);
            end;
         2:begin
              vertmenu(2,item3,2);
            end;
         3:begin
              vertmenu(2,item4,3);
            end;
         4:begin
             metca:=false;
             window(1,1,80,1);
             textbackground(0);    textcolor(15);
             clrscr; window(1,1,80,22);
             clrscr;
             end;
        end;
end;
procedure clearvert(x1,y1,x2,y2:integer;colora:integer);
begin
   textbackground(colora);
   window(x1,y1,x2,y2);
   clrscr;    window(1,1,80,25);
end;
procedure text(name:string;a:integer);
 var str:string;  l: Integer;

 begin
  window(1,1,80,1); deactive(a);
  assign(f,name);
  reset(f);
   I:=1;
   window(1,22,80,22);
   textcolor(15); textbackground(0);
   clrscr;
  write('     ENTER-ЇҐаҐЈ«п¤   ESC-ўi¤¬i** в* Ї®ўҐа*Ґ**п ў ¬Ґ*о') ;
window(1,3,80,21);
textbackground(1); textcolor(15);
   clrscr;
while not eof(f) do
   begin
  readln(f,str);


   gotoxy(1,5+l);   writeln(str);
   i:=i+1;
   if l=15 then
      begin
      if readkey=#27 then
         begin
           clrscr; break;
              end;
              l:=1;
              clrscr;
           end;
...
___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Вложения
Тип файла: rar menu_proga_fix.rar (55.8 Кб, 16 просмотров)

Последний раз редактировалось Serge_Bliznykov; 11.04.2012 в 09:57.
fanat94 вне форума Ответить с цитированием
Старый 11.04.2012, 09:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

начнём с того, что в KOMPLEX.EXE файле вирус!
Цитата:
обнаружено: вирус Virus.Win32.Neshta.a файл: http://www.programmersforum.ru/attac...4//komplex.exe
Выложил новый архив menu_proga_fix.rar - БЕЗ ВИРУСОВ!

кроме того, подправил пути к BGI файлам в kur_.pas и приложил файлик EGAVGA.BGI - без него графика в TurboPascal не работает.
Пробуйте.


И ЛЕЧИТЕ СВОЙ КОМП ОТ ВИРУСОВ!

Последний раз редактировалось Serge_Bliznykov; 11.04.2012 в 10:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2012, 01:02   #3
fanat94
 
Регистрация: 11.04.2012
Сообщений: 6
По умолчанию

когда выбираю пункт Калькулятор, то ошибка:
Изображения
Тип файла: jpg error menu.jpg (76.9 Кб, 125 просмотров)
fanat94 вне форума Ответить с цитированием
Старый 12.04.2012, 01:04   #4
fanat94
 
Регистрация: 11.04.2012
Сообщений: 6
По умолчанию

Не работают ехе файлы
fanat94 вне форума Ответить с цитированием
Старый 12.04.2012, 10:24   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, давайте называть вещи своими именами!
у вас не работает запуск EXE через функцию EXEC.
Почитать помощь по этой функции не пробовали?!
Там напрямую сказано, какая проблема может быть (и, кстати, у Вас именно такая проблема!)
как победить смотри указания по изменению кода ниже.

во-вторых, более громоздко и глючно написанного кода я уже давно не видел!
Просто оторопь берёт! Имхо, проще с нуля написать, чем всё это разгребать.
Поэтому изменения, которые я предлагаю сделать в коде - это КОСТЫЛИ!!

в-третьих, зачем запускать EXE файлы, если у Вас имеются исходники?!
Это принципиальный подход?! Ведь намного же лучше вызывать функции из нужных программ. Будет и эффективно и менее глючно (более надёжно)

в-чётвёртых, помните, что расширение в имени файла отделяется не запятой, а точкой. и имена файлов длинее восьми символов в DOS не поддерживаются! Это я про ваш "шедевр" exe('kalkylyator,exe',a)


теперь по изменениях (костылях) в коде.
Код:
в начале программы допишите такою строчку 
{$M 16384,0,16384}

...

в процедуре deactive добавьте строчку (выделил зелёным) 
procedure deactive(j:integer);
begin
  if j>kol then Exit;
  gotoxy((80 div kol)*j-otstup,1);
     textcolor(black);   textbackground(lightgray);
  write(item1[j]);
end;

...
в процедуре EXE добавьте строчки выдачи ошибки(выделил зелёным) 
   swapvectors;
   exec(name,'');
   if DosError<>0 then begin
      WriteLn('DosError = ',DosError);
      readkey;
   end;
   swapvectors;


замените вызов калькулятор - вместо того, что выделено красным добавьте то, что я выделил зелёным) 
        2:begin
           { exe('kalkylyator,exe',a); break; }
           exe('KALKULYA.EXE',a); break;
          end;


p.s. желаю успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2012, 22:30   #6
fanat94
 
Регистрация: 11.04.2012
Сообщений: 6
По умолчанию

спасибо большое!!!!
А с калькулятором никак?
Doserror = 2.
fanat94 вне форума Ответить с цитированием
Старый 12.04.2012, 22:44   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А с калькулятором никак?
Doserror = 2.
либо имя файла Вы всё таки умудрились неправильно написать, либо написанный файл отстутствует там, где лежит основной курсовик.EXE!

вот список ошибок DOS
Цитата:
Код:
 Error #                                Error #
 Hex Dec  Meaning                       Hex Dec  Meaning
-----------------------------------------------------------------------
 01H   1  Invalid function number       0aH  10  Invalid environment
 02H   2  File not found                0bH  11  Invalid format
 03H   3  Path not found                0cH  12  Invalid access code
 04H   4  Too many open files           0dH  13  Invalid data
 05H   5  Access denied                 0eH  14  (not used)
 06H   6  Invalid handle                0fH  15  Invalid drive specified
 07H   7  Memory ctrl blocks destroyed  10H  16  Can't remove current dir
 08H   8  Insufficient memory           11H  17  Not same device
 09H   9  Invalid memory block address  12H  18  No more matching files
ошибка 2 - файл не найден.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2012, 23:20   #8
fanat94
 
Регистрация: 11.04.2012
Сообщений: 6
По умолчанию

что-то калкулятор никак...

ВНИМАНИЕ! ВО ВЛОЖЕНИИ ВИРУС!
Вложения
Тип файла: rar моя курсова(fanat94).rar (121.5 Кб, 13 просмотров)

Последний раз редактировалось Serge_Bliznykov; 13.04.2012 в 00:19.
fanat94 вне форума Ответить с цитированием
Старый 13.04.2012, 00:20   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ЛЕЧИТЕ У СЕБЯ ВИРУСЫ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2012, 00:31   #10
fanat94
 
Регистрация: 11.04.2012
Сообщений: 6
По умолчанию

это из-за вирусов?
fanat94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
консольное меню в pascal VaLenOK007 Помощь студентам 8 26.09.2011 20:08
Создание меню в Pascal Real7 Помощь студентам 3 20.12.2009 16:28
Меню в ABC Pascal Desha Паскаль, Turbo Pascal, PascalABC.NET 0 23.11.2009 21:24
Pascal. Формирование меню. Arizonec Помощь студентам 0 10.12.2008 00:45