Извиняюсь за небрежно написанный код (от рудиментов FreePascal'я и т.д.). Писал для эксперимента: лишь бы запустить и отценить перспективу работы. От этого, возможно, ошибки.
Версия для GPCP:
Код:
FOREIGN MODULE Japi ["japi.dll"];
IMPORT java_lang, Console;
CONST
(* BOOLEAN *)
J_TRUE *= TRUE;
J_FALSE *= FALSE;
(* ALIGNMENT *)
J_LEFT *= 0;
J_CENTER *= 1;
J_RIGHT *= 2;
J_TOP *= 3;
J_BOTTOM *= 4;
........................................
........................................
TYPE
int = INTEGER;
pchar = ARRAY OF CHAR;
PChar = INTEGER;
(* Externe Funktionen *)
PROCEDURE J_start*(): BOOLEAN;
........................................
PROCEDURE J_frame*( arg0 : pchar ): int;
........................................
PROCEDURE J_button*( arg0 : int ; arg1 : pchar ): int;
........................................
PROCEDURE J_setborderpos*( arg0 : int ; arg1 : int );
........................................
PROCEDURE J_show*( arg0 : int );
.....................................
PROCEDURE J_nextaction*(): int;
.....................................
PROCEDURE J_quit*;
.....................................
PROCEDURE J_filedialog*( arg0 : int ; arg1 : pchar ; arg2 : pchar ; arg3 : pchar ): PChar;
....................................
PROCEDURE J_fileselect*( arg0 : int ; arg1 : pchar ; arg2 : pchar ; arg3 : pchar ): PChar;
....................................
....................................
END Japi.
Код:
MODULE Borderlayout;
IMPORT Japi, Console;
VAR
frame,left,right,bottom,top,center : INTEGER;
PROCEDURE JBorderlayout*;
BEGIN
IF Japi.J_start() = Japi.J_FALSE THEN
Console.WriteString('cannot connect to JAPI Kernel'); Console.WriteLn;
HALT(0)
END;
frame := Japi.J_frame('Border Layout');
Japi.J_setborderlayout(frame);
right := Japi.J_button(frame,'Right');
left := Japi.J_button(frame,'Left');
bottom := Japi.J_button(frame,'Bottom');
top := Japi.J_button(frame,'Top');
center := Japi.J_button(frame,'Center');
Japi.J_setborderpos(right,Japi.J_RIGHT);
Japi.J_setborderpos(left,Japi.J_LEFT);
Japi.J_setborderpos(bottom,Japi.J_BOTTOM);
Japi.J_setborderpos(top,Japi.J_TOP);
Japi.J_show(frame);
WHILE Japi.J_nextaction() # frame DO END;
Japi.J_quit;
END JBorderlayout;
END Borderlayout.
Верся для Blackbox
Код:
MODULE JapiInterface ["japi.dll"];
IMPORT WinApi;
CONST
(* BOOLEAN *)
J_TRUE *= TRUE;
J_FALSE *= FALSE;
(* ALIGNMENT *)
J_LEFT *= 0;
J_CENTER *= 1;
J_RIGHT *= 2;
J_TOP *= 3;
J_BOTTOM *= 4;
........................................
........................................
TYPE
int = INTEGER;
pchar = WinApi.PtrSTR;
Pchar = WinApi.PtrSTR;
(* Externe Funktionen *)
PROCEDURE J_start*(): BOOLEAN;
........................................
PROCEDURE J_frame*( arg0 : pchar ): int;
........................................
PROCEDURE J_button*( arg0 : int ; arg1 : pchar ): int;
........................................
PROCEDURE J_setborderpos*( arg0 : int ; arg1 : int );
........................................
PROCEDURE J_show*( arg0 : int );
.....................................
PROCEDURE J_nextaction*(): int;
.....................................
PROCEDURE J_quit*;
.....................................
PROCEDURE J_filedialog*( arg0 : int ; arg1 : pchar ; arg2 : pchar ; arg3 : pchar ): PChar;
....................................
PROCEDURE J_fileselect*( arg0 : int ; arg1 : pchar ; arg2 : pchar ; arg3 : pchar ): PChar;
....................................
....................................
END JapiInterface.
Код:
MODULE JapiBorderlayout;
IMPORT JapiInterface, StdLog;
VAR
frame,left,right,bottom,top,center : INTEGER;
PROCEDURE Borderlayout*;
BEGIN
IF JapiInterface.J_start() = JapiInterface.J_FALSE THEN
StdLog.String('cannot connect to JAPI Kernel'); StdLog.Ln;
HALT(0)
END;
frame := JapiInterface.J_frame('Border Layout');
JapiInterface.J_setborderlayout(frame);
right := JapiInterface.J_button(frame,'Right');
left := JapiInterface.J_button(frame,'Left');
bottom := JapiInterface.J_button(frame,'Bottom');
top := JapiInterface.J_button(frame,'Top');
center := JapiInterface.J_button(frame,'Center');
JapiInterface.J_setborderpos(right,JapiInterface.J_RIGHT);
JapiInterface.J_setborderpos(left,JapiInterface.J_LEFT);
JapiInterface.J_setborderpos(bottom,JapiInterface.J_BOTTOM);
JapiInterface.J_setborderpos(top,JapiInterface.J_TOP);
JapiInterface.J_show(frame);
WHILE JapiInterface.J_nextaction() # frame DO END;
JapiInterface.J_quit;
END Borderlayout;
END JapiBorderlayout.
Может быть ошибка в типах. В случае с ВВ зависимость от модуля WinApi существует.