Толик Панков
hex_laden
............ .................. ................
October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Lazarus: Crt, WinCrt, русский язык и нажатие клавиши в консоли.

Понадобилось сделать что-то типа такого:

Файл уже существует. Заменить? [Y/N]

Вспомнил, что в Турбопаскале была функция ReadKey из модуля Crt, а вдруг и во FreePascal есть?

Есть, но модуль Crt делает глюк русскому языку:

program TestCrt;
uses Crt;
var Ch:char;
begin
  WriteLn('Нажмите любую клавишу...');
  Ch:=ReadKey;
end.




Ладно, пробуем заменить Crt на WinCrt.

Глюк с русским языком пропал, но функция ReadKey на нажатие клавиш не реагирует, да пиздец, еб твою мать!

В общем, долго плевался, реализовал через TKeyEvent из модуля Keyboard:

uses SysUtils,Keyboard;

function Ask(FilePath:UnicodeString):boolean;
var K: TKeyEvent;
    KS:String;
begin
    WriteLn ('File ', FilePath, ' is exists! Replace file? [Y/N]');
    InitKeyBoard;
   while true do begin
      K:=GetKeyEvent;
      K:=TranslateKeyEvent(K);
      KS:=KeyEventToString(K);

      if (KS='Y') or (KS='y') then begin DoneKeyBoard; exit(true); end;
      if (KS='N') or (KS='n') then begin DoneKeyBoard; exit(false); end;
   end;

  DoneKeyBoard;
  exit(false);
end;

Исходник на PasteBin

Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2022/12/03/lazarus-crt-wincrt-russkij-yazyk-i-nazhatie-klavishi-v-konsoli/

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.