На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Делфи в Паскаль
    Всем доброго времени суток!
    Столкнулся с такой проблемой:
    есть программа в Delphi, которая рисует ночной городской пейзаж
    вот она:
    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, ExtCtrls, StdCtrls;
       
      type
        TForm1 = class(TForm)
          Button1: TButton;
          procedure Button1Click(Sender: TObject);
        private
          { Private declarations }
        public
          { Public declarations }
        end;
       
      var
        Form1: TForm1;
       
      implementation
       
      {$R *.dfm}
      {Событие на нажатие кнопки нарисовать }
      procedure TForm1.Button1Click(Sender: TObject);
      begin
       
      with form1.Canvas do
      begin
       // земля
       brush.color:=RGB(8,16,48);
      rectangle(0,350,1000,710);
      //небо
       brush.color:=RGB(4,3,35);
      rectangle(0,0,1000,350);
      // дома слева
        brush.color:=RGB(30,30,22);
        rectangle(0,125,150,550);
        brush.Color:=clGray;
        rectangle(200,200,350,500);
        brush.color:=RGB(200,195,138);
          brush.color:=RGB(25,19,16);
        rectangle(150,250,250,500);
         brush.color:=RGB(88,81,56);
       rectangle(200,425,375,536);
          // дома справа
             brush.color:=RGB(25,19,16);
             rectangle(725,100,875,400);
             brush.color:=RGB(94,91,65);
             rectangle(600,300,675,450);
              brush.color:=RGB(57,31,15);
             rectangle(650,350,750,550);
       
               brush.color:=RGB(64,75,99);
             rectangle(850,50,1000,575);
                brush.color:=RGB(53,54,54);
             rectangle(725,450,825,560);
       
      // Луна
      brush.Color:=clyellow;
      Ellipse(250,25,350,125);
      brush.Color:=RGB(4,3,35);
      Ellipse(245,20,345,120);
      // Звездочки
         brush.color:=RGB(254,255,211);
         Ellipse(475,90,478,93);
         Ellipse(500,100,503,103);
         Ellipse(525,125,528,128);
         Ellipse(550,163,553,166);
         Ellipse(625,163,628,166);
         Ellipse(634,125,637,128);
       
         //дорога
         brush.color:=RGB(85,84,86);
         rectangle(0,650,1000,700);
       
      moveTo(375,650);
      LineTo(525,350);
      LineTo(550,350);
      LineTo(440,650);
      LineTo(375,650);
      brush.Color:=RGB(85,84,86);
      floodFill(425,600,clblack,fsBorder);
       
       
      end;
      end;
       
      end.


    Но для сдачи курсовой мне нужно переделать ее в Turbo Pascal! Когда я начал переделывать программу, возникло много ошибок, которых я не смог исправить. Прошу помочь мне в этом деле, буду очень-очень признателен! Заранее большое спасибо!!!
    Вот, собственно, что у меня получилось:
    ExpandedWrap disabled
      program gorod;
      uses graph, crt;
      var gd, gr, err:integer;
      begin
      gd:=detect;
      gr:=VGAHi;
      InitGraph(gd,gr,' ');
      err:=GraphResult;
      if err=grOk then
      begin
      {Zemlya}
       brush.color:=RGB(8,16,48);
      rectangle(0,350,1000,710);
      { Nebo}
       brush.color:=RGB(4,3,35);
      rectangle(0,0,1000,350);
      { Bydunku zliva}
        brush.color:=RGB(30,30,22);
        rectangle(0,125,150,550);
        brush.Color:=clGray;
        rectangle(200,200,350,500);
        brush.color:=RGB(200,195,138);
          brush.color:=RGB(25,19,16);
        rectangle(150,250,250,500);
         brush.color:=RGB(88,81,56);
       rectangle(200,425,375,536);
          { Bydunku sprava }
             brush.color:=RGB(25,19,16);
             rectangle(725,100,875,400);
             brush.color:=RGB(94,91,65);
             rectangle(600,300,675,450);
              brush.color:=RGB(57,31,15);
             rectangle(650,350,750,550);
       
               brush.color:=RGB(64,75,99);
             rectangle(850,50,1000,575);
                brush.color:=RGB(53,54,54);
             rectangle(725,450,825,560);
       
      { Misyac   }
      brush.Color:=clyellow;
      Ellipse(250,25,350,125);
      brush.Color:=RGB(4,3,35);
      Ellipse(245,20,345,120);
      {Zirku}
         brush.color:=RGB(254,255,211);
         Ellipse(475,90,478,93);
         Ellipse(500,100,503,103);
         Ellipse(525,125,528,128);
         Ellipse(550,163,553,166);
         Ellipse(625,163,628,166);
         Ellipse(634,125,637,128);
       
         {Doroga}
         brush.color:=RGB(85,84,86);
         rectangle(0,650,1000,700);
       
      moveTo(375,650);
      LineTo(525,350);
      LineTo(550,350);
      LineTo(440,650);
      LineTo(375,650);
      brush.Color:=RGB(85,84,86);
      floodFill(425,600,clblack,fsBorder);
      readkey;
      closegraph;
      end;
      end.
      Нужно почитать справку и статьи по функциям BGI. Например, никакого brush.color там нет, а цвет кисти задаётся с помиощью SetFillStyle
        Вот, переделал основные моменты
        но не получается подобрать правильные координаты согласно рисунку в делфи(цвет, в принципе, не важен). Помогите пожалуйста, или поясните как правильно писать верные координати объектов.
        ExpandedWrap disabled
          program gorod;
          uses graph, crt;
          var gd, gr, err:integer;
          begin
          gd:=detect;
          gr:=vgahi;
          initgraph(gd,gr,' ');
          err:=graphresult;
          if err=grOk then
          begin
          {Zemlya}
          setfillstyle(solidfill, yellow);
          bar(0,350,1000,710);
          {Nebo}
          setfillstyle(solidfill, blue);
          bar(0,0,1000,350);
          {Bydunku zliva}
          setfillstyle(solidfill, red);
          bar(0,125,150,550);
          setfillstyle(solidfill, red);
          bar(200,200,350,500);
          setfillstyle(solidfill, green);
          setfillstyle(solidfill, black);
          bar(150,250,250,500);
          setfillstyle(solidfill, yellow);
          bar(200,425,375,536);
          {Bydunku sprava}
          setfillstyle(solidfill, brown);
          bar(725,100,875,400);
          setfillstyle(solidfill, red);
          bar(600,300,675,450);
          setfillstyle(solidfill, green);
          bar(650,350,750,550);
          setfillstyle(solidfill, yellow);
          bar(850,50,1000,575);
          setfillstyle(solidfill, white);
          bar(725,450,825,560);
          {Misyac}
          setfillstyle(solidfill, yellow);
          circle(300,75,100);
          setfillstyle(solidfill, blue);
          circle(295,70,95);
          {Zirku}
          setfillstyle(solidfill, yellow);
          circle(475,90,478);
          circle(500,100,503);
          circle(525,125,528);
          circle(550,163,553);
          circle(625,163,628);
          circle(634,125,637);
          {Doroga}
          setfillstyle(solidfill, black);
          bar(0,650,1000,700);
          moveTo(375,650);
          LineTo(525,350);
          LineTo(550,350);
          LineTo(440,650);
          LineTo(375,650);
          setfillstyle(solidfill, brown);
          floodFill(425,600,black);
          readkey;
          closegraph;
          end;
          end.

        Прикреплённый файлПрикреплённый файл____________________.JPG (58,81 Кбайт, скачиваний: 638)
        Прикреплённый файлПрикреплённый файл____________________.JPG (58,81 Кбайт, скачиваний: 543)
          режим vgahi даёт разрешение 640х480, а в дельфийском коде используется гораздо большее разрешение. Поделить все координаты пополам не поможет?
            поделил приблизительно, все равно не могу попасть в точку( то меньше, то больше ) =(
              В какую точку? Разве тут важны точные координаты?
                я имею в виду, что я не могу увеличить\уменшить координаты так, чтобы картинка получилась красивой и во весь экран
                  Ну, можно сделать так.
                  В Delphi ты всё равно используешь абсолютное позиционирование. Что мешает сделать подобие векторной графики?
                  1. Разделяешь весь рисунок на объекты с параметрами - начальная точка (центр окружности или левый верхний угол прямоугольника) и размеры (радиус или длина+ширина).
                  2. Пересчитываешь координаты, линейные размеры.
                  3. Рисуешь.

                  Размеры экрана в TurboPascal - GetMaxX, GetMaxY - действительны после перехода в графический режим.

                  Как пересчитывать.
                  Масштабные коэффициенты:
                  Mx:=GetMaxX / DelphiMaxX; - где DelphiMaxX максимальное значение X в делфийской картинке.
                  My:=GetMaxY / DelphiMaxY; - где DelphiMaxY максимальное значение Y в делфийской картинке.
                  Дома справа:
                  вместо
                  ExpandedWrap disabled
                    bar(725,100,875,400); (=rectangle(725,100,875,400);)

                  пишешь
                  ExpandedWrap disabled
                    setfillstyle(solidfill, brown);
                    x0:=round(725*Mx);
                    y0:=round(100*My);
                    dx:=round( (875-725)*Mx );
                    dy:=round( (400-100)*My );
                    bar(x0,y0,x0+dx,y0+dy);
                    ............

                  Я набирал сразу в браузере, мог ошибиться. Но идея всё равно такая.
                  Кстати, однотипные объекты можно объединить в массивы и выводить в цикле произвольное число домов (и те, что слева и те, что справа).
                  Сообщение отредактировано: Федосеев Павел -
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0312 ]   [ 17 queries used ]   [ Generated: 27.04.24, 23:00 GMT ]