Есть ли смысл открыть тему под названием, например, «Конструктор WinApi-функций», где можно было бы обсудить, например, как правильно реализовать сишные типы данных в Компонентном Паскале? Вот пример конструктора сообщений (функция MessageBox):
## Код:
```
MODULE ModuleA;
   IMPORT StdLog, WinApi;
      
   VAR   a*, b*: INTEGER;
      c*, d*: ARRAY 20 OF CHAR;
      e*, f*: ARRAY 20 OF SHORTCHAR;
                        
   PROCEDURE StringToString* (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
      VAR i, max: INTEGER;
   BEGIN i := 0; max := LEN(out)-1;
      WHILE (in[i] # 0X) & (i < max) DO
         IF ORD(in[i]) < 256 THEN out[i] := in[i] END;
         INC(i)
      END;
      out[i] := 0X
   END StringToString;
            
   PROCEDURE Messagebox*():INTEGER;
      VAR
         hWnd: WinApi.HWND;
         g, h: ARRAY 20 OF CHAR;
         lpText, lpCaption: WinApi.PtrSTR;
         uType: SET;
   BEGIN
      hWnd := a;
      StringToString(c, g);
      f := SHORT(g);
      StringToString(d, h);
      e := SHORT(h);
      lpText := f;
      lpCaption := e;
      uType := {b};
      RETURN WinApi.MessageBox(hWnd, lpText, lpCaption, uType);
   END Messagebox;
   
   PROCEDURE Start*;
      VAR n: INTEGER;
   BEGIN
      n := Messagebox();
      StdLog.Int(n); StdLog.Ln
   END Start;
   
END ModuleA.
```

После компиляции модуля, надо создать «New Form...» и выполнить «Open As Aux Dialog». Изменение параметра uType позволяет создавать сообщения с восклицанием, предупреждением, вопросом и т.д.