Marys Temat założony przez niniejszego użytkownika  | 
Odświeżanie jednego elementu i własne funkcje » 2011-01-07 03:08:24 Witam ponownie, mam programik, który przesuwa, powiększa itd. litery wyrysowane przez mnie, poniżej mam legendę do tego i teraz jak manipuluje tym wszystkim to wszystko mi się odświeża tzn robi clear screen, a jak wyrzucić z clear screena z legendy. Aplikacja uruchamia się w konsoli i pracuję na C++ Builder.
  Drugie pytanie to jak tworzyć własne funkcje po za programem głównym, w osobnym pliku? Np. mam pętle w wyżej wymienionym programie i wystarczy, że napisze w osobnym pliku funkcje i ja nazwę, a później dołączę odpowiedni nagłówek i wstawię funkcje z odpowiednimi parametrami, mogę jakiś przykład.     | 
 | 
DejaVu  | 
» 2011-01-07 03:58:38  | 
 | 
Marys Temat założony przez niniejszego użytkownika  | 
» 2011-01-08 05:13:27 Już prostuje moją wypowiedź :P Na początek może obrazek, będzie łatwiej wytłumaczyć -> http://img835.imageshack.us/i/beztytuugs.png http://img835.imageshack.us/img835/1323/beztytuugs.png Chodzi o to aby clearscreen działał tylko na to co jest zaznaczone na niebiesko, a co jest zaznaczone na czerwono "nie używało" clearscreena. Co do tych funkcji, to zanim dostałem ten ciekawy link spróbowałem czegoś takiego i moje pytanie czy to tak może być? Oto kod głównego programu #include <iostream.h> #include <conio.h> #include "funkcje.cpp" const int RANGE_BEGIN = 5; const int RANGE_END = 17;
  void tresc(); void czyt( int & dl ); void zadanie( int dl );
  int main() {     int dl;     tresc();     clrscr();     czyt( dl );     clrscr();     zadanie( dl );          return 0; }
  void tresc() {     do     {         cout << "ZADANIE PROJEKOTWE\n"         << "---------------------------------------------------------"         << "-----------------------\n\n";         cout << "Program wyswietla pierwsze litery imienia i nazwsika (Marcin "         << "Michalik) oraz \nostatnia cyfre indeksu (8132)."         << " Tekst mozna powiekszac i pomniejszac za pomoca\n"         << "klawiszy + i - oraz przesuwac za pomoca strzalek. "         << "Przed uruchomieniam nalezy\npodac rozmiar wyswietlanego"         << " tekstu. Podany rozmiar musi byc liczba calkowita,"         << "\nnieparzysta o wartosci minimalnej 5.\n\n\n\n\n\n";         cout << "Autor: Marcin Michalik\n"         << "Nr grupy: GID101 (grupa I)\n"         << "Data: 3.01.2011\n";         cout << "\n\tPrzejdz dalej -> Enter\n";     }     while( getch() != 13 );      }
  void czyt( int & dl ) {     int er, x, y;     cout << "Prosze podac rozmiar wyswietlanego tekstu (prosze wczytac "     << "cyfre calkowita,\nz przedzialu <5, 17>): ";     x = wherex();     y = wherey();     do     {         gotoxy( x, y );         clreol();         er = 0;         cin >> dl;         if( cin.fail() )         {             er = 1;             cin.clear();             cin.ignore( 0xff,( int ) '\n' );         }     }     while(( dl < RANGE_BEGIN ) ||( dl > RANGE_END ) || er );      }
  void zadanie( int dl ) {     int x, x1, x2 = 1, y, y1, y2 = 27, z, a, szer, g, f;     char klawisz;     szer = dl - 1;     z = szer - 1;     a =( z - 1 ) / 2;     y =( 25 - dl ) / 2;     x =( 80 - 2 *( z + z - 1 ) - dl - 4 ) / 2;     do     {         _setcursortype( _NORMALCURSOR );                  clrscr();                  x1 = x;         y1 = y;         gotoxy( x1, y1 );         mpion( dl, y1, x1, x, z );                  y1 = y;         x1 = x;         gotoxy( x1, y1 );         mskos( y1, x1, z );                                    x1 = x + 2 *( z - 1 ) + 3;         y1 = y;         gotoxy( x1, y1 );         m2pion( y1, x1, dl, x, z );         y1 = y;         x1 = x + 2 *( z - 1 ) + 3;         gotoxy( x1, y1 );         m2skos( y1, x1, z );                  x1 = x + 4 *( z - 1 ) + 5;         y1 = y + 1;         gotoxy( x1, y1 );         dwapoziom( y1, x1, y, dl );                  x1 = x + 4 *( z - 1 ) + 4 + dl;         y1 = y + 2;         gotoxy( x1, y1 );         dwaprawo( x1, y1, dl );                  x1 = x + 4 *( z - 1 ) + 6;         y1 = y + dl -(( dl + dl % 2 ) / 2 - 2 );         gotoxy( x1, y1 );         dwalewo( x1, y1, dl );         x1 = x2;         y1 = y2;         gotoxy( x1, y1 );         legenda( x1, y1, y2, g, f );                  _setcursortype( _NOCURSOR );         klawisz = getch();         sterowanie( x, y, dl, szer, z, a, klawisz );     }     while( klawisz != 27 );      }
  A to kod funkcji: #include <iostream.h> #include <conio.h> #include <math.h> void mpion( int dl, int y1, int x1, int x, int z ) {     for( int i = 1; i <= dl; i++ )     {         y1++;         gotoxy( x1, y1 );         cout << 'M';         x1 = x + 2 *( z - 1 );         gotoxy( x1, y1 );         cout << 'M';         x1 = x;     } } void mskos( int y1, int x1, int z ) {     for( int i = 1; i <= z; i++ )     {         y1++;         gotoxy( x1, y1 );         cout << 'M';         x1++;     }     for( int i = 1; i <= z - 1; i++ )     {         y1--;         gotoxy( x1, y1 );         cout << 'M';         x1++;     } } void m2pion( int y1, int x1, int dl, int x, int z ) {     for( int i = 1; i <= dl; i++ )     {         y1++;         x1 = x + 2 *( z - 1 ) + 3;         gotoxy( x1, y1 );         cout << 'M';         x1 = x + 4 *( z - 1 ) + 3;         gotoxy( x1, y1 );         cout << 'M';         x1 = x;     } } void m2skos( int y1, int x1, int z ) {     for( int i = 1; i <= z; i++ )     {         y1++;         gotoxy( x1, y1 );         cout << 'M';         x1++;              }     for( int i = 1; i <= z - 1; i++ )     {         y1--;         gotoxy( x1, y1 );         cout << 'M';         x1++;     } } void dwapoziom( int y1, int x1, int y, int dl ) {     for( int i = 1; i < dl; i++ )     {         x1++;         gotoxy( x1, y1 );         cout << '2';         y1 = y +(( dl - dl % 2 ) / 2 - 1 ) + 2;         gotoxy( x1, y1 );         cout << '2';         y1 = y + dl;         gotoxy( x1, y1 );         cout << '2';         y1 = y + 1;     } } void dwaprawo( int x1, int y1, int dl ) {     for( int i = 0; i <( dl - dl % 2 ) / 2 - 1; i++ )     {         cout << '2';         y1++;         gotoxy( x1, y1 );     } } void dwalewo( int x1, int y1, int dl ) {     for( int i = 0; i <( dl + dl % 2 ) / 2 - 2; i++ )     {         cout << '2';         y1++;         gotoxy( x1, y1 );     } } void legenda( int x1, int y1, int y2, int g, int f ) {     string T[ 10 ];     for( int i = 0; i < 80; i++ )          cout << '-';          x1 =( 80 - 8 ) / 2;     y1 = y2 + 1;     gotoxy( x1, y1 );     cout << "LEGENDA:";     T[ 0 ] = "Powiekszanie: +";     T[ 1 ] = "Pomniejszanie: -";     T[ 2 ] = "Przsuniecie w lewo: <-";     T[ 3 ] = "Przesuniecie w prawo: ->";     T[ 4 ] = "Przesuniecie w gore: ^";     T[ 5 ] = "Przesuniecie w dol: *";     T[ 6 ] = "Wyjscie: ESC";     g = 0;     f = 1;     x1 = 1;     y1++;     gotoxy( x1, y1 );     for( int i = 0; i <= 6; i++ )     {         x1 = 1;         y1++;         gotoxy( x1, y1 );         cout << T[ g ];         x1 = 40;         gotoxy( x1, y1 );         cout << T[ f ];         if( g <= 6 )              g = g + 2;                  if( f <= 5 )              f = f + 2;              } } void sterowanie( int & x, int & y, int & dl, int & szer, int & z, int & a, char & klawisz ) {     switch( klawisz )     {     case 43: if( dl <= 17 && x <= 80 - 2 *( z + z ) - dl - 3 && y <= 25 && x > 1 && y > 0 )         {             dl++;             szer++;             z++;             a++;             y--;             x--;             break;         }     case 45: if( dl > 5 && szer > 4 )         {             dl--;             szer--;             z--;             a--;             y++;             x = x + 3;             break;         }     case 72: if( y > 0 )         {             y--;             break;         }     case 80: if( y < 26 - dl )         {             y++;             break;         }     case 75: if( x > 1 )         {             x--;             break;         }     case 77: if( x < 80 - 2 *( z + z - 1 ) - dl - 2 )         {             x++;             break;         }     } }
  Chodzi o to aby ten kod był bardziej czytelny jakoś i pomyślałem, że część funkcji (głównie te funkcje odpowiedzialne za rysowanie liter) wywalić do innego pliku, a plik z funkcją główną będzie je sobie pobierał.   | 
 | 
