program borderwidth;

uses xforms;

type TFD_bwform = record
        bwform : PFL_FORM;
        vdata : pointer;
        ldata : longint;
        done,
        bw_choice,
        bwgroup,
        pmobj : PFL_OBJECT;
        end;
PFD_bwform = ^TFD_bwform;


{ callbacks for form bwform }
procedure done_callback(ob : PFL_OBJECT; data : longint);cdecl;
begin
  { fill-in code for callback }
   halt(0);
end;

var
fd_bwform : PFD_bwform;

const bws : array[0..7] of longint = (-3,-2,-1,1,2,3,4,5);

procedure bw_callback(ob : PFL_OBJECT; data : longint);cdecl;

var bw : longint;

begin
   bw := bws[fl_get_choice(ob)-1];

   fl_set_object_bw(fd_bwform^.bwgroup, bw);
   { since bwgroup includes the backface, it wipes out the done button}
   fl_redraw_object(fd_bwform^.done);
   fl_redraw_object(fd_bwform^.bw_choice);
end;

function create_form_bwform : PFD_bwform;
var
  obj : PFL_OBJECT;
  fdui : PFD_bwform;

begin

  new(fdui);
  fdui^.bwform := fl_bgn_form(FL_NO_BOX, 380, 340);

  fdui^.bwgroup := fl_bgn_group();
  obj := fl_add_box(FL_UP_BOX,0,0,380,340,'');
  obj := fl_add_frame(FL_EMBOSSED_FRAME,220,60,135,145,'');
  obj := fl_add_frame(FL_ENGRAVED_FRAME,15,60,185,145,'');
  obj := fl_add_slider(FL_HOR_SLIDER,25,75,160,25,'');
  obj := fl_add_pixmapbutton(FL_NORMAL_BUTTON,305,145,40,35,'');
  fdui^.pmobj := obj;
  obj := fl_add_positioner(FL_NORMAL_POSITIONER,30,225,100,80,'');
  obj := fl_add_counter(FL_NORMAL_COUNTER,25,160,160,25,'');
  obj := fl_add_lightbutton(FL_PUSH_BUTTON,230,100,100,30,'LightButton');
  obj := fl_add_roundbutton(FL_PUSH_BUTTON,230,130,80,33,'Button');
  obj := fl_add_round3dbutton(FL_PUSH_BUTTON,230,152,80,33,'Button');
    fl_set_object_color(obj,FL_COL1, FL_BLUE);
  obj := fl_add_checkbutton(FL_PUSH_BUTTON,230,174,80,33,'Button');
  obj := fl_add_input(FL_NORMAL_INPUT,195,240,160,28,'Input');
  obj := fl_add_valslider(FL_HOR_BROWSER_SLIDER,25,120,160,25,'');
  obj := fl_add_button(FL_NORMAL_BUTTON,230,65,100,30,'Button');
  fl_end_group();

  obj := fl_add_button(FL_NORMAL_BUTTON,270,290,75,30,'Done');
  fdui^.done := obj;
    fl_set_object_callback(obj,PFL_CALLBACKPTR(@done_callback),0);
  obj:= fl_add_choice(FL_NORMAL_CHOICE,105,20,80,25,'Border Width');
  fdui^.bw_choice := obj ;
    fl_set_object_callback(obj,PFL_CALLBACKPTR(@bw_callback),0);
  fl_end_form();
  fdui^.bwform^.fdui  := fdui;

  create_form_bwform:= fdui;
end;

begin
   { application default. Can be overridden by the command line options }
   fl_set_border_width(-2);

   fl_initialize(@argc, argv, 'FormDemo', nil, 0);
   fd_bwform := create_form_bwform;

   { fill-in form initialization code }
   fl_set_pixmapbutton_file(fd_bwform^.pmobj, 'crab.xpm');

   fl_addto_choice(fd_bwform^.bw_choice,'-3 Pixel|-2 Pixel|-1 Pixel');
   fl_addto_choice(fd_bwform^.bw_choice,' 1 Pixel| 2 Pixel| 3 Pixel');
   fl_addto_choice(fd_bwform^.bw_choice,' 4 Pixel| 5 Pixel');
   fl_set_choice_text(fd_bwform^.bw_choice, '-2 Pixel');

   { show the first form }
   fl_show_form(fd_bwform^.bwform,FL_PLACE_CENTER,FL_NOBORDER,'bwform');
   while (fl_do_forms<>nil) do;
end.
