> -- kekc_leader писал(а):
> Хорошая идея. Спасибо.У меня с этим SDL_RectFill какая-то чертовщина происходит. Он то работает, то нет. Сейчас перестал совсем.Точнее, на Виндоусе всё работает, а на Линуксовской сборке Блэкбокса - нет. Выдаёт NIL dereference или вот такой трап:Происходит это на следующей строке:s - это SDL.Surface (указатель), rr - это SDL.Rect (не указатель)...Я в тупике. На Виндоусе всё работает прекрасно, а на Линуксе вот такая ошибка и хоть убей.Прилагаю компоненты к сообщению. Их два:1) Graph (внутри: Sdl.odc и Lib.odc; Lib использует Sdl) и2) SDLTest (внутри файл SDLTest.odc; использует GraphLib и GraphSdl).Линуксовская и Виндоуская версия отличаются только в одном месте - разными ссылками на DLL/SO:

PixelFormat определена неправильно -- это как минимум.

Надо так:
## Код:
```
TYPE
      PixelFormat* = POINTER [untagged] TO PixelFormatDesc;
      PixelFormatDesc* = RECORD [untagged]
         format*: Uint32;
         palette*: Palette;
         bitsPerPixel*: Uint8;
         bytesPerPixel*: Uint8;
         padding: ARRAY [untagged] 2 OF Uint8;
         Rmask*, Gmask*, Bmask*, Amask*: Uint32;
         Rloss*, Gloss*, Bloss*, Aloss*: Uint8;
         Rshift*, Gshift*, Bshift*, Ashift*: Uint8;
         refCount*: int;
         next*: PixelFormat
      END;
```


Events тоже:

## Код:
```
TYPE
      Uint16* = SHORTINT;
      Sint32* = INTEGER;

      CommonEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32
      END;

      WindowEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         event*: Uint8;
         padding1, padding2, padding3: Uint8;
         data1*, data2*: Sint32
      END;

      Scancode* = Sint32; (* TODO: check *)
      Keycode* = Sint32;

      KeysymDesc* = RECORD [untagged]
         scancode*: Scancode;
         sym*: Keycode;
         mod*: Uint16;
         unused: Uint32
      END;

      KeyboardEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         state*: Uint8;
         repeat*: Uint8;
         padding2: Uint8;
         padding3: Uint8;
         keysym*: KeysymDesc
      END;

      TextEditingEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         text*: ARRAY [untagged] TEXTEDITINGEVENT_TEXT_SIZE OF char;
         start*: Sint32;
         length*: Sint32
      END;

      TextInputEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         text*: ARRAY [untagged] TEXTINPUTEVENT_TEXT_SIZE OF char
      END;

      MouseMotionEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         which*: Uint32;
         state*: Uint32;
         x*, y*, xrel*, yrel*: Sint32
      END;

      MouseButtonEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         which*: Uint32;
         button*, state*, clicks*, padding1: Uint8;
         x*, y*: Sint32
      END;

      MouseWheelEventDesc* = RECORD [untagged]
         type*: Uint32;
         timestamp*: Uint32;
         windowID*: Uint32;
         which*: Uint32;
         x*, y*: Sint32;
         direction*: Uint32
      END;

      EventDesc* = RECORD [union]
         type*: Uint32;
         common*: CommonEventDesc;
         window*: WindowEventDesc;
         key*: KeyboardEventDesc;
         edit*: TextEditingEventDesc;
         text*: TextInputEventDesc;
         motion*: MouseMotionEventDesc;
         button*: MouseButtonEventDesc;
         wheel*: MouseWheelEventDesc;
         padding: ARRAY [untagged] 56 OF Uint8
      END;
```

(насчёт Scancode и KeysymDesc не уверен -- надо разбираться)