Страница 2 из 3

Re: Как выйти по Esc

СообщениеДобавлено: 26.03.2017 20:59:50
Deimos
Леонид писал(а):Те, кому 40+

Мне еще не за 40, но я писал для Электроника 61...

Согласен с Снегом-Севером - проще сделать эмуляцию консоли визуальными компонентами, для Вашей задачи... На вскидку - tMemo, tEdit + пара tButton (можно и без них обойтись). Так Вы реализуете свой проект быстрее и проще...

Мем используйте, как консоль, а в эдите отловить нажатия клавиш по коду проще-простого... (onKeyDown или UP)

визуально - выравнивание компонент + уберите фокус у мема (tabstop= false). Будет похоже на консоль... И писать будет проще... (сугубо ИМХО)

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 05:32:03
Снег Север
Код: Выделить всё
program project1;
uses Crt;
var
   ch :char;
   str :string;
   n, Code  :integer;
   a :real;
function input :string;
begin
  result := '';
  repeat
    ch := readkey;
    if (ch<>#13) and (ch<>#27) then
    begin
       result := result + ch;
       write(ch);
    end
    else
    if (ch=#27) then
       result := ch;
  until (ch=#13) or (ch=#27);
end;
begin
  repeat
     writeln('press Esc or Enter to end.');
     writeln('Input integer :');
     str := input;
     if (str='') or (str[1]=#27) then
        continue;
     val(str, n, code);
     if code<>0 then
        writeln('Error at position ',code)
     else
        writeln('Your input is ',n);


     writeln('Input real:');
     str := input;
     if (str='') or (str[1]=#27) then
        continue;
     val(str, a, code);
     if code<>0 then
        writeln('Error at position ',code)
     else
        writeln('Your input is ',a);

{...}
  until (str='') or (str[1]=#27);
end.


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

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 11:36:19
Леонид
Попытался попробовать Ваш пример, но получил: Error: Identifier not found "result"
Если в функции ее объявляю (как советуют в некоторых местах):
Код: Выделить всё
var result:string;
,
то из программы выходит в любом случае, не зависимо от ввода числа или простого нажатия Enter.
В логе: Warning: Function result does not seem to be set

PS. Пользую FreePascal. Ваяю в Geany.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 14:05:55
tema
Леонид писал(а):Попытался попробовать Ваш пример, но получил: Error: Identifier not found "result"
Если в функции ее объявляю (как советуют в некоторых местах):
Код: Выделить всё
var result:string;
,
то из программы выходит в любом случае, не зависимо от ввода числа или простого нажатия Enter.
В логе: Warning: Function result does not seem to be set

PS. Пользую FreePascal. Ваяю в Geany.

Объявлять не надо.
Замените result на input и не объявляйте. Она уже объявлена как имя функции

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 15:38:14
Леонид
tema, спасибо огромное. Заработало.

По поводу result, пишут, что в TP ее нет. Как в FP - я не в курсе. Но она не работает. Ругается, что Error: Identifier not found "result"

А с заменой на input все нормально. Буду приспосабливать к своему творению.

PS. Не нашел где тут благодарности по расставлять. Но большое спасибо всем откликнувшимся.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 16:24:19
Лекс Айрин
Леонид писал(а):По поводу result, пишут, что в TP ее нет.


странно... в учебнике по 7 версии (или 6 не помню уже) result была.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 16:31:19
Снег Север
Леонид, я писал и запускал в лазарус 1.6.4, писать программы не в нормальной среде программирования - это извращение. Крайне рекомендую выкинуть и напрочь забыть про всё это окаменевшее дерьмо мамонта. Вы же в 21-м веке живете, как-никак.
Даже если вы делаете консольное приложение, хорошее IDE существенно облегчает работу.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 16:47:22
Леонид
А чем Geany плох?
Да и в Lazarus'е консольное приложение делать разве проще? Он же как и дельфи для кнопочно-окошечных программ. Или я сильно ошибаюсь?
В учебниках по Lazarus'у про консольные только слегка упоминается.
И см я чуток пробовал - разницы, практически, нет никакой - то же самое редактирование текста.
Или, просто, мне хороших книг об этом не попадалось. Что не удивительно. О паскале вообще хорошей литературы почти нет. Все только друг у друга переписывают. Даже опечатки одинаковые попадаются.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 16:50:55
Лекс Айрин
Снег Север писал(а):Даже если вы делаете консольное приложение, хорошее IDE существенно облегчает работу.


это дело привычки. Консольщики, допустим, зачастую считают, что IDE вредит, так как расслабляет программиста. Особым шиком раньше считалось писать программы не пользуясь компьютерами вообще (кроме набора программы перед отладкой и компиляцией). К тому же, у некоторых может тупо не быть оконного менеджера и они работают чисто в консоли. А псевдографическое IDE под, допустим, линуксом, может не заработать (да и, по сути, то самое дерьмо мамонта и есть).

Добавлено спустя 5 минут 25 секунд:
Леонид писал(а):Да и в Lazarus'е консольное приложение делать разве проще? Он же как и дельфи для кнопочно-окошечных программ. Или я сильно ошибаюсь?


Есть один нюанс с кодировкой текста, о котором стоит помнить -- Лазарус, даже консольные проги пишет по умолчанию в UTF8, соответственно, надо будет перед компиляцией конвертировать файлы.
А вообще, IDE хорошо тем, что оно позволяет превратить текст проги в гипертекст и более-менее легко по нему ориентироваться.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 17:35:31
Леонид
Лекс Айрин писал(а):Есть один нюанс с кодировкой текста, о котором стоит помнить -- Лазарус, даже консольные проги пишет по умолчанию в UTF8, соответственно, надо будет перед компиляцией конвертировать файлы.

А зачем мне его конвертировать? В Linux по умолчанию UTF8 используется.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 18:11:40
Снег Север
Леонид писал(а):А чем Geany плох?
Да и в Lazarus'е консольное приложение делать разве проще? Он же как и дельфи для кнопочно-окошечных программ. Или я сильно ошибаюсь?
Понятия не имею про Geany, может, если вы принципиально намерены ограничиться консольными программами, то Lazarus особых преимуществ не имеет. Хотя я плохо представляю, как вы будете в Geany делать точки останова и пошаговое выполнение...
Lazarus позволят писать любые типы программ. И время консольных программ ушло - даже в линуксе большинство из них давно имеют обертки с нормальным человеческим графическим интерфейсом (как в винде :D ). Сейчас даже ретро-игры, имитирующие алфавитно-цифровые "картинки" а-ля 80-е годы, пишут на графической канве...

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 21:30:16
Лекс Айрин
Снег Север писал(а):Понятия не имею про Geany,


программа типа notepad++

Снег Север писал(а): И время консольных программ ушло - даже в линуксе большинство из них давно имеют обертки с нормальным человеческим графическим интерфейсом

Странно, почему же попробовав вкус графических оболочек руки так тянутся к текстовой консоли? Даже несмотря на то, что MS всячески выпиливало DOS его реинкарнациями (CMD, FreeDOS) пользуются до сих пор. При том, что людей делающих это из ностальгии достаточно мало.

Re: Как выйти по Esc

СообщениеДобавлено: 27.03.2017 22:59:35
tema
Раз решили воспользоваться этимо кодом, то можно из него удалить лишнее:
Код: Выделить всё
program project1;
uses Crt;
var
   ch :char;
   str :string;
   n, Code  :integer;
   a :real;
function input :string;
begin
  result := '';
  repeat
    ch := readkey;
    if (ch<>#13) and (ch<>#27) then
    begin
       result := result + ch;
       write(ch);
    end;
  until (ch=#13) or (ch=#27);
end;
begin
  repeat
     writeln('press Esc or Enter to end.');
     writeln('Input integer :');
     str := input;
     if (str='') or (ch=#27) then
        continue;
     val(str, n, code);
     if code<>0 then
        writeln('Error at position ',code)
     else
        writeln('Your input is ',n);


     writeln('Input real:');
     str := input;
     if (str='') or (ch=#27) then
        continue;
     val(str, a, code);
     if code<>0 then
        writeln('Error at position ',code)
     else
        writeln('Your input is ',a);

{...}
  until (str='') or (ch=#27);
end.

Re: Как выйти по Esc

СообщениеДобавлено: 28.03.2017 01:41:14
Леонид
Снег Север писал(а):И время консольных программ ушло - даже в линуксе большинство из них давно имеют обертки с нормальным человеческим графическим интерфейсом (как в винде :D ). Сейчас даже ретро-игры, имитирующие алфавитно-цифровые "картинки" а-ля 80-е годы, пишут на графической канве...


Вот тут я категорически не согласен. Многое в консоли делается быстрей, чем в "гуях". И, хотя, я не люблю консоль, но часто ей пользуюсь. Это, во-первых, файловые менеджеры: mc и ranger. Проигрыватели разных аудио, тот же moc. Открыть папку с музыкой быстро, как и в mc (тем более они как 2-е капли воды), нажать A (Shift+a) и все содержимое уже в плейлисте. Нажал ENTER и запустил шарманку. И прочая и прочая.

Лирическое отступление закончено. Теперь в делу.
Geany это совсем не
программа типа notepad++
. Даже очень нет. И таки да. Я в ближайшем столетии хочу ограничиться консольными программульками.
Это как хобби на пенсии. Делать все равно будет нечего. А за те несколько лет, что осталось до нее, как раз кой чего освою. Вот и буду ваять в стол. Ностальгировать.

Re: Как выйти по Esc

СообщениеДобавлено: 28.03.2017 06:38:31
Снег Север
Лекс Айрин писал(а):Странно, почему же попробовав вкус графических оболочек руки так тянутся к текстовой консоли?
Не встречал таких, у кого тянутся. Т.е. подозреваю конечно, что "красноглазики" не переводятся, но с ними редко пересекаюсь. Консольные команды изредка использовать приходится, но каждый раз с матом сквозь зубы...

Добавлено спустя 7 минут 34 секунды:
Леонид писал(а):Многое в консоли делается быстрей, чем в "гуях".
Я с линуксами практически не имею дела - на работе крутятся на виртуалках пара специализированных комплексов, оба с нормальным веб-интерфейсом, есть для тестовых целей минт, единственный который не вызывает у меня тошноты с первого взгляда...
А в винде просто не бывает необходимости "делать быстрее". И, право, у меня всегда есть чем занять голову вместо запоминания десятков дебильных ключей у программ, которые я использую раз в несколько месяцев. Мне быстрее кликнуть в меню, чем вызывать списки ключей по хелпу и вбивать их в строку...