На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
  
> FPC + MacOSX(FreeBSD) + Graph
    Поставил себе на Мак fpc 2.0.2, однако в нём отсутствует графический модуль. От графики мне необходимо просто создать графическое окно и иметь возможность кинуть в него дамп памяти (двоичную картинку размером с него самого).
    Я понятия не имею как вообще реализуется вызов функций системы (можно считать что ОС это FreeBSD) и какое uses надо для этого делать. Код для Си на создание окна есть на соотвветсвующем Site.
    Вот примерно что там написанно в заготовке:
    ExpandedWrap disabled
      #define kMyHIViewSignature 'mVue'
       
      // 1
       
      #define kMyHIViewFieldID 130
       
       
       
      int main (int argc, char* argv[])
       
      {
       
          IBNibRef            nibRef;    
       
          OSStatus            err;
       
          WindowRef       myMainWindow;
       
          HIViewRef       myHIView;
       
      // 2
       
          static const EventTypeSpec  myHIViewSpec[] = {kEventClassControl,
       
      // 3
       
                                      kEventControlDraw };
       
          static const HIViewID       myHIViewID = { kMyHIViewSignature,
       
      // 4
       
                                       kMyHIViewFieldID };
       
       
       
       
       
          err = CreateNibReference (CFSTR("main"), &nibRef);
       
          require_noerr (err, CantGetNibRef);
       
       
       
          err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar"));
       
          require_noerr (err, CantSetMenuBar);
       
       
       
          err = CreateWindowFromNib (nibRef, CFSTR("MainWindow"), &myMainWindow);
       
          require_noerr (err, CantCreateWindow );
       
          DisposeNibReference(nibRef);
       
       
       
          HIViewFindByID (HIViewGetRoot(myMainWindow), myHIViewID, &myHIView);    
       
      // 5
       
          err = InstallEventHandler (GetControlEventTarget (myHIView),
       
      // 6
       
                                  NewEventHandlerUPP (MyDrawEventHandler),
       
                                  GetEventTypeCount (myHIViewSpec),
       
                                  &myHIViewSpec,
       
                                  (void *) myHIView,
       
                                  NULL);
       
          ShowWindow (myMainWindow);  
       
       
       
          RunApplicationEventLoop();  
       
       
       
      CantCreateWindow:
       
      CantSetMenuBar:
       
      CantGetNibRef:
       
       
       
          return err;
       
      }

    Помогите создать графическое окно на FreePascal! :(
    Сообщение отредактировано: KIA -
      Uses Linux; Кстати говря - не работает.
      Зато откомпилировалось с Uses Unix; Можно ли это использовать или должно быть что-то специальное?
      Второй вопрос: в коммандной строке fpc не понимает (обычные комманды, вроде touch понимают) названия файла с пробелом, даже заключённое в кавычки, например fpc "/Temp/Untitled 1.Pas"
      Что можно сделать?
        Всё, типа - приехали?
          Цитата KIA @
          Всё, типа - приехали?
          Тебе перевести код на Паскаль, что ли?
            Да, а он будет работать? Не нужно какие-нибдуь модули подключать для пользования API системы?
            Там ещё и формат вызова процедур под Си надо будет, наверное, закосить..
            Сообщение отредактировано: KIA -
              KIA, ты привёл хотя бы рабочий пример на С, чтобы было с чем сравнивать. А то мастеров гадать на кофейной гуще в этом разделе нету.

              Добавлено
              Вот, есть кое-что. Надеюсь, поможет.
              Source for Mac OS X

              Добавлено
              + http://developer.apple.com/referencelibrary/GettingStarted/GS_GraphicsImaging/
              + http://en.wikipedia.org/wiki/Quartz_%28graphics_layer%29
                Ты издеваешься? Я в Си ни бум-бум, как и в API ОС. Я в начале привёл ссылку на Tutorial для начинающих (Quartz 2D Programming Guide: Introduction), но я его не понял настолько, что бы попытаться перевести. Если этого "пособия" не достаточно, говори что конкретно в нём не хватает - попробую поискать ещё что-нибудь.
                В кратце, поскольку это *.nix, то графическая подсистема своя, называется она Quartz (для двумерных операций), она достаточно высокоуровневая, мне нужен режим обращения (вид API) к ОС - "Carbon" (это совместимый со старыми ОС, в том числе 9), но для начала пойдёт любой - лишь бы работало (существуют ещё два режима - частично совместимый со старой и чисто от новой системы: Cocoa). На более низком уровне, доступ к графическом режиме: это надо будет мне копать в сторону CoreGraphic, если надо - буду искать, только не знаю, будут ли там примеры..
                Сообщение отредактировано: volvo877 -
                  Если будет рабочий пример на Си, то будет о чём говорить. С нуля писать никто не станет.

                  Добавлено
                  Обратись ещё на форум http://freepascal.ru . Если решишь проблему, напиши как, чтобы и другие знали...
                    Я так думаю, что всё что ты нашёл для ОСИкс на Паскале - всё это для ThinKpascal, который был интегрирован достаточно хорошо, то есть там всё решалось подключением соответсвующего модуля и вызова _Паскалевой_ процедуры, либо подключением каких-то интерфейсов (сиё есть для меня великая тайна, но встречал часто).

                    Добавлено
                    Действительно на ФрииПаскале.. Правда под ИксКоде, но ничего - скачал, не пускается, но есть исходники - буду разбираться.

                    Добавлено
                    Вот чего пишет этот пример от Фрии:
                    kia$ ./'Quartz Demo (2.1)'
                    dyld: ./Quartz Demo (2.1) Undefined symbols:
                    ./Quartz Demo (2.1) undefined reference to _CGContextSetBlendMode expected to be defined in ApplicationServices
                    Trace/BPT trap
                    MacOSXComputer:~/desktop/Quartz Demo (2.1)/Quartz Demo (2.1).app/contents/macos kia$
                      Не понимаю.. вот пример, на который мне дали ссылку: http://pascal-central.com/sourcex/ctrldemo.zip
                      Он на FreePascal.
                      Но что в нём есть:
                      unit TestUnit;
                      interface
                      uses
                      QuickTime;

                      procedure ShowExamples;

                      implementation
                      И так везде...
                      Ну НЕТ такого модуля во FreePascal, хоть убейся и быть - не может!
                      Да, это стандартный компонент системы, но именно системы и как к нему достучаться - не понятно. На самом деле примеры там для среды разработки, мне, в общем-то это не подходит. Но с другой стороны, ведь там обычный Паскаль, следовательно должны где-то лежать обёртки всех этих QuickTime и прочего? И следовательно их можно оттуда вытянуть. Но как?
                      А ещё лучше, если бы кто-нибудь на базе этих исходников сказал, что я - дебил и ничего такого не нужно, и ткнул меня носом в то место, где это всё работает без всякой среды разработки...
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0324 ]   [ 16 queries used ]   [ Generated: 8.05.24, 03:43 GMT ]