На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> crt .... crt работа с этим модулем , работа с текстовыми окнами
    Нда!!! Извините что натворил это у меня глюк в браузере!!! Жаль опции удалить сообщение в форуме нету..

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

    "Создать окно в рамке на фоне, заполненном псевдографическим символом #176 синего цвета, с текстом из файла. Выполнять перемещение окна вверх, вниз, вправо или влево с сохранением фона по клавишам управления курсором."...
    Сообщение отредактировано: Grigiri -
      Да проще пареной репы %)))
      ExpandedWrap disabled
        uses crt;
        const
          {Имя файла, которым заполнять фон}
          FileName='A1.pas';
          {Фон}
          BackFGColor=LightGray;
          BackBGColor=Blue;
          BackSymbol=176;
          BackValue=BackBGColor shl 12+BackFGColor shl 8+BackSymbol;
          {Атрибуты окна}
          {-Начальное положение (начиная с 0)}
          WinStartXPosition=9;
          WinStartYPosition=4;
          {-Размер}
          WinXSize=40;
          WinYSize=12;
          {-Символы бордюра окна}
          WinBorderTopLeft=#201;
          WinBorderTopBottom=#205;
          WinBorderTopRight=#187;
          WinBorderLeftRight=#186;
          WinBorderBottomLeft=#200;
          WinBorderBottomRight=#188;
          {-Цвет бордюров окна}
          WinBorderFGColor=White;
          WinBorderBGColor=LightGray;
          WinBorderColor=WinBorderBGColor shl 4+WinBorderFGColor;
          {-Цвет и символ внутренности окна}
          WinContFGColor=black;
          WinContBGColor=LightGray;
          WinContSymbol=' ';
          WinContColor=WinContBGColor shl 4+WinContFGColor;
          {Кнопки клавиатуры}
          KeyEsc=#27;
          KeyLeft=#75;
          KeyUp=#72;
          KeyRight=#77;
          KeyDown=#80;
          KeyEnter=#13;
        type
          Letter=record
            case boolean of
              false: (val:char; col:byte);
              true: (dat:word;)
          end;
          TWindow=record
            Data:array[1..WinYSize,1..WinXSize] of Letter;
            Background:array[1..WinYSize,1..WinXSize] of Letter;
            x,y:integer;
            XSize,YSize:word;
          end;
        var
          ScreenBuffer:array[1..25,1..80] of Letter;
          Screen:array[1..25,1..80] of Letter absolute $B800:0000;
          p,o:word;
          temp:char;
          Window:TWindow;
          f:text;
         
        procedure DrawWindow(var Win:TWindow);
        var
          p,o:byte;
        begin with Win do
          for o:=0 to high(Data)-low(Data) do
          for p:=0 to high(Data[1])-low(Data[1]) do
          if (y+o in [0..high(ScreenBuffer)-low(ScreenBuffer)])and
          (x+p in [0..high(ScreenBuffer[1])-low(ScreenBuffer[1])]) then
          begin
            Background[low(Background)+o,low(Background[1])+p]:=
              ScreenBuffer[low(ScreenBuffer)+y+o,low(ScreenBuffer[1])+x+p];
            ScreenBuffer[low(ScreenBuffer)+y+o,low(ScreenBuffer[1])+x+p]:=
              Data[low(Data)+o,low(Data[1])+p];
          end;
        end;
         
        procedure ClearWindow(Win:TWindow);
        var
          p,o:byte;
        begin with Win do
          for o:=0 to high(Background)-low(Background) do
          for p:=0 to high(Background[1])-low(Background[1]) do
          if (y+o in [0..high(ScreenBuffer)-low(ScreenBuffer)])and
          (x+p in [0..high(ScreenBuffer[1])-low(ScreenBuffer[1])]) then
          ScreenBuffer[low(ScreenBuffer)+y+o,low(ScreenBuffer[1])+x+p]:=
            Background[low(Background)+o,low(Background[1])+p];
        end;
         
        procedure InitWindow(var Win:TWindow;x,y:integer;XSize,YSize:word;ShowNow:boolean);
        var
          p,o:byte;
        begin
          if(XSize<2)or(YSize<2) then exit;
          Win.x:=x;
          Win.y:=y;
          Win.XSize:=XSize;
          Win.YSize:=YSize;
          with Win do
          begin
            Data[Low(Data),Low(Data[1])].val:=WinBorderTopLeft;
            Data[Low(Data),Low(Data[1])].col:=WinBorderColor;
            Data[Low(Data),high(Data[1])].val:=WinBorderTopRight;
            Data[Low(Data),high(Data[1])].col:=WinBorderColor;
            Data[high(Data),Low(Data[1])].val:=WinBorderBottomLeft;
            Data[high(Data),Low(Data[1])].col:=WinBorderColor;
            Data[high(Data),high(Data[1])].val:=WinBorderBottomRight;
            Data[high(Data),high(Data[1])].col:=WinBorderColor;
            for o:=Low(Data)+1 to high(Data)-1 do
            begin
              Data[o,low(Data[1])].val:=WinBorderLeftRight;
              Data[o,low(Data[1])].col:=WinBorderColor;
              Data[o,high(Data[1])].val:=WinBorderLeftRight;
              Data[o,high(Data[1])].col:=WinBorderColor;
            end;
            for p:=Low(Data[1])+1 to high(Data[1])-1 do
            begin
              Data[low(Data),p].val:=WinBorderTopBottom;
              Data[low(Data),p].col:=WinBorderColor;
              Data[high(Data),p].val:=WinBorderTopBottom;
              Data[high(Data),p].col:=WinBorderColor;
              for o:=Low(Data)+1 to high(Data)-1 do
              begin
                Data[o,p].val:=WinContSymbol;
                Data[o,p].col:=WinContColor;
              end;
            end;
          end;
          if ShowNow then DrawWindow(Win);
        end;
         
        begin
          clrscr;
          for o:=low(ScreenBuffer) to high(ScreenBuffer) do
          for p:=low(ScreenBuffer[1]) to high(ScreenBuffer[1]) do ScreenBuffer[o,p].dat:=BackValue;
          move(ScreenBuffer,screen,sizeof(screenBuffer));
          assign(f,FileName);
          reset(f);
          o:=low(screenBuffer);
          p:=low(ScreenBuffer[1]);
          while not eof(f) and (o<=high(ScreenBuffer)) do
          begin
            read(f,temp);
            if temp=KeyEnter then
            begin
              read(f,temp);
              p:=low(ScreenBuffer[1]);
              inc(o);
            end else if p<=high(ScreenBuffer[1]) then
            begin
              ScreenBuffer[o,p].val:=temp;
              inc(p);
            end;
          end;
          close(f);
          InitWindow(Window,WinStartXPosition,WinStartYPosition,WinXSize,WinYSize,true);
          move(ScreenBuffer,screen,sizeof(screenBuffer));
          repeat
            if keypressed then case readkey of
              KeyEsc: break;
              #0: case readkey of
                KeyLeft:
                begin
                  ClearWindow(Window);
                  dec(Window.x);
                  DrawWindow(Window);
                end;
                KeyUp:
                begin
                  ClearWindow(Window);
                  dec(Window.y);
                  DrawWindow(Window);
                end;
                KeyRight:
                begin
                  ClearWindow(Window);
                  inc(Window.x);
                  DrawWindow(Window);
                end;
                KeyDown:
                begin
                  ClearWindow(Window);
                  inc(Window.y);
                  DrawWindow(Window);
                end;
              end;
            end;
            move(ScreenBuffer,screen,sizeof(screenBuffer));
          until false;
        end.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0254 ]   [ 15 queries used ]   [ Generated: 15.05.25, 16:35 GMT ]