Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 21.04.2014, 22:34   #11 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

к сожалению, у меня не было возможности ответить раньше(
мой паскаль ругается, выдает ошибку "file not found" в первой строке. ему не нравится модуль Graph(
Светик123 вне форума   Ответить с цитированием

Старый 21.04.2014, 22:34
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме можно найти похожие топики, помогу вам в этом

Турбо Паскаль. Тип запись
Турбо Паскаль. Рекурсии
Программа в Турбо-Паскаль 7,0
Задание Паскаль

Старый 22.04.2014, 11:08   #12 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, ну этого я и опасался.
Ну что же, попробуем решить проблему.

Начнем с вопроса: есть ли в составе Вашего пакета TurboPascal файл по имени graph.tpu?
Всё остальное - только в случае положительного ответа на этот вопрос.
Итак, если таковой файл имеется, то:
1. Открываем Турбо Среду.
2. Там лезем в Options - Directories.
3. В открывшемся окошке находим строку Unit Directories. Убеждаемся, что там правильно прописан путь к папке, в которой сидит graph.tpu. Если строка пустая или путь не соответствует, то вписываем правильный путь (напр. у меня это C:\TP\UNITS), после чего жмём ОК, потом обязательно вновь щелкаем по Options, а затем по Save.
4. Запускаем программу "Гармошка".
Если она перестанет ругаться на отсутствие файла, но тем не менее не запустится, то начнем конфигурировать параметры процедуры запуска InitGraph.
Но это уже следующий этап.

Если же файла graph.tpu у Вас не обнаруживается, то это означает, что либо там встроена другая (не Borland) графика, либо графика отсутствует вовсе. Если так, то - увы!

P.S. Света, всё-таки было бы очень желательно, если бы Вы смогли появляться здесь почаще. А то при коротких визитах раз в неделю мы, боюсь, протелепаемся с этой задачкой до Нового года.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.04.2014, 22:27   #13 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

я сделала, как вы мне сказали. итог: на отсутствие файла перестал ругаться, но выдал следующее сообщение: BGI Error: Graphics not initialized (use InitGraph)
Светик123 вне форума   Ответить с цитированием
Старый 22.04.2014, 22:40   #14 (permalink)
Daniellos
Хозяин Медной Горы
 
Аватар для Daniellos
 
Регистрация: 01.08.2011
Адрес: Армавир
Сообщений: 12,159
Записей в дневнике: 8
Сказал(а) спасибо: 751
Поблагодарили 88 раз(а) в 27 сообщениях
Репутация: 57416
По умолчанию

Тогда в этой строке вашей программы
Код:
 InitGraph(grDriver, grMode, '');
где стоят апострофы ' ', указать путь к вашему *.bgi файлу. Например:
Код:
InitGraph(grDriver, grMode, 'D:\TP\BIN\');
Ищите в папках egavga.bgi
Daniellos вне форума   Ответить с цитированием
Старый 23.04.2014, 21:19   #15 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

программа заработала, спасибо. только получается, что гармошка не "играет туда-обратно" а растягивается только в одном направлении. можно, пожалуйста, подредактировать так, чтобы гармошка "играла в обе стороны"?)
Светик123 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 24.04.2014, 09:38   #16 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Светик123 Посмотреть сообщение
программа заработала, спасибо. только получается, что гармошка не "играет туда-обратно" а растягивается только в одном направлении. можно, пожалуйста, подредактировать так, чтобы гармошка "играла в обе стороны"?)
Хм... до крайности странно. У меня гармошка вот именно "играет в обе стороны", сперва растягивается, потом, дойдя до левого края экрана, сжимается, потом обратно идёт, и так до нажатия любой клавиши. Похоже, у Вас не срабатывает условие окончания цикла растяжки и перехода к сжатию. Ладно, подумаю.

Ага, кажется понял, "где собачка порылась". Вероятно, Ваш Паскаль несколько строже относится к совместимости типов данных, чем мой. А потому попробуйте заменить функцию LeftBorder на такой вариант:
Код:
Function LeftBorder(Step:Word):Boolean;
var LB:Integer;
begin
 LB:=-16*Step-35+X0;
 LeftBorder:=LB>0;
end;
Vladimir_S вне форума   Ответить с цитированием
Старый 24.04.2014, 11:11   #17 (permalink)
poiu
Member
 
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
По умолчанию

у меня tp7 тоже грамонь играет в одну сторону.
а со сменой функции вообще какие то артефакты, не правильно отрисовывает.
poiu вне форума   Ответить с цитированием
Старый 24.04.2014, 11:22   #18 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от poiu Посмотреть сообщение
у меня tp7 тоже грамонь играет в одну сторону.
а со сменой функции вообще какие то артефакты, не правильно отрисовывает.
Совсем не понимаю. Сейчас запустил (с измененной функцией) в TP7 (обычно я работаю с FreePascal) - безупречно!
Правда, есть одно "но": оба пакета я гоняю исключительно в DOS-моде с эмуляцией VGA-экрана (640х480). А Вы, вероятно, запускаете в оконном? Может быть, дело в этом?
Ладно, поразмыслю над другим вариантом прерывания цикла растяжки и перехода к циклу сжатия.
Vladimir_S вне форума   Ответить с цитированием
Старый 24.04.2014, 11:37   #19 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Протестируйте, пожалуйста, такой вариант:
Код:
Uses CRT, Graph;

Var
 X0,Y0,StepX,StepX_max:Word;
 grDriver, grMode: Integer;

Procedure Garm(Step:Word);
var i:byte;
begin
 SetLineStyle(SolidLn,0,ThickWidth);
 Line(X0,Y0-40,X0,Y0+40);
 for i:=1 to 8 do
  begin
   Line(X0-Step*2*i,Y0-40,X0-Step*2*i,Y0+40);
   Line(X0+Step*2*i,Y0-40,X0+Step*2*i,Y0+40);
  end;
 SetLineStyle(SolidLn,0,NormWidth);
 for i:=1 to 8 do
  begin
   Line(X0-Step*(2*i-1),Y0-30,X0-Step*(2*i-1),Y0+30);
   Line(X0+Step*(2*i-1),Y0-30,X0+Step*(2*i-1),Y0+30);
  end;
 MoveTo(X0,Y0-40);
 for i:=1 to 8 do
  begin
   LineTo(X0-step*(2*i-1),Y0-30);
   LineTo(X0-step*2*i,Y0-40);
  end;
 MoveTo(X0,Y0+40);
 for i:=1 to 8 do
  begin
   LineTo(X0-step*(2*i-1),Y0+30);
   LineTo(X0-step*2*i,Y0+40);
  end;
 MoveTo(X0,Y0-40);
 for i:=1 to 8 do
  begin
   LineTo(X0+step*(2*i-1),Y0-30);
   LineTo(X0+step*2*i,Y0-40);
  end;
 MoveTo(X0,Y0+40);
 for i:=1 to 8 do
  begin
   LineTo(X0+step*(2*i-1),Y0+30);
   LineTo(X0+step*2*i,Y0+40);
  end;
end;

Procedure Left(Step:Word);
begin
 SetLineStyle(SolidLn,0,ThickWidth);
 Rectangle(X0-16*Step,Y0-40,X0-16*Step-35,Y0+40);
 Line(X0-16*Step-20,Y0-40,X0-16*Step-20,Y0+40);
end;

Procedure Right(Step:Word);
begin
 SetLineStyle(SolidLn,0,ThickWidth);
 Rectangle(X0+16*Step,Y0-40,X0+16*Step+20,Y0+40);
end;

Begin
 grDriver:=Detect;
 InitGraph(grDriver, grMode, '________'); - тут самостоятельно!
 
 X0:=GetMaxX div 2;
 Y0:=GetMaxY div 2;
 StepX_max:=Trunc((X0-35)/16);
 StepX:=4;
 ClearDevice;
 Garm(StepX);
 Left(StepX);
 Right(StepX);
 SetTextJustify(CenterText,BottomText);
 OutTextXY(X0,Y0*2-20,'Press any key to start...');
 ReadKey;
 Repeat
  StepX:=4;
  repeat
   StepX:=StepX+1;
   If StepX<=StepX_max then
    begin
     ClearDevice;
     Garm(StepX);
     Left(StepX);
     Right(StepX);
     OutTextXY(X0,Y0*2-20,'Press any key to stop...');
     Delay(100);
    end;
  until (StepX>=StepX_max) or KeyPressed;
  repeat
   StepX:=StepX-1;
   If StepX>3 then
    begin
     ClearDevice;
     Garm(StepX);
     Left(StepX);
     Right(StepX);
     OutTextXY(X0,Y0*2-20,'Press any key to stop...');
     Delay(100);
    end;
  until (StepX=3) or KeyPressed;
 Until KeyPressed;
 ReadKey;
 CloseGraph;
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 24.04.2014, 12:41   #20 (permalink)
poiu
Member
 
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
По умолчанию

подтверждаю. в DOS-mode работает туда и обратно. запускал через DOSBox 0.74.
poiu вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 17:03.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.