Помощь - Поиск - Пользователи - Календарь
Полная версия: Ввод текста в графическом режиме
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
xMajestic
Приветсвую всех Паскалеведов, обитающих тут. Собственно, возник вопрос, связанный с вводом в графическом режиме (если быть точным, то ввод чисел). Я поискал в различных учебниках по паскалю, мануалах и тп, но нигде не нашел даже упоминания про ввод в графическом режиме! Может быть, в паскале вообще такого не предусмотрено? Но если есть вывод, то почему не сделали ввод? Что нить типо функции intextXY? Если все-таки такое дело можно провернуть, то опишите плиз как это сделать... и эдак попроще... заранее признателен
Archon
Ну, может не самое лучшее решение, но я раньше пользовался (подкоректировал немного под твои нужды):

Procedure IntextXY(X, Y : integer; var Num : integer; symbols_num : integer);
Const
NUMS = ['0'..'9'];
Var
Str : string;
Key : char;
XX : integer;
Code : integer;
Begin
SetTextJustify(LeftText,BottomText);
SetFillStyle(SolidFill,0);
Bar(X, Y, X + 8 * (symbols_Num + 1), Y-8);
XX := X;
Line(X, Y, X+8, Y);
Str := '';
Repeat
While KeyPressed do ReadKey;
Key := ReadKey;
If (Key in NUMS) and (length(Str) < symbols_Num) then
Begin
Bar(X, Y, X + 8 * (symbols_num + 1), Y-8);
Inc(XX, 8);
Line(XX, Y, XX+8, Y);
Str := Str + Key;
OutTextXY(X,Y,Str);
End;
If (Key = #8) and (length(Str) > 0) then
Begin
Bar(X, Y, X + 8 * (Symbols_Num + 1), Y-8);
Dec(XX, 8);
Line(XX, Y, XX+8, Y);
Delete(Str, length(Str), 1);
OutTextXY(X,Y,Str);
End;
Until Key = #13;
Bar(XX, Y, XX+8, Y);
Val(Str, Num, Code);
End;

Guest
пасибо!
trminator
А directVideo := false? Можно будет делать так:

uses graph, CRT;
var d, m : integer;
s : string;
begin
d := 0; {autodetect}
directVideo := false;
InitGraph(d, m, 'c:\bp\bgi');

putPixel(10, 10, white);
gotoxy(5, 5); write('> '); readLn(s);

CloseGraph;
end.


то есть обычный readLn/writeLn работают. ЕМНИП, для этого и нужно выставлять directVideo := false, вроде как это чревато только потенциальной потерей быстродействия
Archon
Что делает directVideo?(извиняюсь за тупой вопрос, не сталкивался)

Оно, конечно, хорошо, только в любой точке экрана и любым шрифтом ты readln не поставишь...
trminator
Да, не в любой точке. Но все-таки gotoxy() от CRT работает. Хотя с точностью до пиксела не спозиционировать, и шрифт не выбрать (без извращений)... Но это просто один из вариантов, при этом самый простой smile.gif

Цитата
Что делает directVideo?

Извиняюсь за тупой ответ, но не вникал smile.gif
xds
Если DirectVideo = True, то консольный вывод осуществляется напрямую в видеобуфер. В противном случае Crt использует вызовы BIOS (int 10h).
Archon
Можно было по названию переменной догадаться... <_<
Romtek
Если прям так критична скорость (хотя при вводе текста она вообще не играет роли smile.gif ), то можно перед вводом написать directVideo := false; ввести текст через readln, а потом вернуть обратно directVideo := true;
where can i buy stromectol iverm
New Primatene Mist Inhaler
can you take ibuprofen with pred
Direct Provera Order
hydroxychloroquine online purcha
Comprare Viagra On Line E Reato
officeSIZ
hydra real estate gmbh
hydra real estate gmbh
hydra real estate gmbh
hydra real estate gmbh
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.