Przesuwanie tekstu.

0

siema, mam do zrobienia program, ktory ma wczytywac tekst z pliku do ramki i przesuwać go Pg downem( o jeden wiersz) i spacją(o cały ekran ramki). mam juz troche kodu, ale coś mi ucina tekst znajdujący się poza ramką, tzn, jak przewijam to juz go nie ma, a powinien być. co moze byc nie tak?

#include <stdio.h>
#include "stdafx.h"
#include "console.h"

#define FileWindowXOffset 12 //ramka w poziomie
#define FileWindowYOffset 8 // ramka w pionie
#define FileWindowXSize 50 //szerokosc ramki
#define FileWindowYSize 35 //dlugosc ramki

/********************************************************************/
void write() // rysowanie ramki
{
gotoXY(FileWindowXOffset+1,FileWindowYOffset);
for (int i=0; i<FileWindowXSize;i++)
write("-");
gotoXY(FileWindowXOffset+1,FileWindowYOffset+FileWindowYSize+1);
for (int i=0; i<FileWindowXSize;i++)
write("-");

for (int i=1; i<=FileWindowYSize;i++)
{
	gotoXY(FileWindowXOffset,FileWindowYOffset+i);
	write('|');
	gotoXY(FileWindowXOffset+FileWindowXSize+1, FileWindowYOffset+i);
	write('|');
}

}

void clear()  \\czyszczenie
{
        int a, b;
        for (a=0; a<FileWindowXSize-1; a++)
        {
                for (b=0; b<FileWindowYSize-1; b++)
                {
					gotoxy(FileWindowXOffset+a+1, FileWindowYOffset+b+1);
                	putchar (32);
				}
        }
}

/******************************************************************************************/

int main()
{
initConsole();

FILE *fp;
int znak;
int n=0;
char file[1000];
int key;
        
printf ("Nazwa pliku:\t");    
 
scanf ("%s", &file);

fp = fopen(file, "r");        //wczytywanie pliku
if (fp==NULL)
{
	perror ("Nie ma takiego pliku!");
	getchar();
	return 0;
}


while(true)          // wypełnienie tekstem
{
    int y=0;
    int x=0;
        while ((znak = fgetc(fp)) != EOF)                                                         
        {
			if(znak == '\n')
			{
				++y;
				x=0;
				continue;
			}
			if(y<n)
				continue;
			if(x==FileWindowXSize-2)   // znaki które sie nie mieszczą mają być zaznaczone znakiem ">"
			{
				gotoXY(x+FileWindowXOffset+1,y+FileWindowYOffset+1-n);
				write(">");
				x++;
				continue;
			}
			if(x>FileWindowXSize-2)
				continue;
			if(y>FileWindowYSize-2)
				break;
			gotoXY(x+FileWindowXOffset+1,y+FileWindowYOffset+1-n);
			write(znak);         
			x++;
        }
		fclose(fp);

printf ("ESC - wyjscie z programu\n");
printf ("strzalka w dol - przesuniecie tekstu o jeden wiersz\n");
printf ("spacja - przesuniecie tekstu o caly ekran\n");
 
write();


//-------------------------------------------<sup> WYPELNIENIE </sup> ----------------------------------------------
	//obsluga klawiszy
	key = getVKey();
	switch (key)
	{
	case VK_DOWN :	clear();
					n++;   // dodaje nowy wiersz
					fopen(file, "r");
					
					break;
			
	case VK_SPACE :	       clear();
					n=n+FileWindowYSize-1;   // dodaje nowe wiersze w nowym oknie
					fopen(file, "r");
					
					break;

	case VK_ESCAPE: return 0;
	}
	}
	

}

0

Nie ma sposobu na zapisanie pozycji przewijania ramki za pomocą jednej zmiennej.
Zamień "n" na parę nX,nY
i odpowiednio to uwzględniaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1