Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 02:08   #1
hypersash
 
Регистрация: 21.12.2011
Сообщений: 4
Радость Убрать фуллскрин в граф. режиме

Всем доброго времени суток! Есть некий код (аналаговые часы на турбо паскале), честно не мой, а выловленный в Сети. Так вот на ХРюше он запускаеться без проблем, а в школе на 7мерке фул скрин не поддерживаеться. Ткните носом, где этот фулскрин выставлен, а то мы его еще не проходили. Поидее запустить бы это все в окошке 640х480, или что-то около того Спасибо!

Код:
uses graph, crt, dos;

type
 TPoint = record
  x, y: Real;
 end;

var
 H, M,
 S, Hund : Word;
 Xc,
 Yc,
 i       : Integer;
 P,  P2,
 P3, P4,
 P5, P6  : TPoint;

procedure Dec2Polar(Ang, Len: Real; var P: TPoint);
begin
 Ang := Ang - 90; { Correlation for our coord system }
 P.x := Xc + Len * cos(Ang * Pi / 180);
 P.y := Yc + Len * sin(Ang * Pi / 180);
end;

begin
 i := 0;
 InitGraph(i, i, '');
 Xc := GetMaxX div 2;
 Yc := GetMaxY div 2;

 SetColor(10);
 Circle(Xc, Yc, Yc - 30);
 SetColor(2);
 Circle(Xc, Yc, 3);

 SetColor(14);
 for i := 0 to 23 do
 begin
  Dec2Polar(i * 15, Yc - 40, P);
  Circle(Round(P.x), Round(P.y), 2 + 3*Byte(i mod 2 = 0));
 end;

{ SetLineStyle(0, 0, 3);}
 while not keypressed do
 begin
  { Erase }
  SetColor(0);
  Line(Round(P2.x), Round(P2.y), Round(P.x), Round(P.y));
  Line(Round(P4.x), Round(P4.y), Round(P3.x), Round(P3.y));
  Line(Round(P6.x), Round(P6.y), Round(P5.x), Round(P5.y));

  GetTime(H, M, S, Hund);

  { Second arrow }
  Dec2Polar((S + Hund/100) * 6, Yc - 50, P);
  Dec2Polar((S + Hund/100) * 6, 5, P2);

  { Minute arrow }
  Dec2Polar((M + S/60) * 6, Yc - 100, P3);
  Dec2Polar((M + S/60) * 6, 5, P4);

  { Hour arrow }
  Dec2Polar((H + M/60) * 30, Yc - 150, P5);
  Dec2Polar((H + M/60) * 30, 5, P6);

  { Redraw }
  SetColor(15);
  Line(Round(P2.x), Round(P2.y), Round(P.x), Round(P.y));

  SetColor(9);
  Line(Round(P4.x), Round(P4.y), Round(P3.x), Round(P3.y));

  SetColor(7);
  Line(Round(P6.x), Round(P6.y), Round(P5.x), Round(P5.y));

  delay(1000);
 end;
 CloseGraph;
end.
hypersash вне форума Ответить с цитированием
Старый 08.05.2012, 08:21   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от hypersash Посмотреть сообщение
(аналаговые часы на турбо паскале)
- это для меня звучит как "аналоговый автомобиль на конской тяге"..
Цитата:
в школе на 7мерке фул скрин не поддерживаеться. Ткните носом, где этот фулскрин выставлен, а то мы его еще не проходили. Поидее запустить бы это все в окошке 640х480, или что-то около того
Просил - тыкаю..
TurboPascal ничего не знает про Windows. Искать в нем неполноэкранный режим - это все равно как в лошади искать горловину для заправки бензином. Скопируй свой TP на дискеты и прибей их гвоздиками на стенку - на память, а с ЖД сотри. Сделал? А теперь слушай сюда..

1. Скачай FreePascal с сайта http://freepascal.org/ и установи.
2. Исправь неправильный вызов InitGraph в той проге: заведи две переменные типа integer, gd и gm, а не одну левую переменную i; gd инициализируй нулем.
3. Вместо CRT используй WinCRT.

И будет тебе щастье..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 08.05.2012, 09:33   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

