МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Языки и технологии программирования

    значения корней системы уравнений, решаемой программой. Числа могут быть

    как с дробной частью так и без неё.

    В качестве выходных данных программа выдает на стандартное устройство

    вывода информации пару чисел, представляющих собой истинное решение системы

    уравнений в вещественной форме. В случае если количество знаков после

    десятичной точки велико, то вывод производится в экспоненциальной форме.

    Часть вторая.

    Демонстрационная программа графических функций языка С++.

    Общие сведения. Данная программа разработана как учебная и в силу

    этого не имеет кодового обозначения предусмотренного ГОСТом 19.402-78 и

    представляет собой исполняемый файл grafika.exe и файлов поддержки:

    Таблица 1.

    |Egavga.bgi |библиотека взаимодействия с |

    | |графическим адаптером |

    |bold.chr |библиотека жирного шрифта |

    |euro.chr |библиотека шрифта «euro» |

    |goth.chr |библиотека готического шрифта |

    |lcom.chr |библиотека шрифта типа |

    | |«Комплекс» |

    |litt.chr |библиотека шрифта типа «small» |

    |sans.chr |библиотека шрифта типа |

    | |«Сан_сериф» |

    |scri.chr |библиотека шрифта типа «Скрипт» |

    |simp.chr |библиотека шрифта типа |

    | |«Симплекс» |

    |trip.chr |библиотека шрифта типа |

    | |«Триплекс» |

    |tscr.chr |библиотека шрифта тапа |

    | |«Триплекс_Скрипт» |

    Вышеприведенные файлы необходимо разместить в той же директории, что и

    основной модуль.

    Для функционирования программы необходима операционная система MS DOS

    3.30 и выше или полностью совместимой с ней.

    Исходный текст программы написан на языке программирования высокого

    уровня С++ фирмы Borland версии 3.1 для DOS и WINDOWS и содержится в файле

    grafika.срр в форме пригодной к использованию его как текстового документа

    в среде ДОС. Исходный текст программы приведен в приложении 2.

    Функциональное назначение. Программа предназначена для демонстрации

    основных графических возможностей языка С++ в режиме VGA. Программа дает

    представление о структуре графических возможностей языка и способах их

    применения на практике. Функциональным ограничением программы является

    невозможность её эксплуатации на компьютерах, оснащенных видеоадаптерами,

    стандарт которых отличается от EGA-VGA.

    Описание логической структуры. Программа не несет в себе единого

    алгоритма в привычном понимании и поэтому блок-схема не приводится. Методы,

    использованные при написании программы, не являются математическими или

    прочими стандартными и будут описаны ниже при описании соответствующих

    функций.

    Структурно программа grafika.срр представляет ряд функций, которые

    кратко описаны в таблице.2

    Таблица.2

    |наименование | |

    |функции в |краткое описание |

    |программе | |

    |main |главная функция из которой вызываются все другие |

    | |функции |

    |demoline |функция демонстрации рисования линий с |

    | |применением оператора lineto различными цветами |

    |democircle |функция демонстрации рисования окружностей |

    | |произвольного радиуса с произвольным выбором |

    | |цвета и координат центра |

    |demopix |функция рисования точек в произвольном месте |

    | |экрана с произвольным цветом |

    |demopieslice |функция рисования закрашенных секторов с |

    | |произвольным расположением на экране, |

    | |произвольным выбором угла, радиуса, стиля |

    | |заполнения и цвета |

    |demotext |функция демонстрации вывода текстовых данных в |

    | |графическом режиме всеми доступными в языке С++ |

    | |стандартными способами и шрифтами c применением |

    | |библиотек шрифтов, перечисленных в таблице.1 |

    |mainwindow |функция формирования на экране графического окна |

    | |с указанным заголовком *header |

    |drawborder |функция прорисовки границ графического экрана |

    |statusline |функция формирования статусной строки с выводом |

    | |сообщения *msg |

    |demoarcs |функция вывода на экран дуг (частей окружностей) |

    | |с произвольным начальным углом, цветом и |

    | |координатами центра |

    |demobars |функция вывода на экран определенного числа |

    | |одинаковых прямоугольников с произвольно |

    | |изменяющимся цветом |

    |demo3dbars |функция демонстрации вывода на экран |

    | |прямоугольных параллелепипедов произвольного |

    | |размера, способа заполнения передней грани, и |

    | |цвета, а так же расположения на экране |

    |diagram |функция демонстрации практического применения |

    | |функции void pieslice(...) языка С++ для |

    | |построения круговой диаграммы по заданным |

    | |параметрам |

    |endpage |функция демонстрации практического применения |

    | |рисования линий и секторов с циклически |

    | |изменяющимися параметрами |

    |endpage1 |функция практического применения операторов языка|

    | |С++ для построения простого калейдоскопа |

    |endpage2 |завершающая страница, сообщающая пользователю о |

    | |завершении работы программы |

    Кроме функций mainwindow и statusline все остальные функции не имеют

    входных и выходных параметров. Функция mainwindow в качестве параметра

    использует символьную строку передаваемую ей вызывающей функцией, также

    действует и функция statusline. Все функции вывода изображения кроме

    mainwindow, statusline, drawborder вызываются из главной функции по

    порядку, а вышеперечисленные вызываются из функций вывода изображения.

    Каждая функция вывода изображения вызывает функцию формирования

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

    границы экрана при помощи функции drawborder и помещает в нижнюю часть

    экрана статусную строку при помощи функции statusline с необходимой

    надписью. Затем начинается процесс вывода на экран самого изображения,

    демонстрирующего работу той или иной графической функции языка С++. После

    прекращения работы управление переходит в главную функцию, откуда

    вызывается следующая функция вывода изображения.

    В процессе работы программа использует файлы, приведенные в таблице.1

    и в случае их отсутствия или недоступности функционирование программы будет

    не полным (библиотеки шрифтов) или полностью невозможным (библиотека

    взаимодействия с видеоадаптером).

    Используемые технические средства. Для правильного функционирования

    программы необходимо применять следующие компоненты аппаратного комплекса:

    персональный компьютер класса Ix86 с 640Кб ОЗУ, оснащенный одним

    накопителем на гибком магнитном диске 720Кб или накопителем типа

    «винчестер», а так же видеоадаптером EGA или VGA

    (предпочтительно).Компьютер рекомендуется оснастить видеомонитором,

    соответствующим видеоадаптеру.

    Вызов и загрузка. Для правильного функционирования программы

    необходимо разместить основной модуль и сопутствующие файлы в одной

    директории. Для вызова программы необходимо в командой строке ДОС набрать

    полное имя основного модуля. Никаких параметров в командной строке не

    требуется.

    Входные и выходные данные. Данная программа является демонстрационной

    и не использует входных данных от пользователя. Выходными данными являются

    результаты работы функций по выводу изображений на экран. Параметры

    изображения сохраняются только на экране в процессе работы программы

    (данной функции).

    Часть третья

    Программа электронной записной книжки

    Общие сведения. Данная программа разработана как учебная и в силу этого не

    имеет кодового обозначения предусмотренного ГОСТом 19.402-78 и представляет

    собой исполняемый файл notebook.exe и создаваемые ею в процессе работы

    файлы данных пользователя, структура которых приводится в приложении 3.

    Для функционирования программы необходима операционная система MS DOS

    3.30 и выше или полностью совместимой с ней.

    Исходный текст программы написан на языке программирования высокого

    уровня Турбо Паскаль версии 7.0 фирмы Borland для DOS и WINDOWS с

    применением библиотеки Turbo Vision и содержится в файле notebook.pas в

    форме пригодной к использованию его как текстового документа в среде ДОС, и

    приведен в приложении 3.

    Функциональное назначение. Данная программа предназначена для ведения

    файлов баз данных подобных страницам адресной записной книжки и способна

    полностью заменить собой ее бумажных предшественников. Информация из файлов

    программы применяется только в «электронном» варианте и не может быть

    выведена на устройство печати (данная функция в программе отсутствует). В

    процессе работы программа создает файл данных и поэтому пользователю не

    требуется предварительно создавать его самому.

    Описание логической структуры. Программа не несет в себе

    определенного алгоритма в стандартном понимании, а является объектно-

    ориентированной программой (применены специфические конструкции языка -

    объекты).

    В силу сложившихся традиций и особенностей языка Турбо Паскаль данная

    программа представляет собой ряд процедур, выполняющих определенную роль и

    взаимодействующих между собой в рамках исполнительного модуля. Каждая

    функция выполняет определенное действие исходя из параметров полученных от

    других функций или от пользователя.

    Основной текст программы можно разделить на две части: первая - описание

    переменных и объектов; вторая - реализация процедур. Ниже в таблице 3

    приводятся процедуры, применяемые в программе, а в таблице 4 - объекты.

    Таблица 3

    |tdlgwin.handleEvent | |

    |Tnotebook.FileOpen |открывает файл данных |

    |Tnotebook.FileSave |сохраняет файл данных |

    |Tnotebook.ChangeDir |изменяет текущий каталог |

    |Tnotebook.DOSCall |временный выход в ДОС |

    |Tinterior.ReadFile |читает содержимое файла данных в массив |

    | |LINES |

    |Tinterior.Draw |выводит данные в окно просмотра |

    |Control |получает команду из основного диалогового|

    | |окна |

    |Tinterior.HandleEvent |основная процедура обработки событий и |

    | |операций с файлом данных |

    |DEleteItem |удаляет указанный в Location элемент |

    | |данных |

    |AddItem |добавляет новый или редактирует имеющийся|

    | |элемент данных |

    |SearchItem |осуществляет поиск необходимого элемента |

    | |данных по контексту (первые символы) |

    |Tnotebook.Work |создает окно, в которое в последствии |

    | |будут выводиться данные |

    |Tnotebook.HandleEvent |обработчик событий программы связанных с |

    | |различными объектами |

    |Tnootebook.InitMenuBar |создание верхнего Bar-меню |

    |Tnotebook.InitStatusLin|формирование строки статуса |

    |e | |

    таблица 4.

    |Tworkwin |объект-потомок от Twindow - стандартного |

    | |объекта ТурбоВижн создает рамочное окно с|

    | |полосами прокрутки для управления |

    | |встроенным в него объектом Tinterior |

    |Tdlgwin |объект-потомок от Tdialog - стандартного |

    | |объекта ТурбоВижн создает диалоговое окно|

    | |для выбора режима работы |

    |Tinterior |объект-потомок от Tscroller - |

    | |стандартного объекта ТурбоВижн |

    | |обуславливает внутреннюю часть рамочного |

    | |окна Tworkwin, создает прокручиваемое |

    | |окно с записями из файла данных и с |

    | |помощью диалогового окна Tdlgwin |

    | |управляет работой с этими записями |

    |Tnotebook |оъект-потомок от Taplication стандартного|

    | |объекта ТурбоВижн обеспечивающего внешний|

    | |вид прикладной программы. |

    Используемые технические средства. Для правильного функционирования

    программы необходимо применять следующие компоненты аппаратного комплекса:

    персональный компьютер класса Ix86 с 640Кб ОЗУ, оснащенный одним

    накопителем на гибком магнитном диске 720Кб или накопителем типа

    «винчестер», а так же видеоадаптером EGA или VGA

    (предпочтительно).Компьютер рекомендуется оснастить видеомонитором,

    соответствующим видеоадаптеру.

    Вызов и загрузка. Для вызова программы необходимо в командой строке

    ДОС набрать полное имя основного модуля. Никаких параметров в командной

    строке не требуется.

    Входные и выходные данные. Входными и выходными данными для программы

    является файл (файлы) данных пользователя и выводит информацию,

    содержащуюся в них на экран дисплея.

    Приложения

    приложение 1

    #include

    #include

    //описание переменных, используемых в программе

    double pi=3.14,a=1.8,b=-2.0,c=0.1,d=1.6,e=0.9,eps=0.000001;

    int i=0;

    double x,y;

    //описания функций решения методами Ньютона и простых итераций

    extern double newton(double xn,double yn);

    extern double iterac(double xn,double yn);

    int main(void)

    {

    //запрос начального приближения у пользователя

    scanf("%f",&x);

    scanf("%f",&y);

    //вывод результатов через вызовы функций на экран

    printf ("Окончательное решение по методу Ньютона\n");

    printf ("%g\t%g\n", newton(x,y));

    printf ("Окончательное решение по методу итераций\n");

    printf ("%g\t%g\n", iterac(x,y));

    return (0);

    }

    //функция решения системы уравнений методом ньютона

    double newton(double xn,double yn)

    {

    double f1,f2,xxn,yyn;

    double df1dx,df1dy,df2dx,df2dy,dxy;

    do

    df1dy=b;

    while (1);

    b: return (xxn,yyn);

    }

    //решение системы уравнений методом простых итераций

    double iterac(double xi, double yi)

    {

    double xxi,yyi;

    do

    //явное выражение переменной x

    while(1);

    c: return (xxi,yyi);

    }

    Приложение 2

    //

    #include

    #include

    #include

    #include

    #include

    #include

    #define NFONTS 11

    char *Fonts[NFONTS] = {

    "Default_Font", "Triplex_Font", "Small_Font",

    "SansSerif_Font", "Gothic_Font", "Script_Font", "Simplex_Font",

    "TriplexScript_Font",

    "Complex_Font", "European_Font", "Bold_Font"

    };

    int xmax,ymax,i=0,MaxColors;

    //

    //прототипы функций

    //

    void demoline(void);

    void democircle(void);

    void demopix(void);

    void demopieslice(void);

    void demotext (void);

    void MainWindow(char *header);

    void DrawBorder(void);

    void StatusLine(char *msg);

    void demoarcs(void);

    void demobars(void);

    void demo3dbars(void);

    void diagram(void);

    void endpage(void);

    void endpage1(void);

    void endpage2(void);

    //

    //начало главной функции

    //

    int main(void)

    {

    /* автоматическое определение типа видеоадаптера */

    int gdriver = DETECT, gmode, errorcode;

    char msg[80];

    // инициализация графических и локальных переменных

    initgraph(&gdriver, &gmode, "");

    xmax=getmaxx();

    ymax=getmaxy();

    // проверка результатов инициализации

    errorcode = graphresult();

    if (errorcode != grOk)

    {

    printf("Graphics error: %s\n", grapherrormsg(errorcode));

    printf("Press any key to halt:");

    getch();

    exit(1);

    }

    //вызовы функций

    demoline();

    demopix();

    demobars();

    demo3dbars();

    demopieslice();

    diagram();

    democircle();

    demoarcs();

    demotext();

    endpage();

    endpage1();

    endpage2();

    cleardevice();

    closegraph();

    return 0;

    }

    //

    //функция демонстрации линий

    //

    void demoline(void)

    {

    //формирование графического окна и статусной строки

    MainWindow( "Line demonstration" );

    StatusLine( "Press any key to continue..." );

    //процесс рисования линий

    do

    {

    setcolor( random( MaxColors - random(15) ) + random(15) );

    lineto (xmax,i);

    lineto (xmax,ymax);

    lineto (i,ymax);

    lineto (i+1,i+1);

    i=i+1;xmax=xmax-1;ymax=ymax-1;

    }

    while (xmax!=(xmax/2));

    getch();

    cleardevice();

    clearviewport();

    }

    //

    //функция демонстрации окружностей

    //

    void democircle(void)

    //xmax=getmaxx();

    //ymax=getmaxy();

    {

    MainWindow( "Circle demonstration" );

    StatusLine( "Press any key to continue..." );

    randomize();

    moveto(random(xmax),random(ymax));

    do

    {

    i++;

    //установка случайного цвета

    setcolor( random( MaxColors - random(15) ) + random(15) );

    circle(random(getmaxx()),random(getmaxy()),random(100));

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    getch();

    clearviewport();

    i=1;

    do

    {

    i++;

    setcolor( random( MaxColors - random(15) ) + random(15) );

    circle(getmaxx()/2,getmaxy()/2,i);

    if (i==400)

    {setcolor(0);

    do

    {i--;circle(getmaxx()/2,getmaxy()/2,i);}

    while(i!=0);}

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    getch();

    cleardevice();

    }

    //

    //функция демонстрации рисования точек в произвольном //порядке

    //

    void demopix(void)

    {

    MainWindow( "Pix demonstration" );

    StatusLine( "Press any key to continue..." );

    do

    {

    i++;

    setcolor( random( MaxColors - random(15) ) + random(15) );

    putpixel(random(getmaxx()),random(getmaxy()),random(15));

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    xmax=getmaxx();

    ymax=getmaxy();

    getch();

    cleardevice();

    }

    //

    //функция демонстрации рисования секторов

    //

    void demopieslice(void)

    {

    MainWindow( "Pie Chart Demonstration" );

    StatusLine( "Press any key to continue..." );

    do

    {

    i++;

    setcolor(random( MaxColors - random(15) ) + random(15));

    setfillstyle(random(12), getmaxcolor());

    // setcolor(random( MaxColors - random(15) ) + random(15));

    pieslice(random(getmaxx()),random(getmaxy()),

    random(360),random(360),random(150));

    if(i>1000) {clearviewport();i=0;}

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    getch();

    clearviewport();

    }

    //

    //круговая диаграмма

    //

    void diagram(void)

    {

    int sektors[] = {20,10,35,15,20};

    char *percent[]={"20%","10%","35%","15%","20%"};

    int secsize,k=0,i,r=150;

    MainWindow( "Pie Chart Demonstration" );

    StatusLine( "Press any key to continue..." );

    settextjustify(CENTER_TEXT,CENTER_TEXT);

    settextstyle(5,0,2);//установка атрибутов текста

    outtextxy( getmaxx()/2,25,"This is the pie chart diagramm");

    //процесс рисования диаграммы по данным из массива

    for( i=0;i10000) {clearviewport();i=0;}

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    getch();

    clearviewport();

    i=0;

    //рисование многоугольников с произвольным цветом

    do

    {

    i++;

    poly[0] = random(i+random(20));//1-вершина

    poly[1] = random(random(ymax)/i+2);

    poly[2] = xmax-(i+20); /* 2-я */

    poly[3] = i+20;

    poly[4] = xmax-(i+50); /* 3-я */

    poly[5] = ymax-(i+20);

    poly[6] = i+xmax/2; /* 4-я */

    poly[7] = i+ymax/2;

    /*

    drawpoly автоматически не закрывает многоугольник

    поэтому необходимо это сделать самому

    */

    poly[8] = poly[0];

    poly[9] = poly[1];

    //рисует многоугольники, изменяя координаты вершин

    setcolor(random( MaxColors - random(15) ) + random(15));

    drawpoly(5, poly);

    if(i>1000) {clearviewport();i=0;}

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    getch();

    clearviewport();

    }

    //

    //функция демонстрации закрашеных многоугольников и //цветов

    //

    void demobars(void)

    {

    MainWindow( "Bars and colors demonstration" );

    StatusLine( "Press any key to continue..." );

    int kxb=15,kyb=15;

    double stx,sty,x,y;

    stx=floor(getmaxx()/kxb);

    sty=floor(getmaxy()/kyb);

    do

    {

    for(x=3;x100) {clearviewport();i=0;}

    }

    while( !kbhit() ); // повторение пока не нажата клавиша

    getch();

    clearviewport();

    }

    //

    //функция создания завершающей страницы

    //

    void endpage(void)

    {

    MainWindow( "The cycle" );

    StatusLine( "Press any key to continue..." );

    int i,j,rad=50;

    do

    {

    for (i=0;i 0 then

    Rewrite(Datafile);

    OpFileF := IOResult=0;

    {$I+}

    if OpFileF then

    begin

    DisableCommands(WinCom2);

    EnableCommands(WinCom1);

    Work {переход к работе}

    end

    end;

    end; {caseControl}

    Dispose(PF, Done) {уничтожение экземпляра}

    end; {FileOpen}

    {---------------------------}

    procedure TNotebook.FileSave;

    {закрывает файл данных}

    begin

    Close(DataFile);

    OpFileF :=False;

    EnableCommands(WinCom2); {разрешение открыть файл}

    DisableCommands(WinCom1) {запрещение работы и сохранение}

    end; {TNotebook.FileSave}

    {--------------------------}

    procedure TNotebook.ChangeDir;

    {изменяет текущий каталог}

    var

    PD: PChDirDialog; {диалоговое окно смены каталога диска}

    Control: Word;

    begin

    New(PD, Init(cdNormal,0)); {создание диалогового окна}

    Control :=DeskTop^.ExecView(PD); {использование окна}

    ChDir(PD^.DirInput^.Data^); {установка нового каталога}

    Dispose(PD, Done) {удаление окна из кучи}

    end; {TNotebook.ChangeDir}

    {-------------------------}

    procedure TNotebook.DOSCall;

    {временный выход в дос}

    const

    txt='Для возврата введите EXIT в ответ'+

    'на приглашение ДОС...';

    begin

    DoneEvents; {закрыть обработчик событий}

    DoneVideo; {закрыть монитор экрана}

    DoneMemory; {закрыть монитор памяти}

    SetMemTop(HeapPtr); {освободить кучу}

    writeln('Введите EXIT для возврата'); {выдать сообщение о

    выходе}

    SwapVectors; {установить стандартные векторы}

    {передать упр. ком. процессору дос}

    Exec(GetEnv('COMSPEC'),'');

    {возврат из дос}

    SwapVectors; {восстановить векторы}

    SetMemTop(HeapEnd); {восстановить кучу}

    InitMemory; {открыть монитор памяти}

    InitVideo; {открыть монитор экрана}

    InitEvents; {открыть обработчик событий}

    InitSysError; {открыть обработчик ошибок}

    Redraw {восстановить вид экрана}

    end; {DOSCall}

    {------------------------------}

    constructor TInterior.Init;

    {создает окно скроллера}

    begin

    TScroller.Init(Bounds, HS, VS);

    ReadFile;

    GrowMode :=gfGrowHiX+gfGrowHiY;

    SetLimit(LLine, PS^.Count)

    end;

    {-----------------------}

    destructor TInterior.Done;

    begin

    Dispose(PS,Done);

    inherited Done

    end;

    {--------------------------}

    procedure TInterior.ReadFile;

    {читает содержимое файла данных в массив LINES}

    var

    k: Integer;

    s: String;

    Data: DataType;

    f: text;

    begin

    PS:= New(PStringCollection, Init(100,10));

    seek(DataFile,0);

    while not (EOF(DataFile) or LowMemory) do

    begin

    Read(DataFile, data);

    with data do

    begin

    s:= Name;

    while Length(s) < Lname do

    s:= s+' ';

    s:= s+Phone;

    while Length(s) < LName+LPhone do

    s:= s+' ';

    s:= s+Addr

    end;

    if s<>'' then PS^.Insert(NewStr(S))

    end;

    Location:= 0;

    end; {ReadFile}

    {----------------------------}

    procedure Tinterior.Draw;

    {выводит данные в окно просмотра}

    var

    n, {текущая строка экрана}

    k: integer; {текущая строка массива}

    B: TDrawBuffer;

    Color: Byte;

    p: PString;

    begin

    if Delta.Y>Location then

    Location:= Delta.Y;

    if Location>Delta.Y+pred(Size.Y) then

    Location:= Delta.Y+pred(Size.Y);

    for n:= 0 to pred(Size.Y) do

    {Size.Y- кол-во строк окна}

    begin

    k:= Delta.Y+n;

    if k=Location then

    Color:= GetColor(2)

    else

    Color:= GetColor(1);

    MoveChar(B,' ',Color,Size.X);

    if kPS^.Count then

    write(DataFile,Data) {да - добавляем в файл}

    end

    until Edit or (Control=cmCancel);

    Draw

    end; {AddItem}

    {--------------------}

    procedure SearchItem;

    {ищет нужный элемент }

    function UpString(s: String): string;

    {преобразует строку в верхний регистр}

    var

    k: Integer;

    begin

    for k:=1 to Length(s) do

    if s[k] in ['a'..'z'] then

    s[k]:=chr(ord('A')+ord(s[k])-ord('a'))

    else if s[k] in ['а'..'п'] then

    s[k]:=chr(ord('A')+ord(s[k])-ord('a'))

    else if s[k] in ['р'..'я'] then

    s[k]:=chr(ord('P')+ord(s[k])-ord('p'));

    UpString:=s

    end; {UpString}

    var

    InWin: PDialog;

    R: TRect;

    s: String;

    p: PInputLine;

    k: Word;

    begin {SearchItem}

    R.Assign(15,8,65,16);

    InWin:=New(PDialog,

    Init(R,'Поиск записи:'));

    with InWin^ do

    begin

    R.Assign(2,2,47,3);

    p:=New(PInputLine,Init(R,50));

    Insert(p);

    R.Assign(1,1,40,2);

    Insert(New(PLabel, Init(R, 'Введите образец поиска:',p)));

    R.Assign(10,5,20,7);

    Insert(New(PButton,Init(R,'Ввести',cmOK,bfDefault)));

    R.Assign(25,5,35,7);

    Insert(New(PButton,Init(R,'Выход',cmCancel,bfNormal)));

    SelectNext(False)

    end;

    if DeskTop^.ExecView(InWin)=cmCancel then

    exit;

    s:=p^.Data^;

    Location:=0;

    while (UpString(s)>=UpString(PString(PS^.At(Location))^))

    and (Location

    inc(Location);

    if (Location

    ScrollTo(Delta.X,Location)

    else

    Draw

    end; {SearchItem}

    {------------------------}

    var

    R: TPoint;

    label Cls;

    begin

    TScroller.HandleEvent(Event);

    case Event.What of

    evCommand:

    case Event.Command of

    cmClose:

    begin

    Cls:

    case Control of {получить команду из основного диалогового окна}

    cmCan,

    cmCancel: EndModal(cmCancel);

    cmEdit: AddItem(True);

    cmDelete: DeleteItem;

    cmSearch: SearchItem;

    cmAdd: AddItem(False);

    end

    end;

    cmZoom: exit;

    end;

    evMouseDown: {реакция на щелчок мыши}

    begin

    MakeLocal(MouseWhere, R); {получение в R локальные

    координаты мыши}

    Location:=Delta.Y+R.Y;

    Draw

    end;

    evKeyDown: {реакция на клавиши + -}

    case Event.KeyCode of

    kbEsc: goto Cls;

    kbGrayMinus: if Location

    begin

    dec(Location);

    Draw

    end;

    kbGrayPlus: if Location

    begin

    inc (Location);

    Draw

    end;

    end

    end

    end; {TInterior.HandleEvent}

    {------------------------}

    procedure Tnotebook.Work;

    {работа с данными}

    var

    R: TRect;

    PW: PWorkWin;

    Control: Word;

    begin

    R.Assign(0,0,80,23);

    PW:=New(PWorkWin, Init(R));

    Control:=DeskTop^.ExecView(PW);

    Dispose(PW,Done)

    end;

    {------------------------}

    procedure TNotebook.HandleEvent(var Event: TEvent);

    {обработчик событий программы}

    begin {TNotebook.HandleEvent}

    TApplication.HandleEvent(Event); {обработка станд. команд cmQuit и

    cmMenu}

    if Event.What=evCommand then

    case Event.Command of

    {обработка новых команд}

    cmOpen: FileOpen; {открыть файл}

    cmSave: FileSave; {закрыть файл}

    cmChangeDir: ChangeDir; {сменить диск}

    cmDOSShell: DOSCall; {временный выход в дос}

    cmWork: Work; {Обработать данные}

    else

    exit {не обрабатывать другие команды}

    end;

    ClearEvent(Event) {очистить событие после обработки}

    end; {TNotebook.HandleEvent}

    {--------------------------------}

    procedure TNotebook.InitMenuBar;

    {соэдание верхнего меню}

    var

    R: TRect;

    begin

    GetExtent(R);

    R.B.Y:=succ(R.A.Y); {R - координаты строки меню}

    MenuBar:=New(PMenuBar, Init(R,

    NewMenu( {создание меню}

    {первый эл-т нового меню представляет собой

    подменю. Создаем его}

    NewSubMenu('~F~ Файл', hcNoContext,

    {описываем элемент главного меню}

    NewMenu( {создание подменю}

    NewItem( {первый эл-т}

    '~~ Открыть','F3',kbF3,cmOpen,hcNoContext,

    NewItem( {второй эл-т}

    '~~ Закрыть','F2',kbF2,cmSave,hcNoContext,

    NewItem( {третий эл-т}

    '~~ Сменить диск','',0,cmChangeDir,hcNoContext,

    NewLine( {строка-разделитель}

    NewItem('~~ Вызов ДОС','',0,cmDOSShell,hcNoContext,

    NewItem('~~ Конец работы','Alt-X',kbAltX,cmQuit,hcNoContext,

    NIL)))))) {нет других элементов подменю}

    ),

    {создаем второй элемент главного меню}

    NewItem('~W~ Работа','',kbF4,cmWork,hcNoContext,

    NIL) {нет др. эл-тов гл. меню}

    ))))

    end; {TNotebook.InitMenuBar}

    {----------------------------}

    procedure TNotebook.InitStatusLine;

    {формирует строку статуса}

    var

    R:TRect; {границы строки статуса}

    begin

    GetExtent(R); {получаем в R координаты всего экрана}

    R.A.Y:=pred(R.B.Y);

    StatusLine:=New(PStatusLine,

    Init(R, {создает строку статуса}

    NewStatusDef(0, $FFFF, {устанавливает макс. диап. кон-

    текстной справочной службы}

    NewStatusKey('~Alt-X~ Выход',kbAltX,cmQuit,

    NewStatusKey('~F2~ Закрыть',kbF2,cmSave,

    NewStatusKey('~F3~ Открыть',kbF3,cmOpen,

    NewStatusKey('~F4~ Работа',kbF4,cmWork,

    NewStatusKey('~F10~ Меню',kbF10,cmMenu,

    NIL))))), {нет других клавиш}

    NIL) {нет др. определений}

    ));

    DisableCommands(WinCom1) {запрещает недоступные команды}

    end; {TNotebook.InitStatusLine}

    {-----------------}

    var

    Nbook: TNotebook;

    begin

    Nbook.Init;

    Nbook.Run;

    Nbook.Done

    end.

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.