1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 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.
|