Irgendwie so vielleicht:
Delphi-Quellcode:
function readkey:char;
var buf:input_record;
ret:cardinal;
begin
result:=#0;
GetNumberOfConsoleInputEvents(inputhandle,ret);
if ret>0 then
begin
readconsoleinput(inputhandle,buf,1,ret);
if buf.EventType=key_event then
begin
if buf.Event.KeyEvent.bKeyDown then
result:=buf.Event.KeyEvent.AsciiChar;
end;
end;
end;
procedure readln(var x:string);
var key:char;
msg:tmsg;
begin
x:='';
repeat
while peekmessage(msg,0,0,0,PM_remove) do begin
translatemessage(msg);
dispatchmessage(msg);
end;
key:=readkey;
if key <>#0 then
begin
write(key);
if key<>#13 then x:=x+key;
end;
until (key=#13);
end;
mit
inputhandle:=getstdhandle(STD_INPUT_HANDLE); //DWORD
Man muss allerdings noch besser auf die Tasten reagieren. Und ob das die optimale Lösung ist?
Als alternativen fallen mir (neben der normalen
VCL-
GUI-Anwendung) noch ein:
-
nonVCL-
GUI
-TClient in Thread setzen (wie mütze sagt)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.