Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.023 c
5-1121024936
cranium
2005-07-10 23:48
2006.01.15
Компонет наследник TGraphicControl как узнать цвет родителя


5-1121121621
Brack
2005-07-12 02:40
2006.01.15
Как можно ScrollBox`у добавить свойство Canvas?


2-1135331222
РУДЗ
2005-12-23 12:47
2006.01.15
Использование ShortCut


2-1135208071
kotbazilio
2005-12-22 02:34
2006.01.15
Код символа


1-1134372715
OLEGnik
2005-12-12 10:31
2006.01.15
Экспорт функций по Index





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский