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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 00:39   #1
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию Разработайте текстовый редактор содержимого одной строки. Предусмотрите режим вставки, удаления и замены символов

Разработайте текстовый редактор содержимого одной строки. Предусмотрите режим вставки, удаления и замены символов.
--------------------
Помогите пожалуйста, совершенно незнаю как написать.
FlipFan вне форума Ответить с цитированием
Старый 30.03.2012, 00:45   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

ага! В паскале! С кнопочками, менюшкой, и popup меню!
Точно на паскале?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.03.2012, 01:21   #3
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию

да. это по процедурам и функциям модулей CRT и DOS.
помогите оч. прошу я с модулями вообще не в ладах.

Последний раз редактировалось FlipFan; 30.03.2012 в 10:13.
FlipFan вне форума Ответить с цитированием
Старый 30.03.2012, 11:02   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
ага! В паскале! С кнопочками, менюшкой, и popup меню!
Точно на паскале?
Ну, сама среда TurboPascal же имеет и менюшки и кнопочки...
значит, это возможно.

думаю, что автору темы нужно что-то вроде такого:
TEST4.rar


p.s. исходник демки я не выкладываю, ибо пользовался библиотекой TPCrt + свои старые наработки на этой основе...
да и много там лишнего (для данной задачи вывод в рамочке, например, не требуется). Но если нужно - могу исходный текст выложить, мне не жалко...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2012, 11:14   #5
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию

да что-то типо этого, только с заменой и вставкой символов нужно плз
FlipFan вне форума Ответить с цитированием
Старый 30.03.2012, 14:16   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну, общая идея такая - читайте код нажатой клавиши, анализируйте, изменяйте строку в памяти (согласно нажатой клавиши), выводите полученную строку.
цикл крутите до нажатия "Enter"
грубо говоря - это всё.

