Resolved Function That works:
Code:
// Prints out per-line at speed of delay in milliseconds for "int lines" amount of lines
bool ScrollText(char Msg[MAX_LENGTH], int lines, int delay, int tabs)
{
using namespace std;
CONSOLE_SCREEN_BUFFER_INFO consoleSBI;
COORD tabCoord;
// Get our cursor position
if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &consoleSBI))
return false;
// Set X to equal 0
consoleSBI.dwCursorPosition.X = 0;
// Add 1 to Y
consoleSBI.dwCursorPosition.Y += 1;
// Set our cursor position
if(!SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), consoleSBI.dwCursorPosition))
return false;
// Display any tabs the user wishes to use
for (int i=tabs;i>0;--i)
{
// Instead of actually displaying tab characters, we will
// set the cursor indented in by x amount of tabs
// which is every 8 columns from the left if you start at
// the left-most side of the screen
consoleSBI.dwCursorPosition.X += 8;
}
// Set tabCoord
tabCoord.X = consoleSBI.dwCursorPosition.X;
tabCoord.Y = consoleSBI.dwCursorPosition.Y;
// Set our cursor position
if(!SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), consoleSBI.dwCursorPosition))
return false;
for (i=0;i<lines;++i)
{
// Progress line-by-line
consoleSBI.dwCursorPosition.Y = tabCoord.Y;
for (int k=i+1;k>0;--k)
{
consoleSBI.dwCursorPosition.Y += 1;
// Set our cursor position
if(!SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), consoleSBI.dwCursorPosition))
return false;
// Overwrite the previous data to erase it
for (int j=strlen(Msg);j>0;--j)
{
cout << " ";
}
}
// Set our cursor position
if(!SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), consoleSBI.dwCursorPosition))
return false;
// Display the message
cout << Msg;
// Pause for int delay
Sleep(delay);
}
// Clean out cout buffer
cout.flush();
return true;
}