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

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

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

Программирование на Паскале
Программа 12

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


Текст модуля


unit menu;



{ http://nataliya.kiev.ua/?id=112 }



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.

Print

Печатать текст программы!

(unit menu;)

Source code: «Внешний модуль».

Редактировать, копировать

(WYSIWYG редактор «NicEdit»)
Загрузить файл с текстом программы: «Внешний модуль». Печатать текст программы!

Загрузить файл с текстом программы

(menu.pas - Windows-1251)


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


program Prg12;



{ http://nataliya.kiev.ua/?id=112 }



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.

Print

Печатать текст программы!

(program Prg12;)

Source code: «Внешний модуль».

Редактировать, копировать

(WYSIWYG редактор «NicEdit»)
Загрузить файл с текстом программы: «Внешний модуль». Печатать текст программы!

Загрузить файл с текстом программы

(Prg12.pas - Windows-1251)

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


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).


Дата: 2007-12-08   Автор: Admin
Случайный анекдот

В школе вопрос учителя:
- так что же, дети, находится на краю земного диска?
- бyтсектоp, ясное дело.
Дата: 15-12-2004   Автор: Admin   Подрубрика: Компьютеры и дети