Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Смещение курсора в консоли

Страницы: 1
Смещение курсора в консоли
Начну с начала. Была задача в консоле вывести деление столбиком. Если помните, то, когда пишешь на бумаге, последующие остатки пишутся со смещением. Перерыла весь интернет, но так и не нашла как сместить курсор на нужную мне позицию. А сама не помню, можете убить. Я исхитрилась и просто начала добавлять перед выводом данных нужное количество пробелов. Конечно это было все в цикле и после вычислений и вывода данных, я к строке с пробелами добавляла еще один. У меня все прекрасно выводится, прогу я сдала заказчику. В принципе там код препод не проверял и он сдал. Но меня гложут сомнения по поводу того, что я сделала с хитрецой, а некак положено.
Помогите разобраться или я все правильно сделала и нет никакой функции для смещения курсора?
Ну кто-нибудь сообразил или нет?
Код
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
 hCon:integer;

procedure GotoXY(aX, aY, hCon: integer);
var
 aCoord: TCoord;
begin
  aCoord.x:=aX;
  aCoord.y:=aY;
  SetConsoleCursorPosition(hCon, aCoord);
end;

begin
  try
   hCon := GetStdHandle(STD_OUTPUT_HANDLE);
   GotoXY(32,12, hCon);
   Writeln('Hello world!');
   Readln;
  except
    on E: Exception do
     begin
      Writeln(E.ClassName, ': ', E.Message);
      Readln;
     end;
  end;
end.
А как считать позицию курсора в данный момент?
Полагаю в начальный момент, значения координат по x и y должны быть равны 0
Не в начальный, а в тот момент когда я начинаю выводить нужные мне данные со смещением. Сначала действительно х=0, на следующей строке х должен сместиться на один пробел, вывести данные, под этим еще вывести данные с таким же смещением, на следующе строке выводится, добавив еще один пробел. Вот такое должно быть:
100000000000|01010101
+
01010101
--------
"10101010
"+
"01010101
"--------
""11111110
""+
""01010101
""---------
"""01010100
"""+
"""01010101

"-это пробел
Изменено: Ольга Кабушева - 21.06.2010 00:27:40
Так а в чём проблема?
Заведите две переменные (X, Y:integer) и манипулируйте ними как Вам угодно smile;) smile8)
Пусть цикл каждый раз добавлят например X+3 и y+2, Все будет ровно.
А я сделала проще, просто в цикле, когда это все вычисляется и выводится на экран, добавляла к строке пробел. Конечно не правильно и так профессионалы не делают, но это не занимает кучу места в коде и быстродействие проги не страдает.
А чем Вас не устроил предложенный мною способ?
ну и правильно, чем проще код, тем лучше, я б наверн тоже так сделал. Нужен же только результат на экране.
Цитата
Valera пишет:
А чем Вас не устроил предложенный мною способ?

Пиши я не для студента работу, а для какой-нить фирмы, то сделала бы солидней и как предложили Вы. А так нужен был результат на экране преподователю и он даже код не смотрел, поэтому сделала проще. А так это лишний раз нужно было бы смотреть какое смещение нужно для каждого случая.
Хитрость тоже нужна. Иногда вообще не знаешь как написать код.
Изменено: mihail filatov - 08.08.2010 00:39:53
Даже когда пользователи смотрят демо продукта, они не могут представить, что там творится в коде, или им это не нужно. Главное, чтобы без ошибок.
Accende lumen sensibus, infude ainorem corbidus!
ну если только программа не выполняет 100 действий в секунду, где важен правильный и быстрый алгоритм.
Цитата
mihail filatov пишет:
ну если только программа не выполняет 100 действий в секунду, где важен правильный и быстрый алгоритм.

Это я согласна. Но в данном случае просто был цикл разных вычислений и мне в нужный момент вычисления надо было выводить на экран. Так что то что я добавляла пустую строку перед выводом данных не повлияло на быстродействие. Я упростила алгоритм, чтобы чужому человеку не знающему программирование, не вдаваться в подробности и не смотреть лишнию функцию в программе.
Да и компьютеры сейчас быстрые.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)