[fpc-pascal]Reading the screen

Kuba Ober winnie at hoth.amu.edu.pl
Thu Sep 28 22:18:12 CEST 2000


Under win32: look at
http://msdn.microsoft.com/library/default.asp (only using IE5.0/5.5 or 
Netscape 4.76)
On left-hand-side TOC window, navigate to
Platform SDK
- Base services
-- Files and I/O
--- Consoles and Character-Mode Support
---- Using the Console

Below is the C example for reading and writing block of characters and 
attributes, using ReadConsoleInput and WriteConsoleOutput.

MSDN is a good source of Win32 info, alas I have no idea about GO32.

#include <windows.h>

VOID main(void)
{
     HANDLE hStdout, hNewScreenBuffer;
     SMALL_RECT srctReadRect;
     SMALL_RECT srctWriteRect;
     CHAR_INFO chiBuffer[160]; // [2][80];
     COORD coordBufSize;
     COORD coordBufCoord;
     BOOL fSuccess;

     // Get a handle to the STDOUT screen buffer to copy from and
     // create a new screen buffer to copy to.

     hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
     hNewScreenBuffer = CreateConsoleScreenBuffer(
        GENERIC_READ |           // read/write access
        GENERIC_WRITE,
        0,                       // not shared
        NULL,                    // no security attributes
        CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE
        NULL);                   // reserved; must be NULL
     if (hStdout == INVALID_HANDLE_VALUE ||
             hNewScreenBuffer == INVALID_HANDLE_VALUE)
     {
         MyErrorExit("CreateConsoleScreenBuffer");
     }

     // Make the new screen buffer the active screen buffer.

     if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) )
         MyErrorExit("SetConsoleActiveScreenBuffer");

     // Set the source rectangle.

     srctReadRect.Top = 0;    // top left: row 0, col 0
     srctReadRect.Left = 0;
     srctReadRect.Bottom = 1; // bot. right: row 1, col 79
     srctReadRect.Right = 79;

     // The temporary buffer size is 2 rows x 80 columns.

     coordBufSize.Y = 2;
     coordBufSize.X = 80;

     // The top left destination cell of the temporary buffer is
     // row 0, col 0.

     coordBufCoord.X = 0;
     coordBufCoord.Y = 0;

     // Copy the block from the screen buffer to the temp. buffer.

     fSuccess = ReadConsoleOutput(
        hStdout,        // screen buffer to read from
        chiBuffer,      // buffer to copy into
        coordBufSize,   // col-row size of chiBuffer
        coordBufCoord,  // top left dest. cell in chiBuffer
        &srctReadRect); // screen buffer source rectangle
     if (! fSuccess)
         MyErrorExit("ReadConsoleOutput");

     // Set the destination rectangle.

     srctWriteRect.Top = 10;    // top lt: row 10, col 0
     srctWriteRect.Left = 0;
     srctWriteRect.Bottom = 11; // bot. rt: row 11, col 79
     srctWriteRect.Right = 79;

     // Copy from the temporary buffer to the new screen buffer.

     fSuccess = WriteConsoleOutput(
         hNewScreenBuffer, // screen buffer to write to
         chiBuffer,        // buffer to copy from
         coordBufSize,     // col-row size of chiBuffer
         coordBufCoord,    // top left src cell in chiBuffer
         &srctWriteRect);  // dest. screen buffer rectangle
     if (! fSuccess)
         MyErrorExit("WriteConsoleOutput");
     Sleep(10000);

     // Restore the original active screen buffer.

     if (! SetConsoleActiveScreenBuffer(hStdout))
         MyErrorExit("SetConsoleActiveScreenBuffer");

}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20000928/0a463d1f/attachment.html>


More information about the fpc-pascal mailing list