Рейтинг@Mail.ru
Menu
Скачать картинки на телефон бесплатно.
Заставки для телефона, аватарки.
(Вырезать из фотографии)

Роза `Гренд Могул` Яхта `Алиса` Лесное озеро Музей `Пирогово` Белочка
Выберите рубрику (тему)

Тема: Внешний модуль

Программа 12

Образовать модуль образования и обработки произвольного вертикального меню с произвольными координатами в текстовом режиме

Текст модуля

unit menu;
interface
  uses crt;
  type TM=array [1..5] of string [10];
  procedure ramka(x,y,m,n,colt,colf:byte);
  procedure form_menu(menu:TM; x, y, n, colt, colf:byte);
  function move_menu(menu:TM; x, y, n, colt, colf:byte):byte;
implementation
  procedure ramka;
  var i:byte;
  begin
    window(x,y,x+m,y+n);
    textcolor(colt);
    textbackground(colf);
    clrscr;
    write(#201);
    for i:=1 to m-2 do
      write(#205);
  write(#187);
    for i:=2 to n-1 do begin
      gotoxy(1,i);write(#186);
      gotoxy(m,i);write(#186);
      end;
    gotoxy(1,n);write(#200);
    for i:=1 to m-2 do
      write(#205);
    write(#188);
  end;
  procedure form_menu;
  var i:byte;
  begin
    ramka(x,y,sizeof(menu[1])+2, n+2, colt, colf);
    gotoxy (2,2);
    highvideo;
    write(menu[1]);
    lowvideo;
    for i:=2 to n do begin
      gotoxy(2,i+1);
      write(menu[i]);
      end;
    gotoxy(2,2);
  end;
  function move_menu;
  var i:byte;c:char;
  begin
    form_menu(menu,x,y,n,colt,colf);
    i:=1;
    repeat
    c:=readkey;
    case c of
      #72: begin
        lowvideo;
        write(menu[i]);
        if i=1 then i:=n
          else i:=i-1;
        highvideo;
        gotoxy(2,i+1);
        write(menu[i]);
        gotoxy(2,i+1);
        end;
      #80: begin
        lowvideo;
        write(menu[i]);
        if i=n then i:=1
          else i:=i+1;
        highvideo;
        gotoxy(2,i+1);
        write(menu[i]);
        gotoxy(2,i+1);
        end;
    end;
    until (c=#13) or (c=#27);
    if c=#13 then move_menu:=i
      else move_menu:=n+1;
    end;
end.

Текст главной программы

program Prg12;
{ http://nataliya.kiev.ua }
uses crt,menu;
const menu1:TM=('Options','Help','About','Exit','');
    menu2:TM=('1','2','3','','');
type TProc=procedure;
    TAr=array[1..5] of TProc;
var A:TAr;
    maxX, maxY, x1, y1, sizeX, sizeY, i, j:byte;
    c:char;
    s:string;
{$F+}
procedure About;
var x1,y1,sizeX,sizeY,i,j:byte;
begin
  sizeX:=40;sizeY:=10;
  x1:=(maxX-sizeX)div 2;
  y1:=(maxy-sizey)div 2;
  ramka(x1,y1,sizeX,sizeY,white,red);
  window(x1+1,y1+1,x1+sizeX-1, y1+sizeY-1);
  writeln('Program № 12');
  writeln('Subject: Menu') ;
  readkey;
end;
procedure help;
var x1,y1,sizeX,sizeY,i,j:byte;
begin
  sizeX:=30;sizeY:=12;
  x1:=(maxX-sizeX)div 2;
  y1:=(maxy-sizey)div 2;
  ramka(x1,y1,sizeX,sizeY,white,red);
  window(x1+1,y1+1,x1+sizeX-1, y1+sizeY-1);
  writeln('Text');
  writeln('Text');
  readkey;
end;
procedure exit;
begin
clrscr;
halt;
end;
procedure options;
var x2,y2,sizeX,sizeY,i,j:byte;
begin
  form_menu(menu1, x1, y1, 4, white, blue);
  sizeX:=length(menu2[1]);sizeY:=5;
  x2:=(maxX+length(menu1[1]))div 2;
  y2:=y1+1;
  i:=move_menu(menu2, x2, y2, 3, white, blue);
  case i of
    1:begin
      ramka(30,10,20,10,blue,green);
      window(30+1,10+1,30+20-1,10+15-1);
      writeln('Option1');
      writeln('Text');
      readkey;
      end;
    2:begin
      ramka(20,10,15,10,black,white);
      window(20+1,10+1,20+15-1,10+10-1);
      writeln('Option2');
      writeln('Text');
      readkey;
      end;
    3:begin
      ramka(30,10,20,10,green,yellow);
      window(30+1,10+1,30+20-1,10+15-1);
      writeln('Option3');
      writeln('Text');
      readkey;
      end;
  end;
end;
begin
maxX:=lo(windmax);
maxY:=hi(windmax);
window(1,1,maxX,maxY);
textcolor(lightgray);
textbackground(0);
clrscr;
a[1]:=options;
a[2]:=help;
a[3]:=about;
a[4]:=exit;
a[5]:=exit;
repeat
textbackground(0);
x1:=(maxX-length(menu1[1]))div 2;
y1:=(maxY-4)div 2;
i:=move_menu(menu1, x1, y1, 4, white, blue);
textbackground(0);
window(1,1,maxX,maxY);
clrscr;
a[i];
window(1,1,maxX,maxY);
textbackground(0);
clrscr;
if keypressed then c:=readkey ;
until c=#27;
repeat until keypressed;
end.

Результат работы программы

1)
Внешний модуль.
Программа 12.
Образовать модуль образования и обработки произвольного вертикального меню с произвольными координатами в текстовом режиме.
Результат работы программы (1)

2)
Внешний модуль.
Программа 12.
Образовать модуль образования и обработки произвольного вертикального меню с произвольными координатами в текстовом режиме.
Результат работы программы (2)

Теория к программе

Внешний модуль
  Модуль - это программа, которая имеет специальную структуру, содержит свои внутренние описания и исполнительную часть, но сама организация работы модуля может быть скрытой, поскольку модуль распределяется на отдельные части, не все из которых являются доступными для пользователя.
  Структура модуля:
  UIN <идентификатор модуля>   {заголовок}
INTERFACE
[USES <список модулей>;]
{интерфейсная секция}
<открытые описания>;    
IMPLEMENTATION
[USES <список модулей>;]
{секция реализации}
<закрытые описания>;    
[begin <операторная часть>]   {секция инициализации}
end.    
  Подключение модулей к программе
    Выполняется с помощью строки USES непосредственно после заголовка.
    При этом становятся доступными интерфейсные("внешние") описания констант, переменных, процедур или функций этих модулей.
    Модуль SYSTEM.TPU подключается автоматически.
    Модуль что присоединяеться разыскивается компилятором:
      a) среди резидентных модулей, загруженных в память во время запуска компилятора из библиотеки TURBO.TPL
      b) в текущем каталоге
      c) в каталогах, предоставленных в списке каталогов файлов в меню
        options/directories/unit directories
    Здесь предоставляются пути поиска в формате DOS:
        \GRPH DI;\MY DI\OLD;\HELP;
    При подключении ряда модулей желательно выполнять правило:
      если один модуль использует другие, то в перечне их в строке uses этот модуль надо указывать после всех модулей, которые он использует, даже, когда они не используются явным образом главной программой.
      Если один и тот самый идентификатор встречается в разных модулях, то, поскольку они компилируются в очереди следования, возникает вложенная структура, такая, что каждый внутренний модуль отменяет назначение внешнего (как локальное описание по отношению к другим)
      Если надо получить значения, связанные с конкретным модулем, надо использовать квалификатор - имя модуля:
        <квалификатор>.<идентификатор>
  Косвенное использование модулей
    1. Если главная программа использует модуль, который, в свою очередь, обращается к другим модулям, их надо указывать в строке uses главной программы за определенным приоритетом.
      Пример
  program host;
uses unit1,unit2;
const a=b;
var b:ar;
begin
:
Writeln(f(b));
end.
  unit unit2
interface
uses unit1;
const b=c;
function f(a:ar):byte;
implementation
end.
  unit unit1
interface
const c=1;
type ar=array[1..100] of byte;
implementation
end.
    Использование строки uses в секции реализации модуля делает ссылку на другой модуль невидимым, но эта ссылка должно быть сделана перед его использованием.
      Пример
  program host;
uses unit1,unit2;
var и:integer;
begin
:
и:=b;
:
end.
  unit unit2;
interface
var b:integer;
implementation
uses unit1;
const d=c;
:
begin
b:=d;
end.
  unit unit1;
interface
const c=1;
implementation
end.
    Перекрестные ссылки на модуле
      Можно делать перекрестные ссылки, как правило, на процедуры или функции
  unit u1
interface
implementation
uses u2;
:
end.
  unit u2
interface
implementation
uses u1;
:
end.
    Такие перекрестные ссылки могут выполняться только в секции реализации, также надо следить, чтобы описания появлялись к их использованию. В этом случае интерфейсные секции могут быть скомпонованы по общему правилу (в примере - в любом порядке, поскольку интерфейсные секции не зависят одна от одной).
  Правила распределения программы на модуле
    1. Рекомендуется создавать отдельный модуль, который содержит все глобальные определения:
      константы, типы, переменные, поскольку для подключенных модулей описания в главной программе являются недосягаемыми. (Модулям достижимы их описания и описания модулей, что они вызывают, поэтому каждый из следующих модулей должен вызвать модуль с глобальными описаниями.
    2. Главным модулем как правило становится главная программа.
    3. В следующие модули выделяют подпрограммы, объединенные за логическим признаком. Выделенные в отдельный модуль подпрограммы не должны зависеть от программ в других модулях, иначе изменения в одном из методов вызывают изменения в других, от него зависимых, и, как следствие, их повторную компиляцию.
  Порядок компиляции
    Как главная программа, так и модули компилируются с помощью меню
      compile/compile
    После трансляции модули .TPU размещаются в каталоге, определенному
      options/directories/exe & TPU directory
    При образовании .EXE-файла соответствующие .TPU-файлы разыскиваются за описанным выше порядком в каталогах, определенных в
      options/directories/unit directories
    Когда в интерфейсную часть модуля вносятся изменения, то все модули, которые его используют, надо перекомпилировать. Если изменения касаются только секции реализации, то перекомпилируется только измененный модуль. При создании .EXE-файла с подключением внешних модулей можно использовать меню COMPILE:
      compile/primary file
    в том случае, если главная программа не находится в текущем окне редактирования. При этом открывается окно primary file Подокно Primary program file - задает имя главного файла, который надо откомпилировать с включением внешних модулей.
      Clear primary file - очищает это подокно.
    Дополнительно можно определить режим компиляции модулей, которые присоединяются:
      compile/make
      compile/buildv
  Compile/make - создает файл "EXE", при этом файлы компилируются в соответствии с правилами:
    1. Если compile/primary file содержит имя главного файла, он компилируется, иначе компилируется файл в текущем окне редактирования.
    2. Проверяются все файлы, от которых зависит главный, и, если исходные .PAS файлы имели изменения после создания соответствующих файлов .TPU, они перекомпилируются так же, как и зависимые от измененного модуля другие модули.
  Compile/build - перекомпиляция выполняется для всех модулей, которые вызываются главным, независимо от того, были или нет они измененные (компиляция не выполняется, если не найден соответствующий модуль с расширением .PAS).

Случайный анекдот

Американская школа для одаренных детей, 1970 год, урок информатики...
- А теперь, детки, какие програмки вы бы хотели написать, когда подрастете? Вот ты, Питер?
- Я бы написал такую крутую утилитку, которая бы быстро так лечила бы винчестер от ошибок!
- Молодец, Питер! А ты, Юджин?
- А я бы сделал такую программу, которая бы быстро и без глюков сжимала файлы!
- Умница, Юджин! А ты, Билли, чего молчишь?
- Ну, ничего-ничего!... Будет вам всем быстро, будет вам без глюков...
Дата: 10-12-2004   Автор: Admin   Подрубрика: Компьютеры и дети