From: Sergey Pilipenko Subject: Pascal---->D3 {$APPTYPE CONSOLE} Date: 01 Jul 1998 00:00:00 GMT Message-ID: <1528347436@p6.f23.n4625.z2.ftn> Distribution: fido7 Approved: gateway@fido7.ru X-FTN-Origin: Take it or leave it! (2:4625/23.6) References: <898910161@p58.f25.n5045.z2.ftn> X-FTN-REPLY: 2:5045/25.58 359447d1 X-FTN-PATH: 5020/400 X-Comment-To: Dmitriy Kaplunenko X-FTN-SEEN-BY: 5080/80 5084/10 5087/7 5100/21 X-FTN-Tearline: Terminate 5.00/Pro X-FTN-MSGID: 2:4625/23.6 5b18bb2c X-FTN-AREA: RU.DELPHI Organization: Take it or leave it! X-FTN-PID: TerMail 5/Pro f822516635 Newsgroups: fido7.ru.delphi I salute you, Dmitriy Kaplunenko 27-Jun-98 11:16:01, Dmitriy Kaplunenko appealed to Dmitriy Kaplunenko about Pascal---->D3 {$APPTYPE CONSOLE} DK> Приветствую, ALL ! Hе могу решить на D3 проблему со считыванием DK> кода нажатой клавиши в консольном приложении. DK> Как реализовать на D3 конструкцию типа DK> program func; uses crt; var nx:char; begin WriteLn('Press any DK> Key...'); nx:=ReadKey; end. Процедуры для работы с консольным вводом/выводом от Ч.Калверта: /* (CONBOX.PAS) unit ConBox; { Copyright (c) 1996 by Charlie Calvert Routines for working with Console applications. } interface uses Windows; procedure GetXY(var X, Y: SHORT); procedure GotoXY(X, Y: SHORT); function KeyPressed: Boolean; procedure ClrScr(Attr: Cardinal); procedure ClrEol; function ReadKey: Char; implementation var hIn, hOut: DWORD; /////////////////////////////////////// // Get the current position of the cursor; /////////////////////////////////////// procedure GetXY(var X, Y: SHORT); var BuffInfo: TConsoleScreenBufferInfo; begin GetConsoleScreenBufferInfo(hOut, BuffInfo); X := BuffInfo.dwCursorPosition.X; Y := BuffInfo.dwCursorPosition.Y; end; /////////////////////////////////////// // Goto a particular location on screen /////////////////////////////////////// procedure GotoXY(X, Y: SHORT); var C: TCoord; begin C.X := X; C.Y := Y; SetConsoleCursorPosition(hOut, C); end; //////////////////////////////////////////// // Return true if a key has been pressed // or a mouse has been moved //////////////////////////////////////////// function KeyPressed: Boolean; var Buffer: TInputRecord; Data: DWORD; begin Result := False; PeekConsoleInput(hIn, Buffer, 25, Data); if Data <> 0 then if Buffer.EventType <> Key_Event then FlushConsoleInputBuffer(hIn) // Discard mouse input else Result := True; end; //////////////////////////////////////////// // Read single character without echoing output //////////////////////////////////////////// function ReadKey: Char; var Ch: Char; NumRead: DWORD; SaveMode: DWORD; begin GetConsoleMode(hIn, SaveMode); SetConsoleMode(hIn, 0); NumRead := 0; while NumRead < 1 do ReadConsole(hIn, @Ch, 1, NumRead, nil); SetConsoleMode(hIn, SaveMode); Result := Ch; end; /////////////////////////////////////// // Clear to the end of the current line /////////////////////////////////////// procedure ClrEol; var C: TCoord; NumWritten: DWord; begin GetXY(C.X, C.Y); FillConsoleOutputCharacter(hOut, ' ', 80 - C.X, C, NumWritten); end; ///////////////////////////////////////////////////////// // Clear the screen to a particular color ///////////////////////////////////////////////////////// procedure ClrScr(Attr: Cardinal); var NumWritten: DWord; C: TCoord; Space: Integer; begin Space := 80 * 25; c.X := 0; c.Y := 0; FillConsoleOutputCharacter(hOut, ' ', Space, c, NumWritten); FillConsoleOutputAttribute(hOut, Attr, Space, c, NumWritten); GotoXY(0,0); end; /////////////////////////////////////// // Write data at a particular location // in a particular color /////////////////////////////////////// procedure WriteXY(x, y: Integer; S: string; Attr: Cardinal); var C: TCoord; Result: DWORD; begin c.X := x; c.Y := y; SetConsoleTextAttribute(hOut, Attr); SetConsoleCursorPosition(hOut, c); WriteConsole(hOut, PChar(S), Length(S), Result, nil); end; initialization hIn := GetStdHandle(STD_INPUT_HANDLE); HOut := GetStdHandle(STD_OUTPUT_HANDLE); end. */ Devotedly yours, Sergey Pilipenko