Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

ClrScr Turbo Pas a   Найти похожие ветки 

 
ArtemESC ©   (2005-12-18 19:02) [0]

Как сделать эмуляцию ClrScr в консольном проге?
Вроде было какое-то Dos-ое прерывание - вот только какое
забыл?


 
TUser ©   (2005-12-18 19:16) [1]

ShellExecute (..."cls"...


 
wicked ©   (2005-12-18 19:26) [2]

не претендую на точность, подглядел в выводе одной консольной аппликации, переведенном в файл - для очистки экрана там выводился символ FormFeed ("принтерный" прогон страницы) - код 0x12 (#18, #$12)....
может, для этого есть и какие другие средства, но в выводе это выглядело именно так....


 
Джо ©   (2005-12-18 19:27) [3]

В библиотеках FreePascalя, насколько помню, под Windows именно "прогон" видимой страницы использовался для эмуляции ClrScr, в Линуксе - какой-то системный вызов.


 
DrPass ©   (2005-12-18 19:33) [4]

Ну а в DOSовой консольной проге - как и все видеосервисы, int 10h. Подфункция, кажется, 06h


 
Джо ©   (2005-12-18 19:35) [5]


>  [4] DrPass ©   (18.12.05 19:33)


06 - Scroll page up
07 - Scroll page down


 
Anatoly Podgoretsky ©   (2005-12-18 19:39) [6]

FillConsoleOutputCharacter


 
DrPass ©   (2005-12-18 19:47) [7]

06 - Scroll page up & clear screen
07 - Scroll page down & clear screen
Для очистки экрана нужно просто вместо количества прокручиваемых строк указать 0


 
Джо ©   (2005-12-18 19:49) [8]


>  [7] DrPass ©   (18.12.05 19:47)

Я, это, не спорил :)) Просто подтверждал [4] DrPass © .


 
DrPass ©   (2005-12-18 20:02) [9]


Джо ©   (18.12.05 19:49) [8]
> Я, это, не спорил :))

Ладно, кладу винтовку на место :-P


 
sniknik ©   (2005-12-18 23:29) [10]

COORD = TCoord;

TWindCoord = packed record
   case integer of
     0: (Value: longword);
     1: (X, Y: word);
 end;

WindMin: longword;

procedure __MoveCursor(X, Y: word); register;
var
 C: COORD;
begin
 C.X := X;
 C.Y := Y;
 SetConsoleCursorPosition(_OutputHandle, C);
end;

procedure GotoXY(X, Y: integer);
var
 R, C: integer;
begin
 R := Y - 1 + TWindCoord(WindMin).Y;
 C := X - 1 + TWindCoord(WindMin).X;

 if ((R < TWindCoord(WindMin).Y) or (R > TWindCoord(WindMax).Y) or (C < TWindCoord(WindMin).X) or (C > TWindCoord(WindMax).X)) then
   Exit;

 __MoveCursor(C, R);
end;

procedure ClrScr;
var
 C: COORD;
 I, Len, NumWritten: DWORD;
begin
 if ((TWindCoord(WindMin).X = 0) and (TWindCoord(WindMin).Y = 0) and (TWindCoord(WindMax).X = _ScreenWidth - 1) and (TWindCoord(WindMax).Y = _ScreenHeight - 1)) then begin
   Len := _ScreenWidth * _ScreenHeight;
   C.X := 0;
   C.Y := 0;
   FillConsoleOutputCharacter(_OutputHandle, " ", Len, C, NumWritten);
   FillConsoleOutputAttribute(_OutputHandle, TextAttr, Len, C, NumWritten);
 end else begin
   Len := TWindCoord(WindMax).X - TWindCoord(WindMin).X + 1;
   C.X := TWindCoord(WindMin).X;
   for I := TWindCoord(WindMin).Y to TWindCoord(WindMax).Y do begin
     C.Y := I;
     FillConsoleOutputCharacter(_OutputHandle, " ", Len, C, NumWritten);
     FillConsoleOutputAttribute(_OutputHandle, TextAttr, Len, C, NumWritten);
   end;
 end;
 GotoXy(1, 1);
end;


вроде ничего не забыл... (это куски модуля crt)


 
DrPass ©   (2005-12-18 23:43) [11]

Это WinCrt. Страшная вещь


 
sniknik ©   (2005-12-19 00:10) [12]

> Это WinCrt. Страшная вещь
не страшная (долго смотрел, так и не испугался ;), но странная...
так и не понял например, зачем тип переменной обьявляется WindMin: longword; и после делаются приведения к TWindCoord для доступа к ее части, по всему модулю, если "цельным куском" она вообще нигде не используется. это вместо определения переменной сразу этим типом.

но... как есть так есть.



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
2-1135609972
puskin
2005-12-26 18:12
2006.01.15
MS SQL и D7


5-1120834246
Aleksandr.
2005-07-08 18:50
2006.01.15
Как Bmp включить в package?


14-1135172878
старый маразматик(с)
2005-12-21 16:47
2006.01.15
Ехсеl. есть ли возможность в нем делать суммирование по колонкам


2-1135339132
KvORubin
2005-12-23 14:58
2006.01.15
Программеры подскажите (примером) КАК ПЕРЕСЛАТЬ ФАЙЛ??


6-1128346174
kay
2005-10-03 17:29
2006.01.15
Как сделать, чтобы при использовании InternetConnect и прочих...