к абсолютно верному ответу TinMan добавлю.
Если по какой-то тайной причине от конской тяги отказываться не получается (я имею в виду TurboPascal), то победить полноэкранный режим можно с помощью программы DosBox.
(это эмулятор - среда выполнения для DOS программ, нужно будет Вам запускать своё приложение под этим эмулятором)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.05.2012, 00:18   #4
hypersash
 
Регистрация: 21.12.2011
Сообщений: 4
По умолчанию

Спасибо за советы, все сделал, не помогло. Я пишу в Лазарусе, другого наша училка не приемлет, в том числе и эмуляторы, так как самописная прога должна нормально запуститься в неполноэранном режиме. Просто когда с нуля пишешь в графическом режиме, он не ставит фулл скрин, вот я и думал, что за это какая команда отвечает. А так получилось что в Сети нашел, и западло такое, а самому такую тупость реально лень писать. Ну а то что это все не то, так у нас программа школьная такая..

Теперь что-то вроде того, но ничег не поменялось:
Код:
uses graph, WinCRT, dos;

type
 TPoint = record
  x, y: Real;
 end;

var
 H, M,
 S, Hund : Word;
 Xc,
 Yc,
 Gd, Gm  : Integer;
 P,  P2,
 P3, P4,
 P5, P6  : TPoint;

procedure Dec2Polar(Ang, Len: Real; var P: TPoint);
begin
 Ang := Ang - 90; { Correlation for our coord system }
 P.x := Xc + Len * cos(Ang * Pi / 180);
 P.y := Yc + Len * sin(Ang * Pi / 180);
end;

begin
 Gd := 0;
 InitGraph(Gd, Gm, '');
 Xc := GetMaxX div 2;
 Yc := GetMaxY div 2;

 SetColor(10);
 Circle(Xc, Yc, Yc - 30);
 SetColor(2);
 Circle(Xc, Yc, 3);

 SetColor(14);
 for i := 0 to 23 do
 begin
  Dec2Polar(Gd * 15, Yc - 40, P);
  Circle(Round(P.x), Round(P.y), 2 + 3*Byte(i mod 2 = 0));
 end;

{ SetLineStyle(0, 0, 3);}
 while not keypressed do
 begin
  { Erase }
  SetColor(0);
  Line(Round(P2.x), Round(P2.y), Round(P.x), Round(P.y));
  Line(Round(P4.x), Round(P4.y), Round(P3.x), Round(P3.y));
  Line(Round(P6.x), Round(P6.y), Round(P5.x), Round(P5.y));

  GetTime(H, M, S, Hund);

  { Second arrow }
  Dec2Polar((S + Hund/100) * 6, Yc - 50, P);
  Dec2Polar((S + Hund/100) * 6, 5, P2);

  { Minute arrow }
  Dec2Polar((M + S/60) * 6, Yc - 100, P3);
  Dec2Polar((M + S/60) * 6, 5, P4);

  { Hour arrow }
  Dec2Polar((H + M/60) * 30, Yc - 150, P5);
  Dec2Polar((H + M/60) * 30, 5, P6);

  { Redraw }
  SetColor(15);
  Line(Round(P2.x), Round(P2.y), Round(P.x), Round(P.y));

  SetColor(9);
  Line(Round(P4.x), Round(P4.y), Round(P3.x), Round(P3.y));

  SetColor(7);
  Line(Round(P6.x), Round(P6.y), Round(P5.x), Round(P5.y));

  delay(1000);
 end;
 CloseGraph;
end.

Последний раз редактировалось hypersash; 09.05.2012 в 00:27.
hypersash вне форума Ответить с цитированием
Старый 09.05.2012, 06:19   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от hypersash Посмотреть сообщение
Я пишу в Лазарусе, другого наша училка не приемлет, в том числе и эмуляторы, так как самописная прога должна нормально запуститься в неполноэранном режиме.
...
Теперь что-то вроде того, но ничег не поменялось:
Чет'я не понял.. ты пишешь в Lazarus?? Так при чем тут тогда TP, упомянутый тобой в первом посте?

