diff options
Diffstat (limited to 'packages/xforms/examples/newbutton.pp')
| -rw-r--r-- | packages/xforms/examples/newbutton.pp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/packages/xforms/examples/newbutton.pp b/packages/xforms/examples/newbutton.pp new file mode 100644 index 0000000000..b038234c33 --- /dev/null +++ b/packages/xforms/examples/newbutton.pp @@ -0,0 +1,151 @@ +{ + * Demo showing the use of user defined object class: CROSSBUTTON + * + * Form definition file generated with fdesign. + * changed stub button to crossbutton + } + +uses xforms; + +Const FL_CROSSBUTTON=2000; + FL_CROSSBUTTON_BW = 2; + +{ How to draw it } +type TSPEC = TFL_BUTTON_STRUCT; + PSPEC = ^TSPEC; + +Procedure draw_crossbutton(ob : PFL_OBJECT);cdecl; + +var temp : longint; + xx, yy, ww, hh ,tt : TFL_Coord; + +begin + temp:=0; + { if redraw is demanded by FL_ENTER, ignore it } + + if PSPEC(ob^.spec)^.event = FL_ENTER then exit; + + { draw the bounding box first } + fl_drw_box(ob^.boxtype, ob^.x, ob^.y, ob^.w, ob^.h, ob^.col1, ob^.bw); + + { draw the box that contains the cross } + if ob^.w>ob^.h then tt:=ob^.h else tt:=ob^.w; + + ww := tt div 2 - 1; + hh:=ww; + xx := ob^.x + FL_BOUND_WIDTH; + yy := ob^.y + (ob^.h - hh) div 2; + + + { if pushed, draw a down box with the cross } + if PSPEC(ob^.spec)^.val<>0 then + begin + fl_drw_box(FL_DOWN_BOX, xx, yy, ww, hh, ob^.col1, ob^.bw); + fl_drw_text(FL_ALIGN_CENTER, xx-2, yy-2, ww+4, hh+4, ob^.col2, 0, 0, '@9plus'); + end + else + begin + fl_drw_box(FL_UP_BOX, xx, yy, ww, hh, ob^.col1, ob^.bw); + end; + + { label } + if (ob^.align = FL_ALIGN_CENTER) then + fl_drw_text(FL_ALIGN_LEFT, xx + ww + 3, ob^.y, 0, ob^.h, + ob^.lcol, ob^.lstyle, ob^.lsize, ob^.thelabel) + else + fl_draw_object_label_outside(ob); + + if (ob^.thetype = FL_RETURN_BUTTON) then + fl_drw_text(FL_ALIGN_CENTER, + TFL_Coord (ob^.x + ob^.w - round(0.8 * ob^.h)), + TFL_Coord (ob^.y + round(0.2 * ob^.h)), + TFL_Coord (round(0.6 * ob^.h)), + TFL_Coord (round(0.6 * ob^.h)), ob^.lcol, 0, 0, '@returnarrow'); + +end; + + +{ creation } +function fl_create_crossbutton(Thetype : Longint; x,y,w,h : TFL_Coord; thelabel : Pchar) : PFL_OBJECT; + +var ob : PFL_OBJECT; + +begin + fl_add_button_class(FL_CROSSBUTTON, PFL_Drawbutton(@draw_crossbutton), nil); + ob := fl_create_generic_button(FL_CROSSBUTTON, thetype, x, y,w, h, thelabel); + ob^.boxtype := FL_NO_BOX; + ob^.col2 := FL_BLACK; { cross color } + { ob^.bw := FL_CROSSBUTTON_BW; } + fl_create_crossbutton:=ob; +end; + +function fl_add_crossbutton(Thetype : longint; x,y,w,h : TFL_COORD; thelabel : pchar): PFL_OBJECT; + +var ob : PFL_OBJECT; + theform : PFL_FORM; + +begin + ob := fl_create_crossbutton(thetype, x, y, w, h, thelabel); + theform:=fl_current_form; + fl_add_object(theform, ob); + fl_add_crossbutton:=ob; +end; + +{*** Forms and Objects ***} +type TFD_NEwBut = record + newbut : PFL_FORM; + bexit : PFL_object; + vdata : pointer; + ldata : Longint; +end; +PFD_NewBut= ^TFD_NewBut; + +function create_form_newbut : PFD_Newbut; + +var + obj : PFL_OBJECT; + fdui : PFD_newbut; + oldbw : longint; + +begin + new (fdui); + oldbw := fl_get_border_width; + + fl_set_border_width(-2); + fdui^.newbut := fl_bgn_form(FL_NO_BOX, 310, 190); + obj := fl_add_box(FL_UP_BOX,0,0,310,190,''); + obj := fl_add_labelframe(FL_ENGRAVED_FRAME,40,45,100,120,'CrossB'); + fl_set_object_boxtype(obj,FL_FLAT_BOX); + fl_set_object_lstyle(obj,FL_BOLD_STYLE); + obj := fl_add_crossbutton(FL_RADIO_BUTTON,50,115,80,30,'cross1'); + fl_set_object_color(obj,FL_COL1,FL_RED); + obj := fl_add_crossbutton(FL_RADIO_BUTTON,50,85,80,30,'Button'); + fl_set_object_color(obj,FL_COL1,FL_GREEN); + obj := fl_add_crossbutton(FL_RADIO_BUTTON,50,55,80,30,'Button'); + fl_set_object_color(obj,FL_COL1,FL_BLUE); + obj := fl_add_labelframe(FL_ENGRAVED_FRAME,180,45,100,120,'CrossB'); + fl_set_object_boxtype(obj,FL_FLAT_BOX); + fl_set_object_lstyle(obj,FL_BOLD_STYLE); + obj := fl_add_crossbutton(FL_PUSH_BUTTON,190,115,80,30,'Button'); + fl_set_object_color(obj,FL_COL1,FL_RED); + obj := fl_add_crossbutton(FL_PUSH_BUTTON,190,85,90,30,'Button'); + fl_set_object_color(obj,FL_COL1,FL_GREEN); + obj := fl_add_crossbutton(FL_PUSH_BUTTON,190,55,80,30,'Button'); + fl_set_object_color(obj,FL_COL1,FL_BLUE); + obj := fl_add_button(FL_NORMAL_BUTTON,125,10,65,25,'Exit'); + fdui^.bexit :=obj; + fl_end_form; + fl_set_border_width(oldbw); + + create_form_newbut:=fdui; +end; + + +var cbform : PFD_newbut; + +begin + fl_initialize(@argc, argv, 'FormDemo', nil, 0); + cbform := create_form_newbut(); + fl_show_form(cbform^.newbut, FL_PLACE_CENTER, 0, nil); + while(fl_do_forms <> cbform^.bexit) do ; +end. |