DejaVu  | 
» 2011-01-08 07:38:33 W zasadzie jeżeli działa to i może tak być. Rozwiązanie nie jest jednak poprawne, bowiem za pomocą #include nie należy dołączać plików źródłowych (*.cpp) tylko pliki nagłówkowe (*.h / *.hpp). Co do czyszczenia ekranu. Skoro nie chcesz czyścić całego ekranu to zamaluj prostokątem obszar, który chcesz 'zmazać'. Nie wiem czy taką funkcję masz dostępną w tym czego używasz ale to jest jakieś rozwiązanie. A jeżeli nie masz takiej funkcji to po prostu rysuj menu czy cokolwiek innego po każdym czyszczeniu ekranu i sprawę będziesz miał załatwioną.  | 
 | 
Marys Temat założony przez niniejszego użytkownika  | 
» 2011-01-08 12:15:23 Nie kumam tego z tym clearscreenem. Babka mi powiedziała, że mam zdefiniować jakby dwa okna i jedno będzie miało clearscreena a drugie nie, ale kompletnie nie wiem o co chodzi i jak to zrobić :/  | 
 | 
malan  | 
» 2011-01-08 15:13:06 Mam coś, co mogłoby rozwiązać Twój problem aczkolwiek przy próbie kompilacji Twojego kodu wyskakuje trochę błędów.  1. Na jakim IDE pracujesz? Borland? 2. System operacyjny? 3. Ten kod jest kompletny? /edit: #include <windows.h>
 
 
  HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
  CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo( hConsole, & info );
  COORD newLocation = { 0, 0 };
  DWORD writtenChars; FillConsoleOutputCharacterW( hConsole, L' ', info.dwSize.X * info.dwSize.Y, newLocation, & writtenChars );
  SetConsoleCursorPosition( hConsole, newLocation ); Zamiast  info.dwSize.Y  wstaw pozycję (OY), która będzie mówiła, gdzie zakończyć czyszczenie. Czyli, w Twoim przypadku, to będzie miejsce, gdzie zaczynasz rysować linię nad "legendą". Nie testowałem, ale spróbować nie zaszkodzi ;p.  | 
 | 
Marys Temat założony przez niniejszego użytkownika  | 
» 2011-01-09 23:46:02 Tak na Borlandzie. Windows Tak to jest kompletny kod  | 
 | 
Marys Temat założony przez niniejszego użytkownika  | 
» 2011-01-10 02:21:17 A można jakoś podzielić konsole na 2 okna?  Znalazłem taki kod, ale Builder nie ma takiej biblioteki. Proszę o szybką pomoc.   | 
 | 
|  « 1 »  2 3 |