Короче, еще раз повторю на всяк случай, что если тот код, который ты привел выше, скомпилить в FreePascal (на котором, собсно, базируется Lazarus), то все прекрасно отработает на Win 7 (как 32, так и 64), и часы нормально пойдут. Окно будет размернуто на весь экран, но это будет все же окно. Если же ты заглянешь в документацию и проинициализируешь gd и gm, например, так:
Код:
 gd:= VGA;
 gm:= VGAhi;
 InitGraph(gd, gm, '');
- то получишь окно 640х480.

Если ты, тем более, не новичок в программировании, то должен понимать, что нельзя опускать существенные детали при описании своей проблемы. А написание часов типа таких вообще занимает не более получаса с нуля.. Где-то я не так давно такие кидал, надо пошукать.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 09.05.2012, 08:34   #6
hypersash
 
Регистрация: 21.12.2011
Сообщений: 4
По умолчанию

Ой, сори, фрипаскаль. Затупил неимоверно. А за помощь спасибо огромное, все заработало, вот рабочий код.
Код:
uses graph, WinCRT, dos;

type
 TPoint = record
  x, y: Real;
 end;

var
 H, M,
 S, Hund : Word;
 Xc,
 Yc,
 Gd, Gm  : smallint;
 P,  P2,
 P3, P4,
 P5, P6  : TPoint;

procedure Dec2Polar(Ang, Len: Real; var P: TPoint);
begin
 Ang := Ang - 90; { Correlation for our coord system }
 P.x := Xc + Len * cos(Ang * Pi / 180);
 P.y := Yc + Len * sin(Ang * Pi / 180);
end;

begin
 Gd := VGA;
 Gm := VGAhi;
 InitGraph(Gd, Gm, '');
 Xc := GetMaxX div 2;
 Yc := GetMaxY div 2;

 SetColor(10);
 Circle(Xc, Yc, Yc - 30);
 SetColor(2);
 Circle(Xc, Yc, 3);

 SetColor(14);
 for Gd := 0 to 23 do
 begin
  Dec2Polar(Gd * 15, Yc - 40, P);
  Circle(Round(P.x), Round(P.y), 2 + 3*Byte(Gd mod 2 = 0));
 end;

{ SetLineStyle(0, 0, 3);}
 while not keypressed do
 begin
  { Erase }
  SetColor(0);
  Line(Round(P2.x), Round(P2.y), Round(P.x), Round(P.y));
  Line(Round(P4.x), Round(P4.y), Round(P3.x), Round(P3.y));
  Line(Round(P6.x), Round(P6.y), Round(P5.x), Round(P5.y));

  GetTime(H, M, S, Hund);

  { Second arrow }
  Dec2Polar((S + Hund/100) * 6, Yc - 50, P);
  Dec2Polar((S + Hund/100) * 6, 5, P2);

  { Minute arrow }
  Dec2Polar((M + S/60) * 6, Yc - 100, P3);
  Dec2Polar((M + S/60) * 6, 5, P4);

  { Hour arrow }
  Dec2Polar((H + M/60) * 30, Yc - 150, P5);
  Dec2Polar((H + M/60) * 30, 5, P6);

  { Redraw }
  SetColor(15);
  Line(Round(P2.x), Round(P2.y), Round(P.x), Round(P.y));

  SetColor(9);
  Line(Round(P4.x), Round(P4.y), Round(P3.x), Round(P3.y));

  SetColor(7);
  Line(Round(P6.x), Round(P6.y), Round(P5.x), Round(P5.y));

  delay(1000);
 end;
 CloseGraph;
end.
hypersash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в граф. режиме ... gefest58 Паскаль, Turbo Pascal, PascalABC.NET 7 23.01.2011 15:39
Работа с файлами. Вывод в Граф режиме. Паскаль. HITMAN 09 Помощь студентам 8 23.04.2009 20:36
Кракозябры в граф. режиме паскаля. soldm Паскаль, Turbo Pascal, PascalABC.NET 4 21.03.2009 01:04
переменная в граф. режиме. t13sto Паскаль, Turbo Pascal, PascalABC.NET 7 21.07.2008 14:25