вот код процедурки из демки (просто для ознакомления - в готовом виде он вам не подходит, разумеется!
Код:
procedure Zapros(X, Y, MaxSize: integer; OText: string; HeaderAttr, TextColor: byte;
  var Text: string; var Ans: char);
 { V5.2   1.04.89 / 2.04.91
 пpоцедуpа Zapros пpедназначена для считывания с клавиатуpы стpоковой
 пеpеменной StrStroka длиной не более MaxSize символов начиная с конца
 выводимого текста OText. X и Y -кооpдинаты точки пpивязки OText.
 Пpи нажатии ESC Zapros pавен начальной (входной) стpоке. }
var
  StrStroka, TextOld: string;
  T, OldX, L, J: Integer;
  Flag: boolean;
  BlankS: string;
const HiAttr: byte = $0F;
begin
  Flag := True;
  TextOld := Text;
  Cursor($7, $8);
  L := Length(OText);
  StrStroka := Text;
  FastWrite(OText, Y, X, HeaderAttr);
  BlankS := Pad('', MaxSize);
  OldX := X + L;
  T := length(Text);
  FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
  FastWrite(StrStroka, Y, OldX, HiAttr);
  GotoXYAbs(OldX + T, Y);
  while True do
  begin
    Ans := ReadKey; { считываем символ }
    FastWrite(StrStroka, Y, OldX, TextColor);
    case Ans of
      #13: begin
          Text := StrStroka;
          Cursor($20, $20);
          Exit
        end;
      #27: begin
          Text := TextOld;
          FastWrite(Text, Y, OldX, TextColor);
          Cursor($20, $20);
          Exit
        end;
      #08: { если это 'забой' }
        begin
          Flag := False;
          Delete(StrStroka, T, 1);
          Dec(T);
          if T < 0 then T := 0;
          FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
          FastWrite(StrStroka, Y, OldX, TextColor);
          GotoXYAbs(OldX + T, Y);
        end;
      #25, #4: {  ^y  ^d  }
        begin
          FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
          T := 0;
          StrStroka := '';
          GotoXYAbs(OldX, Y);
        end;
      #00: { Если pасшиpенные коды то смотpим какая клавиша нажата}
        begin
          Ans := ReadKey;
          Flag := False;
          case Ans of
            #$69, #45, #59:
              begin
                Text := StrStroka;
                Cursor($20, $20);
                Exit
              end;
            #83: {  Delete  }
              begin
                Delete(StrStroka, T + 1, 1);
                FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
                FastWrite(StrStroka, Y, OldX, TextColor);
                GotoXYAbs(OldX + T, Y);
              end;
            #75: {  Left  }
              begin
                Dec(T);
                if T < 0 then T := 0;
                GotoXYAbs(OldX + T, Y);
              end;
            #77: {  Right  }
              begin
                Inc(T);
                if Length(StrStroka) < MaxSize then
                  StrStroka := StrStroka + ' ';
                if T > MaxSize then T := MaxSize;
                GotoXYAbs(OldX + T, Y);
              end;
            #71, #115: {  Home  ,  ^Left  }
              begin
                T := 0;
                GotoXYAbs(OldX + T, Y);
              end;
            #79, #116: {  End  ,  ^Right }
              begin
                repeat
                  J := Pos(' ', Copy(StrStroka, Length(StrStroka), 1));
                  if J = 1 then Delete(StrStroka, Length(StrStroka), 1);
                until J = 0;
                T := Length(StrStroka);
                FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
                FastWrite(StrStroka, Y, OldX, TextColor);
                GotoXYAbs(OldX + T, Y);
              end;
          end; {  case 2 }
        end; { pасшиpенные коды }
    else {  case 1 }
      begin
        if Flag then begin
          FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
          T := 0;
          StrStroka := '';
          Flag := False;
        end;
        if (Pos(' ', Copy(StrStroka, Length(StrStroka), 1)) = 1)
          then begin
          Insert(Ans, StrStroka, 1 + T);
          Delete(StrStroka, MaxSize + 1, 1);
          Inc(T);
          if T > MaxSize then T := MaxSize;
        end
        else
          if (Length(StrStroka) < MaxSize)
            then begin
            Insert(Ans, StrStroka, 1 + T);
            Inc(T);
            if T > MaxSize then T := MaxSize;
          end;
        FastWrite(BlankS, Y, OldX, TextColor); { ClrScr;}
        FastWrite(StrStroka, Y, OldX, TextColor);
        GotoXYAbs(OldX + T, Y);
      end;
    end; { CASE  1 }
  end; { WHILE }
end; { Zapros }
p.s. если до завтра сами не справитесь и никто не поможет, напишу Вам примерный код решения...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 01:26   #7
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. если до завтра сами не справитесь и никто не поможет, напишу Вам примерный код решения...[/I]
да, не знаю, напишите пожалуйста код, если не трудно с комментарием, больно хочу понять что мне непонятно
FlipFan вне форума Ответить с цитированием
Старый 02.04.2012, 10:24   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
да, не знаю, напишите пожалуйста код, если не трудно с комментарием, больно хочу понять что мне непонятно
уверен был, что вы за три дня разберётесь..

ладно, я код то напишу. вопрос только, прежде чем я потрачу впустую NN минут своей жизни - а что именно у Вас вызывает непонимание?!
то, что нужно получать код нажатой клавиши и анализировать его, это понятно?
а то, что если нажали клавишу удаления - нужно убрать символ из строки, это понятно?
а если нажали клавишу перемещения курсора, нужно изменить позицию в редактируемой строке, это понятно?

что Вас в этой задаче вводит в ступор непонимания?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 17:28   #9
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если нажали клавишу перемещения курсора, нужно изменить позицию в редактируемой строке, это понятно?
понятно, но незнаю как реализовать смену позиции(
FlipFan вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработайте программу перессылки блока битов из одной битовой строки в другую netiv Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 10.11.2011 04:49
Ошибка в процедуре замены символов. PAvl Паскаль, Turbo Pascal, PascalABC.NET 2 03.12.2010 11:47
TSysCharSet и функция удаления специфических символов из строки. DrAndriy Общие вопросы Delphi 0 07.09.2010 14:06
Функция замены символов в строке. Fataller Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 23.01.2010 10:14
Нужна программа для удаления содержимого папки DNK1980 Фриланс 6 11.02.2008 16:52