Aplikacja Konsolowa - Clear Screen

0

Jak w temacie, jak zrobić Clear Screen w Aplikacji Konsolowej ?
Czytałem WinSDK ale nie znalazłem konkretnie do tego
przeznaczonej funkcji, jedyne co mi przychodzi do głowy
to ustawić cursor na 0,0 i wypluć kilkaset spacji i potem
znowu wrócić na 0,0 ale może jest lepszy sposób ?

0

Jest lepszy sposób, o ile dobrze pamietam był omawiany w ostatnim tygodniu sierpnia... Mozesz również wypóbowac znakomity unit z Jedi Code Library: JclConstole.pas

0

nie wiem czy to pomoze ale kiedys mialem modul WINCRT z takimi samymi funkcjami jak w pascalu, poszukaj, ewentualnie postaram sie wrzucic linka

0

WinCrt nie zadziała jak trzeba, za to jest biblioteka Crt dla Delphi. WinCrt tworzy okienko w stylu notatnika, a nie aplikację konsolową.

0

[code]
#include <windows.h>
void ClrScr() {
COORD pos;
pos.X = 0;
pos.Y = 0;
unsigned long ile;

FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0 ,2000,pos,&ile);
// czysci na czarno 

}
[/code]
Kod pod 32 bitowa konsole windowsowa !!
Lub znacznie prosciej ;)
[code]
system("cls");
// czysci aktualny ekran
[/code]

0

Wybacz, ale chyba pomyliłeś działy... To jest dział Delphi, a nie C.

//Po co cytujesz cały poprzedni post? - m.M

0

Wybacz ale nawet delphi dziala pod Winda !!
Wiec ten kod dla aplikacji konsolowej dzialajacej pod Winda win32 jest jak najbardziej poprawny !! Nawet delphi nic nie zrobi bez windows.h [diabel]
Moze zle sie wyrazilem - chodzilo mi o to ze i tak delphi musi korzystac z tego co mu udostepnia Windows moze inaczej sie wywyoluje (czasami niestety ale tez nazywa) ale dalej dzialanie jest takie samo - wiec jak ktos zechece to przerobienie mojego kodu na delphi to pikus.

0

przerobienie jest latwe dla kogos kto zna dobrze oba jezyki, ja C za dobrze nie znam i ten kodzik mi np nie pomoze.

poza tym watpie by to dzialalo jakbys to wkleil do delphi ;)

mowisz ze nic by nie zrobil bez windows.h, ja tam takiego pliku nie znalazlem. delphi wykorzystuje object pascala a nie c++. owszem czasem wykorzystuje kody z C++ ale i C++ wykorzystuje kody pascala i innych jezykow programowania, to jest normalne i oczywiste, tak jak trawa jest zielona ;)

//marooned, masz racje, jesli chodzi o ten przypadek, ale jak ma sie dluzsze i bardziej skomplikowane kody to juz nie jest tak rozowo :)
przepraszam jesli kogos urazilem, nie chcialem

0

przerobienie jest latwe dla kogos kto zna dobrze oba jezyki, ja C za dobrze nie znam i ten kodzik mi np nie pomoze.

poza tym watpie by to dzialalo jakbys to wkleil do delphi ;)

Przecież to jest czyste WinAPI! Co tu ma nie działać?? Zamień "=" na ":=" i po krzyku - takie to trudne?

[<font color="blue">dopisane</span>]
Nikogo nie uraziłeś, ale następnym razem "myśleć" ;p

0

Lub znacznie prosciej ;)
[code]system("cls");
// czysci aktualny ekran
[/code]

niestety w Delphi nie ma takich bajerów ;-(

a kod trochę wzbogaciłem i działa ładnie, thx...

procedure ClrScr;
var
  Noaw : DWORD;
  Coord : TCoord;
  ConHand : THandle;
  Csbi : TConsoleScreenBufferInfo;
begin
  Coord.X := 0; Coord.Y := 0;
  ConHand := GetStdHandle(STD_OUTPUT_HANDLE);
  GetConsoleScreenBufferInfo(ConHand, Csbi);
  FillConsoleOutputCharacter(ConHand, #32, 
    Csbi.dwSize.X * Csbi.dwSize.Y, Coord, Noaw);
  SetConsoleCursorPosition(ConHand, Coord);
end;
0

Czyli jak mowilem dla chcacego nie ma nic trudne :) piechnat to udowodnil !!
Jak widac Delphi pod Winda musi byc zgodne z WinApi i dlatego kazdy
kod z czystego WinApi po drobnych przerobkach pojdzie w okienkowej aplikacji w Delphi

  • nie wierzysz to patrz kod wyzej [diabel]

PS. Odpowiednik system() tez chyba powinien sie znalezc !! Bo jak w Delphi mozna wywolac
komendy systemowe ?!

0

PS. Odpowiednik system() tez chyba powinien sie znalezc !! Bo jak w Delphi mozna wywolac
komendy systemowe ?!

Problem w tym, że raczej nie ma funkcji przeznaczonej tylko
i wyłącznie do poleceń systemowych, można najwyżej wykonać
komendę systemową przez interpreter poleceń
(command.com lub cmd.exe), ale:

ShellExecute - spowoduje otworzenie się nowego okienka,
w którym wykona się to polecenie...

WinExec - zadziała w bieżącej konsoli, ale tak samo
jak i poprzednia funkcja nie zaczeka do końca wykonywania
się tego polecenia, tzn:

  WriteLn('Text1');
  ReadLn;
  WinExec('cmd.exe /c cls', SW_SHOW);
  WriteLn('Text2');
  ReadLn;

W trzeciej linii zostanie uruchomiony CLS, później
w czwartej wyświetli się Text2 i dopiero gdzieś koło piątej
lini uruchomiony CLS pokaże efekt swojego działania,
więc Text2 zniknie zanim się go zobaczy...

Wyjściem jest danie po WinExec Sleep(100) - 100 milisekund
oczekiwania, ale to śmieszne rozwiązanie problemu...

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