summaryrefslogtreecommitdiff
path: root/uidesigner
diff options
context:
space:
mode:
Diffstat (limited to 'uidesigner')
-rw-r--r--uidesigner/anchors.inc208
-rw-r--r--uidesigner/extrafpc.cfg5
-rw-r--r--uidesigner/icons.inc2086
-rw-r--r--uidesigner/images/dateedit.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/gauge.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/listview.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/menubar.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/newform_16.bmpbin0 -> 822 bytes
-rw-r--r--uidesigner/images/pagecontrol.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/progressbar.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/radiobutton.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/shape_align_bottom.bmpbin0 -> 822 bytes
-rw-r--r--uidesigner/images/shape_align_left.bmpbin0 -> 822 bytes
-rw-r--r--uidesigner/images/shape_align_right.bmpbin0 -> 822 bytes
-rw-r--r--uidesigner/images/shape_align_top.bmpbin0 -> 822 bytes
-rw-r--r--uidesigner/images/stringgrid.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/trackbar.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/images/treeview.bmpbin0 -> 1710 bytes
-rw-r--r--uidesigner/newformdesigner.pas922
-rw-r--r--uidesigner/readme.txt50
-rw-r--r--uidesigner/tests/frm_menutest.pas86
-rw-r--r--uidesigner/tests/menutest.lpi57
-rw-r--r--uidesigner/tests/menutest.lpr27
-rw-r--r--uidesigner/tests/tabsheet_design.lpi58
-rw-r--r--uidesigner/tests/tabsheet_design.lpr30
-rw-r--r--uidesigner/tests/tabtest.pas226
-rw-r--r--uidesigner/uidesigner.lpi133
-rw-r--r--uidesigner/uidesigner.lpr58
-rw-r--r--uidesigner/vfddesigner.pas1576
-rw-r--r--uidesigner/vfdeditors.pas98
-rw-r--r--uidesigner/vfdfile.pas388
-rw-r--r--uidesigner/vfdformparser.pas545
-rw-r--r--uidesigner/vfdforms.pas587
-rw-r--r--uidesigner/vfdmain.pas445
-rw-r--r--uidesigner/vfdpropeditgrid.pas541
-rw-r--r--uidesigner/vfdprops.pas696
-rw-r--r--uidesigner/vfdresizer.pas146
-rw-r--r--uidesigner/vfdutils.pas82
-rw-r--r--uidesigner/vfdwidgetclass.pas233
-rw-r--r--uidesigner/vfdwidgets.pas453
40 files changed, 9736 insertions, 0 deletions
diff --git a/uidesigner/anchors.inc b/uidesigner/anchors.inc
new file mode 100644
index 00000000..0c9b3738
--- /dev/null
+++ b/uidesigner/anchors.inc
@@ -0,0 +1,208 @@
+
+Const
+ vfd_anchorright : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 14, 14, 14,255, 0,255,255, 0,255,227,170,131,
+ 225,165,125,222,159,119,220,155,114,218,150,108,216,144,103,214,140,
+ 98,213,134, 93,212,133, 90,210,131, 88,210,131, 88,210,131, 88,255,
+ 0,255, 22, 22, 22,255, 0,255,255, 0,255,229,176,137,234,192,162,
+ 233,189,158,232,185,154,230,181,150,228,177,146,227,173,141,225,169,
+ 137,223,165,134,222,163,131,221,160,128,210,131, 88,255, 0,255, 31,
+ 31, 31,255, 0,255,255, 0,255,230,179,140,236,196,166,235,194,163,
+ 234,191,160,232,188,157,231,184,153,229,180,148,228,175,145,226,172,
+ 140,225,168,136,223,165,133,212,133, 90,255, 0,255, 43, 43, 43,255,
+ 0,255,255, 0,255,230,179,140,236,197,167,236,197,167,235,196,165,
+ 235,193,163,234,190,160,232,186,156,230,182,151,228,179,147,227,175,
+ 143,225,170,139,214,140, 98,255, 0,255, 54, 54, 54,255, 0,255,255,
+ 0,255,230,179,140,230,179,140,230,179,140,230,179,140,230,179,140,
+ 229,176,137,227,172,133,226,169,128,225,163,123,222,158,117,220,153,
+ 112,218,148,106,255, 0,255, 67, 67, 67,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 80, 80, 80,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,245,197,167,245,195,163,245,192,159,245,190,155,
+ 243,187,153,243,184,149,243,183,146,243,182,144,243,182,142,255, 0,
+ 255, 92, 92, 92,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,245,200,171,247,211,188,247,210,186,247,207,182,247,205,180,
+ 246,203,177,246,202,174,246,200,172,243,182,144,255, 0,255,104,104,
+ 104,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,245,
+ 203,174,247,213,192,247,211,189,247,210,186,247,208,184,247,206,180,
+ 246,204,178,246,203,175,243,184,148,255, 0,255,116,116,116,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,245,203,175,247,
+ 215,194,247,213,192,247,212,190,247,210,187,247,209,184,247,207,181,
+ 246,205,179,243,187,150,255, 0,255,127,127,127,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,245,203,175,245,203,175,245,
+ 203,175,245,201,172,245,200,170,245,197,167,245,195,163,245,192,159,
+ 245,190,155,255, 0,255,137,137,137,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,145,145,145,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ vfd_anchorbottom : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,165,165,165,158,158,158,149,149,149,141,141,141,131,131,
+ 131,121,121,121,111,111,111,101,101,101, 91, 91, 91, 82, 82, 82, 73,
+ 73, 73, 65, 65, 65, 58, 58, 58,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 243,187,150,243,184,149,243,184,146,243,183,145,243,182,144,255, 0,
+ 255,213,134, 94,212,133, 90,210,131, 88,210,131, 88,210,131, 88,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,243,188,154,
+ 246,203,176,246,202,175,246,201,173,243,183,146,255, 0,255,214,140,
+ 98,223,165,133,222,162,131,222,161,129,210,131, 88,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,245,191,157,247,205,179,
+ 246,204,177,246,203,175,243,184,149,255, 0,255,217,145,103,225,168,
+ 136,223,165,133,223,163,131,212,133, 90,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,245,193,161,247,207,182,247,205,180,
+ 246,204,178,243,187,153,255, 0,255,218,150,110,226,172,141,225,169,
+ 138,224,167,134,213,136, 94,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,245,196,165,247,209,184,247,207,182,247,206,180,
+ 245,190,155,255, 0,255,221,157,115,228,177,145,227,173,142,225,170,
+ 139,216,141, 99,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,245,197,167,247,210,187,247,209,186,247,208,184,245,192,159,
+ 255, 0,255,224,162,121,230,181,150,228,178,146,227,175,143,217,146,
+ 104,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,245,
+ 200,171,247,212,189,247,211,188,247,210,186,245,195,162,255, 0,255,
+ 225,167,127,232,185,154,230,182,151,229,179,148,220,150,111,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,245,201,172,247,
+ 213,192,247,213,190,247,211,189,245,197,166,255, 0,255,227,172,132,
+ 233,189,158,232,186,156,230,184,152,221,157,116,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,245,203,175,245,203,174,245,
+ 200,172,245,200,171,245,199,170,255, 0,255,229,176,136,235,192,162,
+ 234,190,160,232,187,157,225,162,123,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,230,179,140,235,196,165,235,194,163,
+ 234,191,161,226,169,128,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,230,179,140,236,197,167,235,196,165,235,194,163,
+ 227,172,133,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,230,179,140,230,179,140,230,179,140,230,178,140,229,176,137,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ vfd_anchorleft : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 14, 14, 14,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 22, 22, 22,
+ 255, 0,255,227,170,131,225,165,125,222,159,119,220,155,114,218,150,
+ 108,216,144,103,214,140, 98,213,134, 93,212,133, 90,210,131, 88,210,
+ 131, 88,210,131, 88,255, 0,255,255, 0,255, 31, 31, 31,255, 0,255,
+ 229,176,137,234,192,162,233,189,158,232,185,154,230,181,150,228,177,
+ 146,227,173,141,225,169,137,223,165,134,222,163,131,221,160,128,210,
+ 131, 88,255, 0,255,255, 0,255, 43, 43, 43,255, 0,255,230,179,140,
+ 236,196,166,235,194,163,234,191,160,232,188,157,231,184,153,229,180,
+ 148,228,175,145,226,172,140,225,168,136,223,165,133,212,133, 90,255,
+ 0,255,255, 0,255, 54, 54, 54,255, 0,255,230,179,140,236,197,167,
+ 236,197,167,235,196,165,235,193,163,234,190,160,232,186,156,230,182,
+ 151,228,179,147,227,175,143,225,170,139,214,140, 98,255, 0,255,255,
+ 0,255, 67, 67, 67,255, 0,255,230,179,140,230,179,140,230,179,140,
+ 230,179,140,230,179,140,229,176,137,227,172,133,226,169,128,225,163,
+ 123,222,158,117,220,153,112,218,148,106,255, 0,255,255, 0,255, 80,
+ 80, 80,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 92, 92, 92,255,
+ 0,255,245,197,167,245,195,163,245,192,159,245,190,155,243,187,153,
+ 243,184,149,243,183,146,243,182,144,243,182,142,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,104,104,104,255, 0,255,245,
+ 200,171,247,211,188,247,210,186,247,207,182,247,205,180,246,203,177,
+ 246,202,174,246,200,172,243,182,144,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,116,116,116,255, 0,255,245,203,174,247,
+ 213,192,247,211,189,247,210,186,247,208,184,247,206,180,246,204,178,
+ 246,203,175,243,184,148,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,127,127,127,255, 0,255,245,203,175,247,215,194,247,
+ 213,192,247,212,190,247,210,187,247,209,184,247,207,181,246,205,179,
+ 243,187,150,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,137,137,137,255, 0,255,245,203,175,245,203,175,245,203,175,245,
+ 201,172,245,200,170,245,197,167,245,195,163,245,192,159,245,190,155,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,145,145,
+ 145,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+Const
+ vfd_anchortop : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,213,134, 94,212,133, 90,210,131, 88,210,
+ 131, 88,210,131, 88,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,214,140, 98,223,165,133,222,162,131,222,161,129,210,
+ 131, 88,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,217,145,103,225,168,136,223,165,133,223,163,131,212,133, 90,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,243,187,150,
+ 243,184,149,243,184,146,243,183,145,243,182,144,255, 0,255,218,150,
+ 110,226,172,141,225,169,138,224,167,134,213,136, 94,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,243,188,154,246,203,176,
+ 246,202,175,246,201,173,243,183,146,255, 0,255,221,157,115,228,177,
+ 145,227,173,142,225,170,139,216,141, 99,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,245,191,157,247,205,179,246,204,177,
+ 246,203,175,243,184,149,255, 0,255,224,162,121,230,181,150,228,178,
+ 146,227,175,143,217,146,104,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,245,193,161,247,207,182,247,205,180,246,204,178,
+ 243,187,153,255, 0,255,225,167,127,232,185,154,230,182,151,229,179,
+ 148,220,150,111,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,245,196,165,247,209,184,247,207,182,247,206,180,245,190,155,
+ 255, 0,255,227,172,132,233,189,158,232,186,156,230,184,152,221,157,
+ 116,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,245,
+ 197,167,247,210,187,247,209,186,247,208,184,245,192,159,255, 0,255,
+ 229,176,136,235,192,162,234,190,160,232,187,157,225,162,123,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,245,200,171,247,
+ 212,189,247,211,188,247,210,186,245,195,162,255, 0,255,230,179,140,
+ 235,196,165,235,194,163,234,191,161,226,169,128,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,245,201,172,247,213,192,247,
+ 213,190,247,211,189,245,197,166,255, 0,255,230,179,140,236,197,167,
+ 235,196,165,235,194,163,227,172,133,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,245,203,175,245,203,174,245,200,172,245,
+ 200,171,245,199,170,255, 0,255,230,179,140,230,179,140,230,179,140,
+ 230,178,140,229,176,137,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,165,165,
+ 165,158,158,158,149,149,149,141,141,141,131,131,131,121,121,121,111,
+ 111,111,101,101,101, 91, 91, 91, 82, 82, 82, 73, 73, 73, 65, 65, 65,
+ 58, 58, 58,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
diff --git a/uidesigner/extrafpc.cfg b/uidesigner/extrafpc.cfg
new file mode 100644
index 00000000..5fad92be
--- /dev/null
+++ b/uidesigner/extrafpc.cfg
@@ -0,0 +1,5 @@
+-FUunits
+-Fu../lib
+-Xs
+-XX
+-CX
diff --git a/uidesigner/icons.inc b/uidesigner/icons.inc
new file mode 100644
index 00000000..71d8542b
--- /dev/null
+++ b/uidesigner/icons.inc
@@ -0,0 +1,2086 @@
+
+Const
+ stdimg_vfd_checkbox : Array[0..773] of byte = (
+ 66, 77, 6, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 15, 0, 0, 0, 15, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 208, 2, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,
+ 27, 55,229, 27, 55,229,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255, 27, 55,229, 0, 0, 0, 27, 55,229,
+ 128,128,128, 0, 0, 0,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,255,255,255, 27, 55,229, 0, 0, 0, 27, 55,229,128,128,128,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,200,208,212,255,
+ 255,255, 27, 55,229, 0, 0, 0, 27, 55,229,128,128,128, 0, 0, 0,
+ 255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
+ 255, 0, 0, 0, 0, 0, 0,255,255,255,200,208,212,255,255,255, 27,
+ 55,229, 0, 0, 0, 27, 55,229,128,128,128, 0, 0, 0,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,200,208,212,255,255,255, 27, 55,229, 0,
+ 0, 0, 27, 55,229,128,128,128, 0, 0, 0,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,
+ 255,255,255,255,200,208,212,255,255,255, 27, 55,229, 0, 0, 0, 27,
+ 55,229,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,
+ 255,200,208,212,255,255,255, 27, 55,229, 0, 0, 0, 27, 55,229,128,
+ 128,128, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,200,208,
+ 212,255,255,255, 27, 55,229, 0, 0, 0, 27, 55,229,128,128,128, 0,
+ 0, 0,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,200,208,212,255,255,
+ 255, 27, 55,229, 0, 0, 0, 27, 55,229,128,128,128, 0, 0, 0,255,
+ 255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0,255,255,255,200,208,212,255,255,255, 27, 55,
+ 229, 0, 0, 0, 27, 55,229,128,128,128, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,200,208,212,255,255,255, 27, 55,229, 0, 0,
+ 0, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,200,208,212,255,255,255, 27, 55,229, 0, 0, 0, 27, 55,
+ 229,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128, 27, 55,229, 27, 55,229, 0, 0, 0, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 0, 0, 0);
+
+Const
+ stdimg_vfd_edit : Array[0..1421] of byte = (
+ 66, 77,142, 5, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 25, 0, 0, 0, 18, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 88, 5, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 27, 55,229,128,128,128,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 27, 55,
+ 229, 0, 27, 55,229,128,128,128, 0, 0, 0,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,255,255,255, 27, 55,229, 0, 27, 55,229,128,128,128, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,200,208,212,255,255,255, 27, 55,229,
+ 0, 27, 55,229,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,200,
+ 208,212,255,255,255, 27, 55,229, 0, 27, 55,229,128,128,128, 0, 0,
+ 0,255,255,255,255,255,255,255,255,255,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,200,208,212,255,255,255, 27, 55,229, 0,
+ 27, 55,229,128,128,128, 0, 0, 0,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,255,255,255,128, 0, 0,128, 0, 0,255,255,255,128,
+ 0, 0,128, 0, 0,255,255,255,128, 0, 0,128, 0, 0,255,255,255,
+ 255,255,255, 0, 0, 0,255,255,255,255,255,255,255,255,255,200,208,
+ 212,255,255,255, 27, 55,229, 0, 27, 55,229,128,128,128, 0, 0, 0,
+ 255,255,255,255,255,255,128, 0, 0,128, 0, 0,255,255,255,128, 0,
+ 0,128, 0, 0,255,255,255,128, 0, 0,128, 0, 0,255,255,255,128,
+ 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,200,208,212,255,255,255, 27, 55,229, 0, 27,
+ 55,229,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,128, 0,
+ 0,128, 0, 0,255,255,255,128, 0, 0,128, 0, 0,255,255,255,255,
+ 255,255, 0, 0, 0,255,255,255,255,255,255,255,255,255,200,208,212,
+ 255,255,255, 27, 55,229, 0, 27, 55,229,128,128,128, 0, 0, 0,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,128, 0, 0,
+ 128, 0, 0,255,255,255,128, 0, 0,128, 0, 0,255,255,255,128, 0,
+ 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255,200,208,212,255,255,255, 27, 55,229, 0, 27, 55,
+ 229,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,128,
+ 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255,128, 0, 0,
+ 128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255,255,255,
+ 255, 0, 0, 0,255,255,255,255,255,255,255,255,255,200,208,212,255,
+ 255,255, 27, 55,229, 0, 27, 55,229,128,128,128, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,128, 0, 0,128, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255, 0, 0, 0,255,255,255,255,255,
+ 255,255,255,255,200,208,212,255,255,255, 27, 55,229, 0, 27, 55,229,
+ 128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,128, 0, 0,128,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,200,208,212,255,255,
+ 255, 27, 55,229, 0, 27, 55,229,128,128,128, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,
+ 255,255,255,200,208,212,255,255,255, 27, 55,229, 0, 27, 55,229,128,
+ 128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,200,208,212,255,255,255,
+ 27, 55,229, 0, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255, 27, 55,229, 0, 27, 55,229,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 27,
+ 55,229, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 0);
+
+Const
+ stdimg_vfd_memo : Array[0..1173] of byte = (
+ 66, 77,150, 4, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 18, 0, 0, 0, 20, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 96, 4, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 0, 0, 27, 55,229,128,128,128, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,
+ 128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,229, 0,
+ 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 27, 55,229, 0, 0, 27, 55,229,128,128,128,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 255,255,255, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,128,128,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,229, 0, 0, 27,
+ 55,229,128,128,128,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0, 27,
+ 55,229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,128,128,255,255,
+ 255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,255,255,255, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,
+ 128,128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,229,
+ 0, 0, 27, 55,229,128,128,128,255,255,255,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0,
+ 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,128,
+ 128,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,255,255,255, 0, 0, 0, 27, 55,229, 0, 0,
+ 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 27, 55,229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,128,128,255,
+ 255,255,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255, 0, 0, 0, 27, 55,229, 0, 0, 27, 55,
+ 229,128,128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 27, 55,229, 0, 0, 27, 55,229,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128, 27, 55,229, 0, 0, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0,
+ 0);
+
+Const
+ stdimg_vfd_button : Array[0..1005] of byte = (
+ 66, 77,238, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 22, 0, 0, 0, 14, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 184, 3, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212, 0, 0, 0, 0, 0, 0,200,
+ 208,212,200,208,212, 0, 0, 0,200,208,212, 0, 0, 0,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212, 0, 0, 0,200,208,212,200,208,212, 0,
+ 0, 0,200,208,212, 0, 0, 0,200,208,212, 0, 0, 0,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212, 0, 0, 0,200,208,212,200,208,212, 0,
+ 0, 0,200,208,212, 0, 0, 0,200,208,212, 0, 0, 0,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212, 0, 0, 0,200,208,212,200,208,212, 0,
+ 0, 0,200,208,212, 0, 0, 0, 0, 0, 0,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212, 0, 0, 0,200,208,212,200,208,212, 0,
+ 0, 0,200,208,212, 0, 0, 0,200,208,212, 0, 0, 0,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212, 0, 0, 0, 0, 0, 0,200,
+ 208,212,200,208,212, 0, 0, 0,200,208,212, 0, 0, 0,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0);
+
+Const
+ stdimg_vfd_combobox : Array[0..1413] of byte = (
+ 66, 77,134, 5, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 22, 0, 0, 0, 20, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 80, 5, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,128, 0,
+ 0,128, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,128, 0, 0,128, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 200,208,212,200,208,212,200,208,212,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,128,128,128,128,128,128,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,128, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255, 0, 0, 0,
+ 255,255,255, 0, 0, 0, 0, 0, 0,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0);
+
+Const
+ stdimg_vfd_listbox : Array[0..1481] of byte = (
+ 66, 77,202, 5, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 22, 0, 0, 0, 21, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 148, 5, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 200,208,212,200,208,212,200,208,212,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,128,128,128,128,128,128,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255, 0, 0, 0, 0, 0, 0,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,200,208,212,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,128, 0, 0,128, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0, 0, 0, 0,
+ 200,208,212,255,255,255,200,208,212,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,128, 0, 0,128, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,128, 0, 0,128, 0, 0, 0, 0, 0,
+ 255,255,255,200,208,212,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,128, 0, 0,128, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0, 0, 0, 0,
+ 200,208,212,255,255,255,200,208,212,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,200,208,212,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 200,208,212,255,255,255,200,208,212,255,255,255, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,200,208,212,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 200,208,212,200,208,212,200,208,212,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255, 0, 0, 0, 0, 0, 0,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128,
+ 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,128,128,128,128,128,128,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255,200,208,212, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0);
+
+Const
+ stdimg_vfd_panel : Array[0..1549] of byte = (
+ 66, 77, 14, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 22, 0, 0, 0, 22, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 216, 5, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,200,208,212,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,200,208,212,255,255,255, 27, 55,
+ 229, 0, 0, 27, 55,229,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0);
+
+Const
+ stdimg_vfd_label : Array[0..837] of byte = (
+ 66, 77, 70, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 18, 0, 0, 0, 14, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 16, 3, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 0, 0, 27, 55,229, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,128,128, 27, 55,229, 0, 0, 27, 55,229, 27,
+ 55,229, 0, 0, 0, 0, 0, 0,128,128,128, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,128,128,
+ 128, 0, 0, 0, 0, 0, 0,128,128,128, 27, 55,229, 27, 55,229, 0,
+ 0, 27, 55,229, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0,
+ 0, 0, 0, 0,128,128,128, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0,128,128,128,
+ 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 27, 55,229, 27, 55,229,
+ 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0, 0, 0, 0,
+ 128,128,128, 27, 55,229, 27, 55,229, 27, 55,229,128,128,128, 0, 0,
+ 0, 0, 0, 0,128,128,128, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,128,
+ 128,128, 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 0, 0, 0, 0, 0, 0,128,128,128, 27,
+ 55,229,128,128,128, 0, 0, 0, 0, 0, 0,128,128,128, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,128,128,128, 0, 0,
+ 0, 0, 0, 0, 27, 55,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,128,128,128, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229,128,128,128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,128,128,128, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 0, 0);
+
+Const
+ stdimg_vfd_scrollbar : Array[0..773] of byte = (
+ 66, 77, 6, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 24, 0, 0, 0, 10, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 208, 2, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,
+ 229,128,128,128,200,208,212,200,208,212,200,208,212,200,208,212, 0,
+ 0, 0,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0, 0,
+ 255,255,255,200,208,212,255,255,255,200,208,212,255,255,255, 0, 0,
+ 0,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0, 0, 27,
+ 55,229, 27, 55,229,128,128,128,255,255,255,128,128,128,128,128,128,
+ 200,208,212, 0, 0, 0,255,255,255,200,208,212,200,208,212,200,208,
+ 212, 0, 0, 0,200,208,212,255,255,255,200,208,212,255,255,255,200,
+ 208,212, 0, 0, 0,255,255,255,128,128,128,128,128,128,200,208,212,
+ 0, 0, 0, 27, 55,229, 27, 55,229,128,128,128,255,255,255, 0, 0,
+ 0, 0, 0, 0,200,208,212, 0, 0, 0,255,255,255,200,208,212,200,
+ 208,212,200,208,212, 0, 0, 0,255,255,255,200,208,212,255,255,255,
+ 200,208,212,255,255,255, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,
+ 0,200,208,212, 0, 0, 0, 27, 55,229, 27, 55,229,128,128,128,255,
+ 255,255,255,255,255,255,255,255,200,208,212, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,200,208,212, 0, 0, 0,200,208,212,255,255,
+ 255,200,208,212,255,255,255,200,208,212, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255,200,208,212, 0, 0, 0, 27, 55,229, 27, 55,229,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128, 0, 0, 0, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229);
+
+Const
+ stdimg_vfd_arrow : Array[0..701] of byte = (
+ 66, 77,190, 2, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 12, 0, 0, 0, 18, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 136, 2, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,255,255,255,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,255,
+ 255,255, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,
+ 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,255,255,
+ 255, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0,
+ 0, 0, 0, 0, 0, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,
+ 255,255,255, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,
+ 255,255, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255, 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,
+ 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0, 0,255,
+ 255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 0, 0,
+ 0,255,255,255,255,255,255,255,255,255, 0, 0, 0, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 0, 0, 0,255,255,255, 0, 0, 0, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 0, 0, 0, 0, 0, 0, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229);
+
+Const
+ stdimg_vfd_dbgrid : Array[0..1549] of byte = (
+ 66, 77, 14, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 22, 0, 0, 0, 22, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 216, 5, 0, 0, 18, 11, 0, 0, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,200,208,212, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,255,255,255, 0, 0, 0,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,200,208,212, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,255,255,255, 0, 0, 0,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,200,208,212, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,255,255,255, 0, 0, 0,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,200,208,212, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,255,255,255, 0, 0, 0,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0,200,208,212, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 0, 0, 0, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,128,128,128,128,128,128,128,128,128,128,128,128, 0, 0,
+ 0,200,208,212, 0, 0, 0,255,255,255,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,255,255,255,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212, 0, 0,
+ 0, 0, 0,128,128,128,200,208,212,128,128,128,255,255,255, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,128,128,128,255,255,255,128,128,128,255,255,255,200,208,
+ 212,200,208,212,255,255,255,200,208,212,255,255,255,200,208,212,200,
+ 208,212,200,208,212,200,208,212,255,255,255,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,200,208,212,128,128,128,255,255,255,255,255,
+ 255,255,255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,255,255,255,128,128,128,255,255,255,200,208,
+ 212,200,208,212,255,255,255,200,208,212,255,255,255,200,208,212,200,
+ 208,212,200,208,212,255,255,255,255,255,255,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,200,208,212,128,128,128,255,255,255,255,255,
+ 255,255,255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,255,255,255,128,128,128,255,255,255,200,208,
+ 212,200,208,212,255,255,255,200,208,212,255,255,255,200,208,212,200,
+ 208,212,200,208,212,200,208,212,255,255,255,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,200,208,212,128,128,128,255,255,255,255,255,
+ 255,255,255,255,255,255,255,200,208,212,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,200,208,212,128,128,128,255,255,255,200,208,
+ 212,200,208,212,200,208,212,200,208,212,255,255,255,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128, 34, 34,217,
+ 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,217, 34, 34,
+ 217, 0, 0);
+
+Const
+ stdimg_vfd_other : Array[0..1549] of byte = (
+ 66, 77, 14, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 22, 0, 0, 0, 22, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 216, 5, 0, 0,195, 10, 0, 0,195, 10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192, 0,
+ 0, 0, 0, 0, 0,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192, 0,
+ 0, 0, 0, 0, 0,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192, 0,
+ 0, 0, 0, 0, 0,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192, 0,
+ 0, 0, 0, 0, 0,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192, 10, 25, 10, 0, 0, 0,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192, 19, 47, 19, 0, 0, 0,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192, 0, 0, 0, 15, 39, 15,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192, 0, 0, 0, 1, 4, 1,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192, 21, 53, 21,192,224,192,192,
+ 224,192,192,224,192, 34, 85, 34, 0, 0, 0, 8, 20, 8,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192, 19, 47, 19, 4,
+ 10, 4, 1, 4, 1, 13, 34, 13,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0,192,224,192,192,224,192,192,224,
+ 192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,
+ 224,192,192,224,192,192,224,192,192,224,192,192,224,192,192,224,192,
+ 192,224,192,192,224,192,192,224,192,192,224,192, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 55,
+ 229, 0, 0, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27,
+ 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229,
+ 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,229, 27, 55,
+ 229, 0, 0);
+
+
+
+Const
+ stdimg_vfd_progressbar : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,
+ 0,132,132,132,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 0, 0, 0,132,132,132,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255,255,255, 0, 0, 0,132,132,132,255, 0,255,255, 0,
+ 0,255, 0, 0,255, 0, 0,255, 0,255,255, 0, 0,255, 0, 0,255,
+ 0, 0,255, 0,255,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255,255,255, 0, 0, 0,132,132,132,255,
+ 0,255,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,255,255, 0, 0,
+ 255, 0, 0,255, 0, 0,255, 0,255,255, 0, 0,255, 0, 0,255, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,255, 0, 0, 0,
+ 132,132,132,255, 0,255,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,
+ 255,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,255,255, 0, 0,255,
+ 0, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,
+ 255, 0, 0, 0,132,132,132,255, 0,255,255, 0, 0,255, 0, 0,255,
+ 0, 0,255, 0,255,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,255,
+ 255, 0, 0,255, 0, 0,255, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255,255,255, 0, 0, 0,132,132,132,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255,255,255, 0, 0, 0,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_trackbar : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255, 0, 0, 0,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0,255,
+ 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255, 0, 0, 0, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132,132,
+ 132,132, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132,
+ 198,198,198,198,198,198,132,132,132, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,
+ 255,198,198,198,198,198,198,198,198,198,198,198,198,132,132,132, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,198,198,198,198,198,198,198,198,198,198,198,198,
+ 132,132,132, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255, 0,255, 0, 0, 0,255, 0,255,132,132,132,198,198,198,
+ 198,198,198,198,198,198,255,255,255,198,198,198,198,198,198,198,198,
+ 198,198,198,198,132,132,132, 0, 0, 0,198,198,198,198,198,198,198,
+ 198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+ 198,198,198,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,132,132,
+ 132,132,132,132,132,132,132,132,132,132,255,255,255,198,198,198,198,
+ 198,198,198,198,198,198,198,198,132,132,132, 0, 0, 0,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,255, 0,255, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,255,
+ 198,198,198,198,198,198,198,198,198,198,198,198,132,132,132, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255,255,255,198,198,198,198,198,198,198,198,198,198,198,198,132,
+ 132,132, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_gauge : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,132,132,132,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,132,132,132,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,255, 0, 0,
+ 0,132,132,132,255, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,
+ 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255,
+ 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 255,255, 0, 0, 0,132,132,132,255, 0,255, 0, 0,255, 0, 0,255,
+ 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,
+ 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,255,255,255, 0, 0, 0,132,132,132,255, 0,255, 0, 0,
+ 255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,
+ 0,255, 0, 0,255, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,255, 0, 0,255, 0, 0,255, 0, 0, 0,255, 0,255, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0,132,132,132,255,
+ 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255,
+ 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255, 0, 0,255, 0, 0, 0, 0, 0,255, 0, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255, 0, 0, 0,255, 0,255,255,255,255, 0, 0, 0,
+ 132,132,132,255, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255, 0, 0,255, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0,255, 0, 0,255,
+ 0, 0, 0,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,255,
+ 255, 0, 0, 0,132,132,132,255, 0,255, 0, 0,255, 0, 0,255, 0,
+ 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0, 0,
+ 0, 0,255, 0, 0, 0, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0,255,
+ 0,255,255,255,255, 0, 0, 0,132,132,132,255, 0,255, 0, 0,255,
+ 0, 0,255, 0, 0,255, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255, 0, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255,255,255, 0, 0, 0,132,132,132,255, 0,
+ 255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,
+ 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255,
+ 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255,255,255, 0, 0, 0,132,
+ 132,132,255, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255,
+ 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,255,255,
+ 0, 0, 0,132,132,132,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255,255,255, 0, 0, 0,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+ 132,132,132,132,132,132,132,132, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_menubar : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,126,124,
+ 123, 17, 7, 7, 21, 0, 0, 25, 0, 0, 21, 0, 0, 27, 6, 8, 20,
+ 4, 5, 12, 0, 0, 12, 4, 5, 11, 6, 7, 0, 0, 1,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,134,130,129,255,246,244,255,251,252,255,250,252,255,251,252,
+ 255,244,244,255,245,247,255,252,254,255,242,244,255,254,255, 5, 0,
+ 2,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,142,135,132,255,253,252, 48, 11, 13, 47, 4,
+ 7, 52, 9, 12, 52, 13, 15,255,250,254,255,251,254,255,250,253,255,
+ 250,252, 7, 0, 3,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,125,116,113,255,252,252,255,
+ 250,251,255,248,250,255,247,249,255,247,249,255,250,252,255,244,245,
+ 255,252,254,255,253,254, 7, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,140,131,128,
+ 38, 12, 12, 44, 0, 1, 62, 7, 10, 69, 10, 14, 70, 15, 18, 49, 4,
+ 7, 58, 24, 25, 37, 13, 15, 18, 4, 5, 21, 13, 14,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,148,139,136,255,252,251,255,249,251,255,247,251,255,247,249,255,
+ 237,238,255,245,247,255,249,249,255,250,249,255,253,254, 7, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,128,119,116,255,247,246, 50, 0, 2, 77, 14, 16,
+ 68, 5, 7, 76, 18, 19, 61, 14, 16,255,248,248,255,253,252,255,255,
+ 252, 9, 5, 4,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,132,123,120,255,252,251,255,249,
+ 249,255,235,237,255,244,246,255,249,248,255,242,240,255,252,251,255,
+ 254,252,255,253,249, 0, 1, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,131,122,119,255,
+ 249,248, 62, 10, 10, 72, 9, 11, 71, 11, 11, 63, 12, 10,255,251,249,
+ 255,254,249,254,245,242,253,255,252, 0, 5, 2,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 141,134,131,255,252,251,255,245,245,255,245,247,255,246,245,255,246,
+ 244,255,252,249,255,254,249,255,255,252,250,255,252, 0, 2, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,129,124,121,255,245,243, 58, 16, 17, 60, 10, 10, 55,
+ 11, 10, 49, 16, 13, 34, 12, 7,255,254,250,249,255,250,244,255,252,
+ 0, 3, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,138,134,133,255,254,252,255,252,252,
+ 255,247,247,255,253,252,255,253,249,255,254,249,250,255,252,238,255,
+ 249,236,255,251, 0, 8, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255,255, 0,255,132,130,130,137,127,127,139,123,
+ 124,145,123,125,161,134,137,140,114,114,162,141,140,139,127,125,132,
+ 129,125,133,140,135,114,124,118,122,132,126, 0, 2, 0, 13, 9, 8,
+ 9, 0, 0, 13, 0, 0, 14, 0, 0, 11, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,138,124,126,255,
+ 252,254, 35, 2, 6, 59, 19, 24, 48, 0, 4, 76, 14, 20, 59, 0, 3,
+ 255,243,247,255,250,252,255,250,250,255,251,250,255,253,252,255,253,
+ 252,255,242,245,255,251,254,255,246,249,255,251,254,255,252,254,150,
+ 132,133,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 158,135,139,255,250,254, 55, 14, 19,255,247,254,255,245,253,255,241,
+ 249, 80, 7, 15,255,246,252, 55, 4, 8, 46, 7, 9, 45, 13, 14,255,
+ 239,239,255,250,250, 46, 17, 20, 37, 6, 9, 42, 13, 16,255,247,250,
+ 255,252,254,133,121,121, 5, 0, 0,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,146,119,123,255,250,254, 50, 4, 10, 54, 0, 7, 67,
+ 8, 16, 67, 7, 13, 66, 8, 13,255,245,248,255,250,252,255,252,252,
+ 255,253,252,255,253,254,255,254,254,255,249,249,255,248,248,255,254,
+ 254,255,255,254,248,248,248,250,255,255,107,120,118,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,150,127,131,157,126,129,154,114,119,
+ 180,134,140,171,123,129,154,111,114,161,124,126,161,133,133,137,117,
+ 116,143,131,129,123,118,115,135,131,130,120,118,117,135,133,132,136,
+ 134,133,128,129,127,122,125,123,115,123,122,125,139,137,114,133,130,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_listview : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,192,192,192,255,255,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,
+ 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,
+ 192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 128,128,128, 0, 0, 0,255,255,255,255,255,255, 0,255,255, 0,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0,
+ 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,128,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,255,
+ 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,
+ 255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0,
+ 0,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,
+ 255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
+ 255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,
+ 128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255, 0,255,
+ 255, 0, 0,255,255,255,255,255,255,255,255,255,255,128,128,128, 0,
+ 255,255,255,255,255,255,255,255,255,255,255, 0,255,255,128, 0, 0,
+ 255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,
+ 255,255, 0, 0,255,128, 0, 0,255,255,255,255,255,255,255,255,255,
+ 0,255,255, 0, 0,255,255,255,255,255,255,255,255,255,255, 0, 0,
+ 255, 0,255,255,255,255,255,255,255,255,255,255,255,192,192,192,255,
+ 255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,
+ 128, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,
+ 255,255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255,
+ 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,192,192,192,255,255,255,255, 0,255,
+ 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,
+ 255, 0,255,255, 0,255,255,255,255,255,255,255,255,255,255,255, 0,
+ 0,255, 0,255,255,255,255,255,255,255,255,255,255,255, 0,255,255,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,
+ 255,255,255,255,255,128, 0, 0, 0,255,255,255,255,255,255,255,255,
+ 255,255,255, 0,255,255,128, 0, 0,255,255,255,255,255,255,255,255,
+ 255, 0,255,255,128,128,128,255,255,255,255,255,255,255,255,255,192,
+ 192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_stringgrid : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 128, 0, 0,128, 0, 0,128, 0, 0,255, 0,255,128, 0, 0,128, 0,
+ 0,128, 0, 0,255, 0,255,255, 0,255,255, 0,255,128, 0, 0,128,
+ 0, 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,128, 0, 0,255, 0,255,255, 0,255,128, 0, 0,255, 0,255,128,
+ 0, 0,255, 0,255,255, 0,255,128, 0, 0,255, 0,255,128, 0, 0,
+ 255, 0,255,255, 0,255,128, 0, 0,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,128, 0, 0,255, 0,255,255, 0,255,128, 0, 0,
+ 255, 0,255,128, 0, 0,255, 0,255,255, 0,255,128, 0, 0,255, 0,
+ 255,128, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,128, 0, 0,128, 0,
+ 0,128, 0, 0,255, 0,255,128, 0, 0,255, 0,255,255, 0,255,128,
+ 0, 0,255, 0,255,128, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,128, 0, 0,255, 0,255,128, 0, 0,255, 0,255,
+ 255, 0,255,128, 0, 0,255, 0,255,128, 0, 0,255, 0,255,255, 0,
+ 255,128, 0, 0,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,128, 0, 0,128, 0, 0,255, 0,255,255, 0,255,128, 0,
+ 0,128, 0, 0,128, 0, 0,255, 0,255,255, 0,255,255, 0,255,128,
+ 0, 0,128, 0, 0,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,128, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,128, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255, 0, 0, 0,192,192,
+ 192, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255, 0,
+ 0, 0,255,255,255, 0, 0, 0,255,255,255,128, 0, 0,128, 0, 0,
+ 128, 0, 0,255,255,255,192,192,192,255,255,255,128, 0, 0,128, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255, 0, 0, 0,192,192,192, 0, 0, 0,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255, 0, 0, 0,255,255,255, 0, 0, 0,255,
+ 255,255,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,192,192,192,
+ 255,255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0,
+ 0,128, 0, 0,255,255,255, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 0, 0, 0,255, 0,255, 0, 0, 0,192,192,192,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255, 0, 0,
+ 0,255,255,255, 0, 0, 0,255,255,255,128, 0, 0,128, 0, 0,128,
+ 0, 0,255,255,255,192,192,192,255,255,255,128, 0, 0,128, 0, 0,
+ 128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,255,255,255, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255,
+ 0,255, 0, 0, 0,192,192,192, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255, 0, 0, 0,255,255,255, 0, 0, 0,255,255,
+ 255,128, 0, 0,128, 0, 0,128, 0, 0,255,255,255,192,192,192,255,
+ 255,255,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,128, 0, 0,
+ 128, 0, 0,255,255,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255, 0, 0, 0,192,192,192, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255, 0, 0, 0,192,192,192, 0, 0, 0,255,255,255,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,255,255,255,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_radiobutton : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255,255,255,255,255,255,206,214,214,206,214,214,206,214,214,206,
+ 214,214,255,255,255,255,255,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,132,132,132,206,214,214,206,214,214,255,255,255,255,255,255,
+ 255,255,255,255,255,255,206,214,214,206,214,214,255,255,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,132,132,132, 66, 66, 66,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,206,214,214,255,
+ 255,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,132,132,132, 66, 66, 66,255,255,255,255,
+ 255,255,255,255,255, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,206,214,214,255,255,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132, 66, 66, 66,
+ 255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,255,255,255,255,255,255,206,214,214,255,255,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,
+ 132, 66, 66, 66,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,206,214,214,255,255,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,132,132,132, 66, 66, 66,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,206,214,
+ 214,255,255,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,132,132,132, 66, 66, 66,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,206,
+ 214,214,255,255,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132, 66,
+ 66, 66, 66, 66, 66,255,255,255,255,255,255,255,255,255,255,255,255,
+ 66, 66, 66, 66, 66, 66,255,255,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,132,132,132,132,132,132, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66,132,132,132,132,132,132,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,132,132,132,132,
+ 132,132,132,132,132,132,132,132,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_pagecontrol : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0,196, 14, 0, 0,196, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255,255,255,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128, 0, 0, 0,255, 0,255,255,255,255,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,128,128,128, 0, 0, 0,255, 0,255,255,255,255,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,128,128,128, 0, 0, 0,255, 0,255,
+ 255,255,255,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,128,128,128, 0, 0,
+ 0,255, 0,255,255,255,255,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,128,
+ 128,128, 0, 0, 0,255, 0,255,255,255,255,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,128,128,128, 0, 0, 0,255, 0,255,255,255,255,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,128,128,128, 0, 0, 0,255, 0,255,255,
+ 255,255,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,128,128,128, 0, 0, 0,
+ 255, 0,255,255,255,255,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,128,128,
+ 128, 0, 0, 0,255, 0,255,255,255,255,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,128,128,128, 0, 0, 0,255, 0,255,255,255,255,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,128,128,128,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,128,128,128, 0, 0, 0,255, 0,255,255,255,
+ 255,192,192,192, 0, 0, 0,192,192,192, 0, 0, 0, 0, 0, 0,192,
+ 192,192, 0, 0, 0,192,192,192,128,128,128,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,128,128,128,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,128,128,128, 0, 0, 0,255,
+ 0,255,255,255,255,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,128,128,128,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,128,128,128,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,128,128,128,
+ 0, 0, 0,255, 0,255,255,255,255,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,128,
+ 128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+Const
+ stdimg_vfd_treeview : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,192,192,192,255,255,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255, 10,145,175, 29,213,249, 10,145,175,255,255,255,255,255,255,
+ 142,142,142, 89, 89, 89,142,142,142,255,255,255,255,255,255,192,192,
+ 192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0,
+ 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 142,142,142,142,142,142, 10,145,175, 10,145,175, 10,145,175,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,142,142,142,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0,
+ 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,
+ 255,255,255,255,255, 10,145,175, 29,213,249, 10,145,175,255,255,255,
+ 255,255,255,142,142,142, 89, 89, 89, 89, 89, 89, 89, 89, 89,255,255,
+ 255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,255,
+ 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,
+ 255,255,255,255,255,255,255,255,255, 29,213,249, 10,145,175, 10,145,
+ 175,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,
+ 255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0,
+ 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,
+ 142,142,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,
+ 128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,142,142,142,255,255,255, 10,145,175, 29,213,249, 10,145,
+ 175,255,255,255,255,255,255,142,142,142, 89, 89, 89, 89, 89, 89,255,
+ 255,255,255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,142,142,142,142,142,142, 29,213,249, 10,
+ 145,175, 10,145,175,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,192,192,192,255,255,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,142,142,142,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,255,
+ 255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,
+ 255,255,255,255,255,255,255,255,255,255,255,255, 10,145,175, 29,213,
+ 249, 10,145,175,255,255,255,255,255,255, 89, 89, 89, 89, 89, 89,142,
+ 142,142,142,142,142,255,255,255,255,255,255,255,255,255,255,255,255,
+ 192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,
+ 128, 0, 0, 0,255,255,255,255,255,255,142,142,142,142,142,142, 29,
+ 213,249, 10,145,175, 10,145,175,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255,
+ 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,142,142,142,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,192,192,192,255,255,255,255, 0,255,
+ 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255, 10,145,
+ 175, 29,213,249, 10,145,175,255,255,255,255,255,255,255,255,255,142,
+ 142,142, 89, 89, 89, 89, 89, 89,142,142,142, 89, 89, 89,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,
+ 255,255, 29,213,249, 10,145,175, 10,145,175,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192,
+ 192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+
+
+Const
+ stdimg_vfd_newform : Array[0..821] of byte = (
+ 66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,198, 75,140,
+ 195,142,104,192,139,102,190,136,100,187,133, 97,185,131, 95,180,126,
+ 92,178,124, 90,177,123, 88,174,121, 87,173,118, 86,171,117, 84,169,
+ 115, 83,169,113, 81,198, 75,140,255, 0,255,200,146,108,230,229,229,
+ 229,229,229,229,229,230,229,229,229,229,229,229,230,229,229,229,229,
+ 229,230,229,229,229,230,229,230,230,230,230,229,229,229,230,230,230,
+ 229,230,169,114, 81,255, 0,255,202,148,110,231,231,231,232,231,231,
+ 231,231,231,231,231,231,231,231,231,195,195,195,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,231,231,231,170,
+ 115, 83,255, 0,255,204,151,111,233,233,233,210,131, 88,210,131, 88,
+ 210,131, 88,233,233,233,195,195,195,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,233,234,234,172,117, 84,255,
+ 0,255,209,156,115,236,236,236,236,236,235,236,236,235,236,236,236,
+ 236,235,236,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+ 195,195,195,195,195,195,195,236,236,235,176,122, 88,255, 0,255,212,
+ 158,117,239,238,238,239,239,239,239,238,238,239,238,238,238,239,238,
+ 238,238,238,238,239,239,238,238,238,238,238,238,238,238,238,239,238,
+ 238,238,238,238,238,238,239,178,124, 90,255, 0,255,213,160,118,241,
+ 241,240,241,240,241,240,241,241,241,240,241,241,241,241,195,195,195,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,241,241,241,181,126, 92,255, 0,255,216,162,121,242,242,242,210,
+ 131, 88,210,131, 88,210,131, 88,242,242,243,195,195,195,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243,243,
+ 243,183,129, 94,255, 0,255,217,163,121,245,245,245,245,245,244,244,
+ 245,244,244,244,244,245,245,244,195,195,195,195,195,195,195,195,195,
+ 195,195,195,195,195,195,195,195,195,195,195,195,244,244,245,186,133,
+ 96,255, 0,255,219,164,122,246,246,246,246,246,246,246,246,246,246,
+ 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+ 246,246,246,246,246,246,246,246,246,246,246,246,189,135, 99,255, 0,
+ 255,220,167,123,220,167,123,220,167,123,220,167,123,220,167,123,220,
+ 167,123,220,167,123,220,167,123,220,167,123,220,167,123,220,167,123,
+ 220,167,123,220,167,123,220,167,123,192,139,102,255, 0,255,221,171,
+ 134,232,185,146,232,185,146,232,185,146,232,185,146,232,185,146,232,
+ 185,146,232,185,146,232,185,146,232,185,146,232,185,146,232,185,146,
+ 232,185,146,232,185,146,193,143,112,255, 0,255,219, 47,182,222,169,
+ 146,220,167,123,220,166,122,218,164,122,216,162,121,213,160,118,212,
+ 158,117,210,157,115,207,154,114,206,153,112,203,150,111,201,148,108,
+ 199,147,128,219, 47,182,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255);
+
+
+
+Const
+ stdimg_vfd_dateedit : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,128,128,128,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,128,128,128,192,192,
+ 192,192,192,192, 0, 0, 0,128, 0, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0,128, 0, 0,128, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0,
+ 128, 0, 0, 0, 0, 0,192,192,192, 0, 0, 0, 0, 0, 0,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,128,
+ 128,128,192,192,192,192,192,192,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,192,192,192, 0, 0, 0, 0,
+ 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,128,128,128,192,192,192,192,192,192,255,255,255,255,255,
+ 255, 0, 0,128, 0, 0,128, 0, 0,128,255,255,255, 0, 0,128, 0,
+ 0,128, 0, 0,128,192,192,192,255,255,255,255,255,255,192,192,192,
+ 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,128,128,128,192,192,192,192,192,192,255,
+ 255,255,255,255,255,255,255,255, 0, 0,128,255,255,255,255,255,255,
+ 192,192,192,255,255,255,192,192,192, 0, 0,128,255,255,255,255,255,
+ 255,192,192,192, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,128,128,128,192,192,192,
+ 192,192,192,255,255,255,255,255,255,255,255,255, 0, 0,128,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0,128,255,
+ 255,255,255,255,255,192,192,192, 0, 0, 0, 0, 0, 0,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,128,128,
+ 128,192,192,192,192,192,192,255,255,255,255,255,255,255,255,255, 0,
+ 0,128,255,255,255,255,255,255, 0, 0,128, 0, 0,128, 0, 0,128,
+ 192,192,192,255,255,255,255,255,255,192,192,192, 0, 0, 0, 0, 0,
+ 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,128,128,128,192,192,192,192,192,192,255,255,255,255,255,255,
+ 0, 0,128, 0, 0,128,255,255,255,255,255,255, 0, 0,128,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192, 0,
+ 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,128,128,128,192,192,192,192,192,192,255,255,
+ 255,255,255,255,255,255,255, 0, 0,128,255,255,255,255,255,255, 0,
+ 0,128, 0, 0,128, 0, 0,128, 0, 0,128,255,255,255,255,255,255,
+ 192,192,192, 0, 0, 0, 0, 0, 0,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,128,128,128,192,192,192,192,
+ 192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,192,192,192, 0, 0, 0, 0, 0, 0,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,128,128,128,
+ 192,192,192,192,192,192,255,255,255,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,255,255,255,192,192,192, 0, 0, 0, 0, 0, 0,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,128,128,128,192,192,192,192,192,192, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,192,192, 0, 0,
+ 0, 0, 0, 0,255, 0,255,128,128,128,255,255,255,255,255,255,255,
+ 255,255,255,255,255,128,128,128,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+ 192,192, 0, 0, 0, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,
+ 192,192,192,192,192,192,192,192,192, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,128,128,
+ 128, 0, 0, 0,255,255,255,255,255,255,255,255,255, 0, 0, 0,255,
+ 255,255, 0, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,
+ 255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0, 0,255, 0,
+ 0,255, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0, 0,255,
+ 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,192,192,192,255,255,255,192,192,192,
+ 0, 0, 0, 0, 0, 0,192,192,192,128,128,128,192,192,192,255,255,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128, 0, 0, 0,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,255,255,
+ 255,192,192,192,192,192,192,192,192,192,192,192,192,128,128,128,192,
+ 192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192,
+ 192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,192,192,192,255,255,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
+
+Const
+ stdimg_vfd_bevel : Array[0..1709] of byte = (
+ 66, 77,174, 6, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0,
+ 0, 23, 0, 0, 0, 23, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0,
+ 120, 6, 0, 0, 19, 11, 0, 0, 19, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,200,208,212,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128,200,208,212,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,255,255,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,128,128,128,255,255,255,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,255,255,
+ 255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,
+ 255,255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,128,128,128,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,200,208,212,128,
+ 128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,
+ 128,128,128,255,255,255,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,128,128,128,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,255,255,255,
+ 200,208,212,128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0,
+ 0,255, 0,255,128,128,128,255,255,255,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,255,255,255,200,208,212,128,128,128,255,255,255,255, 0,255,255,
+ 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,128,128,128,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,255,255,255,200,208,212,128,128,128,255,255,255,
+ 255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,
+ 255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,255,255,255,200,208,212,128,128,
+ 128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,
+ 128,128,255,255,255,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,
+ 255, 0,255,128,128,128,255,255,255,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,128,128,128,255,255,255,255, 0,255,255, 0,
+ 255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,255,
+ 255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,128,128,128,255,255,255,255,
+ 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,
+ 200,208,212,255,255,255,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,128,128,128,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,
+ 255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,
+ 128,255,255,255,200,208,212,255,255,255,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,128,128,128,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255,
+ 0,255,128,128,128,255,255,255,200,208,212,255,255,255,200,208,212,
+ 200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,128,128,128,255,255,255,255, 0,255,255, 0,255,
+ 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,208,212,255,255,
+ 255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,128,
+ 128,128,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 200,208,212,200,208,212,200,208,212,128,128,128,255,255,255,255, 0,
+ 255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,255,255,255,200,
+ 208,212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,128,128,128,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,128,128,128,255,
+ 255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,255,128,128,128,
+ 255,255,255,200,208,212,200,208,212,200,208,212,200,208,212,200,208,
+ 212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,
+ 208,212,200,208,212,200,208,212,200,208,212,200,208,212,200,208,212,
+ 128,128,128,255,255,255,255, 0,255,255, 0,255, 0, 0, 0,255, 0,
+ 255,128,128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,200,208,212,255,255,255,255, 0,255,255, 0,255, 0,
+ 0, 0,255, 0,255,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,200,208,212,255, 0,255,
+ 255, 0,255, 0, 0, 0,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255,
+ 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,
+ 255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,255,255, 0,
+ 255,255, 0,255,255, 0,255, 0, 0, 0);
+
diff --git a/uidesigner/images/dateedit.bmp b/uidesigner/images/dateedit.bmp
new file mode 100644
index 00000000..7e075c10
--- /dev/null
+++ b/uidesigner/images/dateedit.bmp
Binary files differ
diff --git a/uidesigner/images/gauge.bmp b/uidesigner/images/gauge.bmp
new file mode 100644
index 00000000..3de08d15
--- /dev/null
+++ b/uidesigner/images/gauge.bmp
Binary files differ
diff --git a/uidesigner/images/listview.bmp b/uidesigner/images/listview.bmp
new file mode 100644
index 00000000..740de6d8
--- /dev/null
+++ b/uidesigner/images/listview.bmp
Binary files differ
diff --git a/uidesigner/images/menubar.bmp b/uidesigner/images/menubar.bmp
new file mode 100644
index 00000000..011e7048
--- /dev/null
+++ b/uidesigner/images/menubar.bmp
Binary files differ
diff --git a/uidesigner/images/newform_16.bmp b/uidesigner/images/newform_16.bmp
new file mode 100644
index 00000000..674ccabc
--- /dev/null
+++ b/uidesigner/images/newform_16.bmp
Binary files differ
diff --git a/uidesigner/images/pagecontrol.bmp b/uidesigner/images/pagecontrol.bmp
new file mode 100644
index 00000000..355ffacf
--- /dev/null
+++ b/uidesigner/images/pagecontrol.bmp
Binary files differ
diff --git a/uidesigner/images/progressbar.bmp b/uidesigner/images/progressbar.bmp
new file mode 100644
index 00000000..ec860f18
--- /dev/null
+++ b/uidesigner/images/progressbar.bmp
Binary files differ
diff --git a/uidesigner/images/radiobutton.bmp b/uidesigner/images/radiobutton.bmp
new file mode 100644
index 00000000..89e8cfe7
--- /dev/null
+++ b/uidesigner/images/radiobutton.bmp
Binary files differ
diff --git a/uidesigner/images/shape_align_bottom.bmp b/uidesigner/images/shape_align_bottom.bmp
new file mode 100644
index 00000000..d9495933
--- /dev/null
+++ b/uidesigner/images/shape_align_bottom.bmp
Binary files differ
diff --git a/uidesigner/images/shape_align_left.bmp b/uidesigner/images/shape_align_left.bmp
new file mode 100644
index 00000000..c9c3ab38
--- /dev/null
+++ b/uidesigner/images/shape_align_left.bmp
Binary files differ
diff --git a/uidesigner/images/shape_align_right.bmp b/uidesigner/images/shape_align_right.bmp
new file mode 100644
index 00000000..d26d4ad2
--- /dev/null
+++ b/uidesigner/images/shape_align_right.bmp
Binary files differ
diff --git a/uidesigner/images/shape_align_top.bmp b/uidesigner/images/shape_align_top.bmp
new file mode 100644
index 00000000..9d26f3d8
--- /dev/null
+++ b/uidesigner/images/shape_align_top.bmp
Binary files differ
diff --git a/uidesigner/images/stringgrid.bmp b/uidesigner/images/stringgrid.bmp
new file mode 100644
index 00000000..1930f4a5
--- /dev/null
+++ b/uidesigner/images/stringgrid.bmp
Binary files differ
diff --git a/uidesigner/images/trackbar.bmp b/uidesigner/images/trackbar.bmp
new file mode 100644
index 00000000..7bca6e56
--- /dev/null
+++ b/uidesigner/images/trackbar.bmp
Binary files differ
diff --git a/uidesigner/images/treeview.bmp b/uidesigner/images/treeview.bmp
new file mode 100644
index 00000000..ff480a8f
--- /dev/null
+++ b/uidesigner/images/treeview.bmp
Binary files differ
diff --git a/uidesigner/newformdesigner.pas b/uidesigner/newformdesigner.pas
new file mode 100644
index 00000000..0f6af0f8
--- /dev/null
+++ b/uidesigner/newformdesigner.pas
@@ -0,0 +1,922 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Essential classes used by the fpGUI Designer
+}
+
+unit newformdesigner;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils,
+ Classes,
+ gfxbase,
+ gfx_widget,
+ gui_form,
+ gui_label,
+ gui_button,
+ gui_edit,
+ gui_listbox,
+ gui_memo,
+ gui_combobox,
+ gui_menu,
+ gui_mru,
+ gui_hyperlink,
+ vfdwidgetclass,
+ vfdwidgets;
+
+type
+
+ TwgPaletteButton = class(TfpgButton)
+ public
+ VFDWidget: TVFDWidgetClass;
+ end;
+
+
+ TwgPalette = class(TfpgWidget)
+ protected
+ procedure HandlePaint; override;
+ end;
+
+
+ TfrmMain = class(TfpgForm)
+ private
+ FFileOpenRecent: TfpgMenuItem;
+ procedure miHelpAboutClick(Sender: TObject);
+ procedure miHelpAboutGUI(Sender: TObject);
+ procedure miMRUClick(Sender: TObject; const FileName: string);
+ public
+ {@VFD_HEAD_BEGIN: frmMain}
+ MainMenu: TfpgMenuBar;
+ btnNewForm: TfpgButton;
+ btnOpen: TfpgButton;
+ btnSave: TfpgButton;
+ wgpalette: TwgPalette;
+ chlPalette: TfpgComboBox;
+ filemenu: TfpgPopupMenu;
+ formmenu: TfpgPopupMenu;
+ setmenu: TfpgPopupMenu;
+ miOpenRecentMenu: TfpgPopupMenu;
+ helpmenu: TfpgPopupMenu;
+ previewmenu: TfpgPopupMenu;
+ {@VFD_HEAD_END: frmMain}
+ mru: TfpgMRU;
+ function GetSelectedWidget: TVFDWidgetClass;
+ procedure SetSelectedWidget(wgc: TVFDWidgetClass);
+ procedure AfterCreate; override;
+ procedure BeforeDestruction; override;
+ procedure OnPaletteClick(Sender: TObject);
+ property SelectedWidget: TVFDWidgetClass read GetSelectedWidget write SetSelectedWidget;
+ end;
+
+
+ TPropertyList = class(TObject)
+ private
+ FList: TList;
+ function GetCount: integer;
+ public
+ Widget: TfpgWidget;
+ constructor Create;
+ destructor Destroy; override;
+ procedure Clear;
+ property Count: integer read GetCount;
+ procedure AddItem(aProp: TVFDWidgetProperty);
+ function GetItem(index: integer): TVFDWidgetProperty;
+ end;
+
+
+ TwgPropertyList = class(TfpgListBox)
+ protected
+ procedure DrawItem(num: integer; rect: TfpgRect; flags: integer); override;
+ procedure HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState); override;
+ procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleMouseScroll(x, y: integer; shiftstate: TShiftState; delta: smallint); override;
+ procedure HandleSetFocus; override;
+ procedure HandleKillFocus; override;
+ procedure OnRowChange(Sender: TObject);
+ procedure OnScrolling(Sender: TObject);
+ procedure OnUpdateProperty(Sender: TObject);
+ public
+ Props: TPropertyList;
+ NameWidth: integer;
+ editor: TVFDPropertyEditor;
+ NameDrag: boolean;
+ NameDragPos: integer;
+ constructor Create(AOwner: TComponent); override;
+ procedure ReleaseEditor;
+ procedure AllocateEditor;
+ function ItemCount: integer; override;
+ function RowHeight: integer; override;
+ procedure RealignEditor;
+ end;
+
+
+ TfrmProperties = class(TfpgForm)
+ protected
+ procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
+ public
+ l1, l2, l3, l4, l5, l6, l7, l8: TfpgLabel;
+ lbClass: TfpgLabel;
+ edName: TfpgEdit;
+ edOther: TfpgMemo;
+ btnTop, btnLeft, btnWidth, btnHeight: TfpgButton;
+ btnAnLeft, btnAnTop, btnAnRight, btnAnBottom: TfpgButton;
+ lstProps: TwgPropertyList;
+ procedure AfterCreate; override;
+ procedure BeforeDestruction; override;
+ end;
+
+
+ TfrmAbout = class(TfpgForm)
+ public
+ {@VFD_HEAD_BEGIN: frmAbout}
+ lblName1: TfpgLabel;
+ lblVersion: TfpgLabel;
+ btnName1: TfpgButton;
+ lblName3: TfpgLabel;
+ lblName4: TfpgHyperlink;
+ lblCompiled: TfpgLabel;
+ {@VFD_HEAD_END: frmAbout}
+ procedure AfterCreate; override;
+ class procedure Execute;
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+var
+ frmProperties: TfrmProperties;
+ frmMain: TfrmMain;
+
+ PropList: TPropertyList;
+
+implementation
+
+uses
+ fpgfx,
+ vfdmain,
+ gui_iniutils,
+ gui_dialogs;
+
+
+// Anchor images
+{$I anchors.inc}
+
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TfrmAbout.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: frmAbout}
+ Name := 'frmAbout';
+ SetPosition(378, 267, 276, 180);
+ WindowTitle := 'Product Information...';
+ Sizeable := False;
+ WindowPosition := wpScreenCenter;
+
+ lblName1 := TfpgLabel.Create(self);
+ with lblName1 do
+ begin
+ Name := 'lblName1';
+ SetPosition(12, 16, 255, 31);
+ Text := 'fpGUI UI Designer';
+ FontDesc := 'Arial-20';
+ end;
+
+ lblVersion := TfpgLabel.Create(self);
+ with lblVersion do
+ begin
+ Name := 'lblVersion';
+ SetPosition(150, 56, 175, 16);
+ Text := 'Version: %s';
+ FontDesc := '#Label2';
+ end;
+
+ btnName1 := TfpgButton.Create(self);
+ with btnName1 do
+ begin
+ Name := 'btnName1';
+ SetPosition(194, 148, 75, 24);
+ Anchors := [anRight,anBottom];
+ Text := 'Close';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.close';
+ ModalResult := 1;
+ end;
+
+ lblName3 := TfpgLabel.Create(self);
+ with lblName3 do
+ begin
+ Name := 'lblName3';
+ SetPosition(12, 100, 241, 14);
+ Text := 'Written by Graeme Geldenhuys';
+ FontDesc := 'Arial-9';
+ end;
+
+ lblName4 := TfpgHyperlink.Create(self);
+ with lblName4 do
+ begin
+ Name := 'lblName4';
+ SetPosition(12, 116, 246, 14);
+ Text := 'http://opensoft.homeip.net/fpgui/';
+ URL := 'http://opensoft.homeip.net/fpgui/';
+ FontDesc := 'Arial-9:underline';
+ TextColor := clRoyalBlue;
+ HotTrackColor := clBlue;
+ HotTrackFont := 'Arial-9:underline';
+ end;
+
+ lblCompiled := TfpgLabel.Create(self);
+ with lblCompiled do
+ begin
+ Name := 'lblCompiled';
+ SetPosition(12, 132, 191, 13);
+ Text := 'Compiled on: %s';
+ FontDesc := 'Arial-8';
+ end;
+
+ {@VFD_BODY_END: frmAbout}
+end;
+
+class procedure TfrmAbout.Execute;
+var
+ frm: TfrmAbout;
+begin
+ frm := TfrmAbout.Create(nil);
+ try
+ frm.lblVersion.Text := Format(frm.lblVersion.Text, [program_version]);
+ frm.lblCompiled.Text := Format(frm.lblCompiled.Text, [ {$I %date%} + ' ' + {$I %time%}]);
+ frm.ShowModal;
+ finally
+ frm.Free;
+ end;
+end;
+
+
+procedure TfrmMain.AfterCreate;
+var
+ n: integer;
+ x: integer;
+ wgc: TVFDWidgetClass;
+ btn: TwgPaletteButton;
+begin
+ {@VFD_BODY_BEGIN: frmMain}
+ Name := 'frmMain';
+ SetPosition(84, 123, 728, 87);
+ WindowTitle := 'frmMain';
+ WindowPosition := wpUser;
+ gINI.ReadFormState(self);
+
+ MainMenu := TfpgMenuBar.Create(self);
+ with MainMenu do
+ begin
+ Name := 'MainMenu';
+ SetPosition(0, 0, 729, 24);
+ Anchors := [anLeft,anRight,anTop];
+ end;
+
+ btnNewForm := TfpgButton.Create(self);
+ with btnNewForm do
+ begin
+ Name := 'btnNewForm';
+ SetPosition(4, 28, 25, 24);
+ Text := '';
+ FontDesc := '#Label1';
+ ImageMargin := -1;
+ ImageName := 'vfd.newform';
+ Focusable := False;
+ OnClick := @(maindsgn.OnNewForm);
+ end;
+
+ btnOpen := TfpgButton.Create(self);
+ with btnOpen do
+ begin
+ Name := 'btnOpen';
+ SetPosition(30, 28, 25, 24);
+ Text := '';
+ FontDesc := '#Label1';
+ ImageMargin := -1;
+ ImageName := 'stdimg.open';
+ Focusable := False;
+ OnClick := @(maindsgn.OnLoadFile);
+ end;
+
+ btnSave := TfpgButton.Create(self);
+ with btnSave do
+ begin
+ Name := 'btnSave';
+ SetPosition(56, 28, 25, 24);
+ Text := '';
+ FontDesc := '#Label1';
+ ImageMargin := -1;
+ ImageName := 'stdimg.save';
+ Focusable := False;
+ OnClick := @(maindsgn.OnSaveFile);
+ end;
+
+ wgpalette := TwgPalette.Create(self);
+ with wgpalette do
+ begin
+ Name := 'wgpalette';
+ SetPosition(116, 28, 613, 28);
+ Anchors := [anLeft,anRight,anTop];
+ Focusable := False;
+ end;
+
+ chlPalette := TfpgComboBox.Create(self);
+ with chlPalette do
+ begin
+ Name := 'chlPalette';
+ SetPosition(116, 60, 200, 22);
+ Items.Add('-');
+ FontDesc := '#List';
+ FocusItem := 0;
+ end;
+
+ filemenu := TfpgPopupMenu.Create(self);
+ with filemenu do
+ begin
+ Name := 'filemenu';
+ SetPosition(464, 64, 120, 20);
+ AddMenuItem('New', '', @(maindsgn.OnNewFile));
+ AddMenuItem('Open', '', @(maindsgn.OnLoadFile));
+ FFileOpenRecent := AddMenuItem('Open Recent...', '', nil);
+ AddMenuItem('Save As...', '', @(maindsgn.OnSaveFile));
+ AddMenuItem('-', '', nil);
+ AddMenuItem('New Form...', '', @(maindsgn.OnNewForm));
+ AddMenuItem('-', '', nil);
+ AddMenuItem('Exit', '', @(maindsgn.OnExit));
+ end;
+
+ formmenu := TfpgPopupMenu.Create(self);
+ with formmenu do
+ begin
+ Name := 'formmenu';
+ SetPosition(464, 48, 120, 20);
+ AddMenuItem('Widget Order...', '', @(maindsgn.OnEditWidgetOrder));
+ AddMenuItem('Tab Order...', '', @(maindsgn.OnEditTabOrder));
+ AddMenuItem('-', '', nil);
+ AddMenuItem('Edit special...', '', nil).Enabled := False; // TODO
+ end;
+
+ setmenu := TfpgPopupMenu.Create(self);
+ with setmenu do
+ begin
+ Name := 'setmenu';
+ SetPosition(464, 29, 120, 20);
+ AddMenuItem('General options ...', '', @(maindsgn.OnOptionsClick));
+ end;
+
+ miOpenRecentMenu := TfpgPopupMenu.Create(self);
+ with miOpenRecentMenu do
+ begin
+ Name := 'miOpenRecentMenu';
+ SetPosition(336, 68, 128, 20);
+ end;
+
+ helpmenu := TfpgPopupMenu.Create(self);
+ with helpmenu do
+ begin
+ Name := 'helpmenu';
+ SetPosition(328, 52, 120, 20);
+ AddMenuItem('Product Information', '', @miHelpAboutClick);
+ AddMenuItem('About fpGUI', '', @miHelpAboutGUI);
+ end;
+
+ previewmenu := TfpgPopupMenu.Create(self);
+ with previewmenu do
+ begin
+ Name := 'previewmenu';
+ SetPosition(324, 36, 120, 20);
+ AddMenuItem('with Windows 9x', '', nil).Enabled := False;
+ AddMenuItem('with Windows XP', '', nil).Enabled := False;
+ AddMenuItem('with OpenSoft', '', nil).Enabled := False;
+ AddMenuItem('with Motif', '', nil).Enabled := False;
+ AddMenuItem('with OpenLook', '', nil).Enabled := False;
+ end;
+
+ {@VFD_BODY_END: frmMain}
+
+
+ x := 0;
+ for n := 0 to VFDWidgetCount-1 do
+ begin
+ wgc := VFDWidget(n);
+ btn := TwgPaletteButton.Create(wgpalette);
+ btn.VFDWidget := wgc;
+ btn.SetPosition(x, 0, 30, 28);
+ btn.ImageName := wgc.WidgetIconName;
+ btn.ImageMargin := -1;
+ btn.Text := '';
+ btn.Focusable := False;
+ btn.OnClick := @OnPaletteClick;
+ btn.AllowDown := True;
+ btn.AllowAllUp := True;
+ chlPalette.Items.AddObject(wgc.WidgetClass.ClassName, wgc);
+
+ Inc(x, 32);
+ end;
+ chlPalette.Items.Sort;
+ MainMenu.AddMenuItem('&File', nil).SubMenu := filemenu;
+ MainMenu.AddMenuItem('&Settings', nil).SubMenu := setmenu;
+ MainMenu.AddMenuItem('Fo&rm', nil).SubMenu := formmenu;
+ MainMenu.AddMenuItem('&Preview', nil).SubMenu := previewmenu;
+ MainMenu.AddMenuItem('&Help', nil).SubMenu := helpmenu;
+
+ FFileOpenRecent.SubMenu := miOpenRecentMenu;
+
+ mru := TfpgMRU.Create(self);
+ mru.ParentMenuItem := miOpenRecentMenu;
+ mru.OnClick := @miMRUClick;
+ mru.MaxItems := gINI.ReadInteger('Options', 'MRUFileCount', 4);
+ mru.ShowFullPath := gINI.ReadBool('Options', 'ShowFullPath', True);
+ mru.LoadMRU;
+end;
+
+procedure TfrmMain.BeforeDestruction;
+begin
+ gINI.WriteFormState(self);
+ inherited BeforeDestruction;
+end;
+
+procedure TfrmMain.OnPaletteClick(Sender: TObject);
+var
+ s: string;
+ i: integer;
+begin
+ i := -1;
+ if TwgPaletteButton(Sender).Down then
+ begin
+ s := TwgPaletteButton(Sender).VFDWidget.WidgetClass.ClassName;
+ i := chlPalette.Items.IndexOf(s);
+ end;
+ if i = -1 then
+ i := 0; // select the '-' item
+ chlPalette.FocusItem := i;
+end;
+
+{ TfrmProperties }
+
+procedure TfrmProperties.AfterCreate;
+var
+ x, x2, w, y, gap: integer;
+begin
+ inherited;
+ Name := 'frmProperties';
+ WindowPosition := wpUser;
+ WindowTitle := 'Properties';
+ SetPosition(43, 150, 250, 450);
+ gINI.ReadFormState(self);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.anchorleft', @vfd_anchorleft,
+ sizeof(vfd_anchorleft), 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.anchorright', @vfd_anchorright,
+ sizeof(vfd_anchorright), 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.anchortop', @vfd_anchortop,
+ sizeof(vfd_anchortop), 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.anchorbottom', @vfd_anchorbottom,
+ sizeof(vfd_anchorbottom), 0, 0);
+
+ x := 3;
+ x2 := x + 50;
+ gap := 20;
+ w := Width - x2;
+ y := 3;
+
+ l1 := CreateLabel(self, 0, y, 'Class:');
+ lbClass := CreateLabel(self, x2, y, 'CLASS');
+ lbClass.Width := w;
+ lbClass.FontDesc := '#Label2';
+ lbClass.Anchors := [anLeft, anRight, anTop];
+ Inc(y, gap);
+
+ l2 := CreateLabel(self, 0, y + 1, 'Name:');
+ edName := CreateEdit(self, x2, y, w, 0);
+ edName.Text := 'NAME';
+ edName.Anchors := [anLeft, anRight, anTop];
+ edName.OnChange := @(maindsgn.OnPropNameChange);
+
+ Inc(y, gap + 5);
+
+ lstProps := TwgPropertyList.Create(self);
+ lstProps.SetPosition(0, y, Width, self.Height - y - 220);
+ lstProps.Anchors := AllAnchors;
+ lstProps.Props := PropList;
+ lstProps.Props.Widget := edName;
+
+ y := lstProps.Bottom + 5;
+
+ //inc(y, gap+5);
+
+ l3 := CreateLabel(self, 3, y + 1, 'Left:');
+ l3.Anchors := [anLeft, anBottom];
+ btnLeft := CreateButton(self, 50, y - 2, 48, '1234', @(maindsgn.OnPropPosEdit));
+ with btnLeft do
+ begin
+ Height := 22;
+ Anchors := [anLeft, anBottom];
+ Focusable := False;
+ end;
+ l4 := CreateLabel(self, 110, y, 'Top:');
+ l4.Anchors := [anLeft, anBottom];
+ btnTop := CreateButton(self, 160, y - 2, 48, '45', @(maindsgn.OnPropPosEdit));
+ with btnTop do
+ begin
+ Height := 22;
+ Anchors := [anLeft, anBottom];
+ Focusable := False;
+ end;
+ Inc(y, gap + 5);
+ l5 := CreateLabel(self, 3, y + 1, 'Width:');
+ l5.Anchors := [anLeft, anBottom];
+ btnWidth := CreateButton(self, 50, y - 2, 48, '1234', @(maindsgn.OnPropPosEdit));
+ with btnWidth do
+ begin
+ Height := 22;
+ Anchors := [anLeft, anBottom];
+ Focusable := False;
+ end;
+ l6 := CreateLabel(self, 110, y, 'Height:');
+ l6.Anchors := [anLeft, anBottom];
+ btnHeight := CreateButton(self, 160, y - 2, 48, '45', @(maindsgn.OnPropPosEdit));
+ with btnHeight do
+ begin
+ Height := 22;
+ Anchors := [anLeft, anBottom];
+ Focusable := False;
+ end;
+ Inc(y, gap + 5);
+
+ l8 := CreateLabel(self, 3, y + 1, 'Anchors:');
+ l8.Anchors := [anLeft, anBottom];
+
+ x := 64;
+
+ btnAnLeft := CreateButton(self, x, y - 2, 28, '', nil);
+ with btnAnLeft do
+ begin
+ ImageName := 'vfd.anchorleft';
+ ShowImage := True;
+ AllowAllUp := True;
+ GroupIndex := 1;
+ Focusable := False;
+ Anchors := [anLeft, anBottom];
+ OnClick := @(maindsgn.OnAnchorChange);
+ end;
+
+ Inc(x, 30);
+ btnAnTop := CreateButton(self, x, y - 2, 26, '', nil);
+ with btnAnTop do
+ begin
+ ImageName := 'vfd.anchortop';
+ ShowImage := True;
+ AllowAllUp := True;
+ GroupIndex := 2;
+ Focusable := False;
+ Anchors := [anLeft, anBottom];
+ OnClick := @(maindsgn.OnAnchorChange);
+ end;
+
+ Inc(x, 30);
+ btnAnBottom := CreateButton(self, x, y - 2, 26, '', nil);
+ with btnAnBottom do
+ begin
+ ImageName := 'vfd.anchorbottom';
+ ShowImage := True;
+ AllowAllUp := True;
+ GroupIndex := 3;
+ Focusable := False;
+ Anchors := [anLeft, anBottom];
+ OnClick := @(maindsgn.OnAnchorChange);
+ end;
+
+ Inc(x, 30);
+ btnAnRight := CreateButton(self, x, y - 2, 26, '', nil);
+ with btnAnRight do
+ begin
+ ImageName := 'vfd.anchorright';
+ ShowImage := True;
+ AllowAllUp := True;
+ GroupIndex := 4;
+ Focusable := False;
+ Anchors := [anLeft, anBottom];
+ OnClick := @(maindsgn.OnAnchorChange);
+ end;
+
+ y := btnAnRight.Bottom + 5;
+
+ l7 := CreateLabel(self, 0, y, 'Unknown lines:');
+ l7.Anchors := [anLeft, anBottom];
+ Inc(y, 16);
+
+ edOther := TfpgMemo.Create(self);
+ edOther.SetPosition(0, y, self.Width, self.Height - y);
+ edOther.Anchors := [anLeft, anRight, anBottom];
+ edOther.FontDesc := '#Edit2';
+ edOther.OnChange := @(maindsgn.OnOtherChange);
+end;
+
+procedure TfrmProperties.BeforeDestruction;
+begin
+ gINI.WriteFormState(self);
+ inherited BeforeDestruction;
+end;
+
+procedure TfrmProperties.HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
+begin
+ if keycode = keyF11 then
+ begin
+ if maindsgn.selectedform <> nil then
+ begin
+ maindsgn.selectedform.Form.SetFocus;
+ maindsgn.selectedform.Form.ActivateWindow;
+ end;
+ consumed := True;
+ end;
+ inherited;
+end;
+
+{ TPropertyList }
+
+procedure TPropertyList.AddItem(aProp: TVFDWidgetProperty);
+begin
+ FList.Add(aProp);
+end;
+
+procedure TPropertyList.Clear;
+begin
+ FList.Clear;
+end;
+
+constructor TPropertyList.Create;
+begin
+ FList := TList.Create;
+ Widget := nil;
+end;
+
+destructor TPropertyList.Destroy;
+begin
+ Clear;
+ FList.Free;
+ inherited;
+end;
+
+function TPropertyList.GetCount: integer;
+begin
+ Result := FList.Count;
+end;
+
+function TPropertyList.GetItem(index: integer): TVFDWidgetProperty;
+begin
+ if (index < 0) or (index > Count-1) then
+ Result := nil
+ else
+ Result := TVFDWidgetProperty(FList[index]);
+end;
+
+{ TwgPropertyList }
+
+constructor TwgPropertyList.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ NameWidth := 80;
+ editor := nil;
+ OnChange := @OnRowChange;
+ OnScroll := @OnScrolling;
+ BackgroundColor := clWindowBackground;
+ NameDrag := False;
+ //FontName := 'arial-10:antialias=false';
+end;
+
+procedure TwgPropertyList.OnRowChange(Sender: TObject);
+begin
+ AllocateEditor;
+end;
+
+procedure TwgPropertyList.OnScrolling(Sender: TObject);
+begin
+ AllocateEditor;
+end;
+
+procedure TwgPropertyList.DrawItem(num: integer; rect: TfpgRect; flags: integer);
+var
+ x,
+ y,
+ fy: integer;
+ s: string;
+ prop: TVFDWidgetProperty;
+ r: TfpgRect;
+begin
+ prop := Props.GetItem(num);
+ if prop = nil then
+ Exit; //==>
+
+ x := rect.left;
+ y := rect.top;
+ fy := y + rect.Height div 2 - FFont.Height div 2;
+
+ s := prop.Name;
+ Canvas.DrawString(x + 1, fy, s);
+
+ Inc(x, NameWidth);
+ Canvas.SetColor(clShadow1);
+ Canvas.DrawLine(x, rect.top, x, rect.bottom);
+ Inc(x);
+ // Drawing the contents
+ r.SetRect(x, y, rect.right - x, rect.Height);
+ Canvas.SetColor(BackgroundColor);
+ Canvas.FillRectangle(r);
+ Canvas.SetTextColor(clText1);
+ Inc(r.left, 2);
+ Dec(r.Width, 2);
+ prop.DrawValue(props.Widget, Canvas, r, flags);
+
+ Canvas.SetColor(clShadow1);
+ Canvas.DrawLine(0, rect.bottom, rect.right, rect.bottom);
+end;
+
+function TwgPropertyList.ItemCount: integer;
+begin
+ Result := Props.Count;
+end;
+
+function TwgPropertyList.RowHeight: integer;
+begin
+ Result := 22;
+end;
+
+procedure TwgPropertyList.OnUpdateProperty(Sender: TObject);
+begin
+ editor.StoreValue(props.Widget);
+end;
+
+procedure TwgPropertyList.HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState);
+begin
+ if not NameDrag then
+ begin
+ if (x >= FMargin + NameWidth - 2) and (x <= FMargin + NameWidth + 2) then
+ MouseCursor := mcSizeEW
+ else
+ MouseCursor := mcDefault;
+ end
+ else
+ begin
+ NameWidth := x - FMargin;
+ ReAlignEditor;
+ RePaint;
+ end;
+ inherited;
+end;
+
+procedure TwgPropertyList.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
+begin
+ if MouseCursor = mcSizeEW then
+ NameDrag := True
+ //NameDragPos := x;
+ else
+ inherited;
+end;
+
+procedure TwgPropertyList.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
+begin
+ if NameDrag then
+ NameDrag := False
+ else
+ inherited;
+end;
+
+procedure TwgPropertyList.HandleMouseScroll(x, y: integer;
+ shiftstate: TShiftState; delta: smallint);
+begin
+ inherited HandleMouseScroll(x, y, shiftstate, delta);
+ AllocateEditor;
+end;
+
+procedure TwgPropertyList.HandleSetFocus;
+begin
+ inherited HandleSetFocus;
+ if Editor <> nil then
+ Editor.Visible := True
+ else
+ AllocateEditor;
+end;
+
+procedure TwgPropertyList.HandleKillFocus;
+begin
+ inherited HandleKillFocus;
+ if Editor <> nil then
+ Editor.Visible := True;
+end;
+
+procedure TwgPropertyList.RealignEditor;
+var
+ x: integer;
+begin
+ if editor = nil then
+ Exit;
+ x := 3 + NameWidth;
+ editor.SetPosition(x, editor.Top, Width - ScrollBarWidth - x, editor.Height);
+end;
+
+procedure TfrmMain.miHelpAboutClick(Sender: TObject);
+begin
+ TfrmAbout.Execute;
+end;
+
+procedure TfrmMain.miHelpAboutGUI(Sender: TObject);
+begin
+ ShowMessage('This product was created using ' + fpGUIName + ' v' +
+ fpGUIVersion, 'About fpGUI');
+end;
+
+procedure TfrmMain.miMRUClick(Sender: TObject; const FileName: string);
+begin
+ maindsgn.EditedFileName := FileName;
+ maindsgn.OnLoadFile(maindsgn);
+end;
+
+function TfrmMain.GetSelectedWidget: TVFDWidgetClass;
+begin
+ if chlPalette.FocusItem > 0 then
+ Result := TVFDWidgetClass(chlPalette.Items.Objects[chlPalette.FocusItem])
+ else
+ Result := nil;
+end;
+
+procedure TfrmMain.SetSelectedWidget(wgc: TVFDWidgetClass);
+var
+ n: integer;
+begin
+ if wgc = nil then
+ begin
+ chlPalette.FocusItem := 0;
+ for n := 0 to wgpalette.ComponentCount - 1 do
+ if wgpalette.Components[n] is TwgPaletteButton then
+ TwgPaletteButton(wgpalette.Components[n]).Down := False;
+ end;
+end;
+
+procedure TwgPropertyList.ReleaseEditor;
+begin
+ self.ActiveWidget := nil;
+ if editor <> nil then
+ editor.Free;
+ editor := nil;
+end;
+
+procedure TwgPropertyList.AllocateEditor;
+var
+ x, y: integer;
+ prop: TVFDWidgetProperty;
+begin
+ prop := Props.GetItem(FFocusItem);
+ if prop = nil then
+ Exit;
+
+ self.ActiveWidget := nil;
+ if editor <> nil then
+ editor.Free;
+
+ editor := prop.CreateEditor(Self);
+ x := 3 + NameWidth;
+ y := FMargin + (FFocusItem - FFirstItem) * RowHeight;
+ editor.SetPosition(x, y - 1, Width - ScrollBarWidth - x, RowHeight);
+ editor.CreateLayout;
+ editor.OnUpdate := @OnUpdateProperty;
+ editor.LoadValue(Props.Widget);
+ editor.Visible := True;
+
+ self.ActiveWidget := editor;
+end;
+
+{ TwgPalette }
+
+procedure TwgPalette.HandlePaint;
+begin
+ Canvas.Clear(clWindowBackground);
+end;
+
+
+end.
+
diff --git a/uidesigner/readme.txt b/uidesigner/readme.txt
new file mode 100644
index 00000000..b0ffd0eb
--- /dev/null
+++ b/uidesigner/readme.txt
@@ -0,0 +1,50 @@
+
+ fpGUI's Visual User Interface Designer
+ ======================================
+
+
+Introduction
+============
+
+fpGUI Designer is a port of a product called VFD written by Nagy Viktor in 2003.
+I ported VFD to fpGUI because I thought it would add a lot to the framework as
+a whole. I could see it has lots of potential and could easily be extended to
+become a great tool. What I immediately liked about VFD is that it used the
+same source unit and writes actual code describing the UI like I would have
+done manually. This departs from the GUI designers used in Lazarus or Delphi
+where they save the UI code to external files (*.lfm or *.dfm respectively).
+
+
+Features
+========
+
+* It uses the same source unit where your normal code lives. No external GUI
+ files.
+
+* It can handle "unknown" or "custom" components and properties. Whenever the
+ designer finds a component it doesn't natively know it paints a green
+ rectangle in it's place. Whenever it finds properties it doesn't know it
+ adds them "as is" to the Unknown section memo in the Properties window. Any
+ code in the Unknown memo will be written back to the source unit "as is".
+
+* The designer can handle more that one form in a unit.
+
+* When creating a new form, that form can be merged into an existing unit or
+ the designer will create a new unit for it.
+
+* The designer uses comment markers in the code to define what parts it will
+ maintain. Existing code (Forms) can be easily amended (manually by the
+ programmer) so that the designer can start managing it. No need to redesign
+ Forms from scratch.
+
+
+
+Graeme Geldenhuys - September 2007
+
+ ============================================
+
+
+
+
+
+
diff --git a/uidesigner/tests/frm_menutest.pas b/uidesigner/tests/frm_menutest.pas
new file mode 100644
index 00000000..4f707e11
--- /dev/null
+++ b/uidesigner/tests/frm_menutest.pas
@@ -0,0 +1,86 @@
+unit frm_menutest;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, gfxbase, fpgfx, gui_edit,
+ gfx_widget, gui_form, gui_label, gui_button,
+ gui_listbox, gui_memo, gui_combobox, gui_grid,
+ gui_dialogs, gui_checkbox, gui_tree, gui_trackbar,
+ gui_progressbar, gui_radiobutton, gui_tab, gui_menu;
+
+type
+
+ TfrmMain = class(TfpgForm)
+ private
+ procedure miExitClicked(Sender: TObject);
+ public
+ {@VFD_HEAD_BEGIN: frmMain}
+ MainMenu: TfpgMenuBar;
+ miFile: TfpgPopupMenu;
+ btnName1: TfpgButton;
+ {@VFD_HEAD_END: frmMain}
+
+ procedure AfterCreate; override;
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TfrmMain.miExitClicked(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmMain.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: frmMain}
+ Name := 'frmMain';
+ SetPosition(278, 186, 399, 142);
+ WindowTitle := 'frmMain';
+ WindowPosition := wpScreenCenter;
+
+ MainMenu := TfpgMenuBar.Create(self);
+ with MainMenu do
+ begin
+ Name := 'MainMenu';
+ SetPosition(0, 0, 400, 23);
+ Anchors := [anLeft,anRight,anTop];
+ end;
+
+ miFile := TfpgPopupMenu.Create(self);
+ with miFile do
+ begin
+ Name := 'miFile';
+ SetPosition(200, 48, 152, 24);
+ AddMenuItem('&New...', 'Ctrl-N', nil);
+ AddMenuItem('&Open...', 'Ctrl-O', nil);
+ AddMenuItem('-', '', nil);
+ AddMenuItem('E&xit', 'Alt+F4', @miExitClicked);
+ end;
+
+ btnName1 := TfpgButton.Create(self);
+ with btnName1 do
+ begin
+ Name := 'btnName1';
+ SetPosition(8, 112, 75, 24);
+ Text := 'Button';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.quit';
+ ModalResult := 0;
+ ShowImage := True;
+ OnClick := @miExitClicked;
+ end;
+
+ {@VFD_BODY_END: frmMain}
+
+ MainMenu.AddMenuItem('&File', nil).SubMenu := miFile;
+end;
+
+
+end.
diff --git a/uidesigner/tests/menutest.lpi b/uidesigner/tests/menutest.lpi
new file mode 100644
index 00000000..3f9b35ec
--- /dev/null
+++ b/uidesigner/tests/menutest.lpi
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <PathDelim Value="/"/>
+ <Version Value="6"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <IconPath Value="./"/>
+ <TargetFileExt Value=""/>
+ <Title Value="menutest"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_toolkit"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="menutest.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="menutest"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="frm_menutest.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="frm_menutest"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="5"/>
+ <CodeGeneration>
+ <Generate Value="Faster"/>
+ </CodeGeneration>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/uidesigner/tests/menutest.lpr b/uidesigner/tests/menutest.lpr
new file mode 100644
index 00000000..80b985be
--- /dev/null
+++ b/uidesigner/tests/menutest.lpr
@@ -0,0 +1,27 @@
+program menutest;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes, frm_menutest, fpgfx;
+
+
+
+procedure MainProc;
+var
+ frm: TfrmMain;
+begin
+ fpgApplication.Initialize;
+ frm := TfrmMain.Create(nil);
+ frm.Show;
+ fpgApplication.Run;
+end;
+
+begin
+ MainProc;
+end.
+
+
diff --git a/uidesigner/tests/tabsheet_design.lpi b/uidesigner/tests/tabsheet_design.lpi
new file mode 100644
index 00000000..2124c06d
--- /dev/null
+++ b/uidesigner/tests/tabsheet_design.lpi
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <PathDelim Value="/"/>
+ <Version Value="6"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <IconPath Value="./"/>
+ <TargetFileExt Value=""/>
+ <Title Value="project1"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_toolkit"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="tabsheet_design.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="tabsheet_design"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="tabtest.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="tabtest"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="5"/>
+ <CodeGeneration>
+ <Generate Value="Faster"/>
+ </CodeGeneration>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/uidesigner/tests/tabsheet_design.lpr b/uidesigner/tests/tabsheet_design.lpr
new file mode 100644
index 00000000..7acb50aa
--- /dev/null
+++ b/uidesigner/tests/tabsheet_design.lpr
@@ -0,0 +1,30 @@
+program tabsheet_design;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes, fpgfx, tabtest;
+
+
+procedure MainProc;
+var
+ frm: TfrmTabTest;
+begin
+ fpgApplication.Initialize;
+ frm := TfrmTabTest.Create(nil);
+ try
+ frm.Show;
+ fpgApplication.Run;
+ finally
+ frm.Free;
+ end;
+end;
+
+begin
+ MainProc;
+end.
+
+
diff --git a/uidesigner/tests/tabtest.pas b/uidesigner/tests/tabtest.pas
new file mode 100644
index 00000000..9355a6d2
--- /dev/null
+++ b/uidesigner/tests/tabtest.pas
@@ -0,0 +1,226 @@
+unit tabtest;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, gfxbase, fpgfx, gui_edit,
+ gfx_widget, gui_form, gui_label, gui_button,
+ gui_listbox, gui_memo, gui_combobox, gui_grid,
+ gui_dialogs, gui_checkbox, gui_tree, gui_trackbar,
+ gui_progressbar, gui_radiobutton, gui_tab, gui_menu,
+ gui_bevel;
+
+type
+
+ TfraGeneral = class(TfpgForm)
+ public
+ {@VFD_HEAD_BEGIN: fraGeneral}
+ lblName1: TfpgLabel;
+ edtName1: TfpgEdit;
+ memName1: TfpgMemo;
+ btnName1: TfpgButton;
+ {@VFD_HEAD_END: fraGeneral}
+ procedure AfterCreate; override;
+ end;
+
+
+ TfraAddress = class(TfpgForm)
+ public
+ {@VFD_HEAD_BEGIN: fraAddress}
+ edtName1: TfpgEdit;
+ lblName1: TfpgLabel;
+ lblName2: TfpgLabel;
+ lblName3: TfpgLabel;
+ cbName1: TfpgComboBox;
+ {@VFD_HEAD_END: fraAddress}
+ procedure AfterCreate; override;
+ end;
+
+
+ TfrmTabTest = class(TfpgForm)
+ private
+ procedure btnCloseClicked(Sender: TObject);
+ public
+ {@VFD_HEAD_BEGIN: frmTabTest}
+ pcName1: TfpgPageControl;
+ btnClose: TfpgButton;
+ {@VFD_HEAD_END: frmTabTest}
+
+ // these must be added manually for now, until the GUI Designer is improved.
+ tsGeneral: TfpgTabSheet;
+ tsAddress: TfpgTabSheet;
+ tsAccounts: TfpgTabSheet;
+ fraGeneral: TfraGeneral;
+ fraAddress: TfraAddress;
+ procedure AfterCreate; override;
+ end;
+
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TfraAddress.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: fraAddress}
+ Name := 'fraAddress';
+ SetPosition(602, 485, 208, 127);
+ WindowTitle := 'fraAddress';
+
+ edtName1 := TfpgEdit.Create(self);
+ with edtName1 do
+ begin
+ Name := 'edtName1';
+ SetPosition(64, 32, 120, 22);
+ Text := '';
+ FontDesc := '#Edit1';
+ end;
+
+ lblName1 := TfpgLabel.Create(self);
+ with lblName1 do
+ begin
+ Name := 'lblName1';
+ SetPosition(4, 4, 156, 16);
+ Text := 'TabSheet - Address';
+ FontDesc := '#Label2';
+ end;
+
+ lblName2 := TfpgLabel.Create(self);
+ with lblName2 do
+ begin
+ Name := 'lblName2';
+ SetPosition(8, 36, 44, 16);
+ Text := 'Street';
+ FontDesc := '#Label1';
+ end;
+
+ lblName3 := TfpgLabel.Create(self);
+ with lblName3 do
+ begin
+ Name := 'lblName3';
+ SetPosition(8, 60, 48, 16);
+ Text := 'City';
+ FontDesc := '#Label1';
+ end;
+
+ cbName1 := TfpgComboBox.Create(self);
+ with cbName1 do
+ begin
+ Name := 'cbName1';
+ SetPosition(64, 56, 120, 23);
+ Items.Add('Somerset West');
+ Items.Add('Cape Town');
+ Items.Add('Durban');
+ Items.Add('Jo''burg');
+ Items.Add('Pretoria');
+ FontDesc := '#List';
+ FocusItem := 1;
+ end;
+
+ {@VFD_BODY_END: fraAddress}
+end;
+
+
+procedure TfraGeneral.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: fraGeneral}
+ Name := 'fraGeneral';
+ SetPosition(611, 290, 197, 165);
+ WindowTitle := 'fraGeneral';
+
+ lblName1 := TfpgLabel.Create(self);
+ with lblName1 do
+ begin
+ Name := 'lblName1';
+ SetPosition(4, 4, 212, 16);
+ Text := 'TabSheet - General';
+ FontDesc := '#Label2';
+ end;
+
+ edtName1 := TfpgEdit.Create(self);
+ with edtName1 do
+ begin
+ Name := 'edtName1';
+ SetPosition(12, 28, 144, 22);
+ Anchors := [anLeft,anRight,anTop];
+ Text := '';
+ FontDesc := '#Edit1';
+ end;
+
+ memName1 := TfpgMemo.Create(self);
+ with memName1 do
+ begin
+ Name := 'memName1';
+ SetPosition(12, 56, 172, 96);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ FontDesc := '#Edit1';
+ end;
+
+ btnName1 := TfpgButton.Create(self);
+ with btnName1 do
+ begin
+ Name := 'btnName1';
+ SetPosition(160, 28, 19, 20);
+ Anchors := [anRight,anTop];
+ Text := '...';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 0;
+ end;
+
+ {@VFD_BODY_END: fraGeneral}
+end;
+
+procedure TfrmTabTest.btnCloseClicked(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmTabTest.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: frmTabTest}
+ Name := 'frmTabTest';
+ SetPosition(293, 290, 275, 198);
+ WindowTitle := 'Tab Design Test';
+
+ pcName1 := TfpgPageControl.Create(self);
+ with pcName1 do
+ begin
+ Name := 'pcName1';
+ SetPosition(8, 12, 258, 148);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ FixedTabWidth := 0;
+ Style := tsTabs;
+ TabPosition := tpTop;
+ tsGeneral := AppendTabSheet('General');
+ tsAddress := AppendTabSheet('Address');
+ tsAccounts := AppendTabSheet('EAddress');
+ ActivePage := tsGeneral;
+ end;
+
+ btnClose := TfpgButton.Create(self);
+ with btnClose do
+ begin
+ Name := 'btnClose';
+ SetPosition(192, 168, 75, 24);
+ Anchors := [anRight,anBottom];
+ Text := 'Close';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 0;
+ OnClick := @btnCloseClicked;
+ end;
+
+ {@VFD_BODY_END: frmTabTest}
+
+ fraGeneral := TfraGeneral.Create(tsGeneral);
+ fraGeneral.Align := alClient;
+ fraAddress := TfraAddress.Create(tsAddress);
+ fraAddress.Align := alClient;
+end;
+
+end.
diff --git a/uidesigner/uidesigner.lpi b/uidesigner/uidesigner.lpi
new file mode 100644
index 00000000..5090138f
--- /dev/null
+++ b/uidesigner/uidesigner.lpi
@@ -0,0 +1,133 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <PathDelim Value="/"/>
+ <Version Value="6"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <IconPath Value="./"/>
+ <TargetFileExt Value=""/>
+ <Title Value="uiDesigner"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_toolkit"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="16">
+ <Unit0>
+ <Filename Value="uidesigner.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="uidesigner"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="vfdmain.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdmain"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="vfdresizer.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdresizer"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="vfdforms.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdforms"/>
+ </Unit3>
+ <Unit4>
+ <Filename Value="vfddesigner.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfddesigner"/>
+ </Unit4>
+ <Unit5>
+ <Filename Value="vfdfile.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdfile"/>
+ </Unit5>
+ <Unit6>
+ <Filename Value="newformdesigner.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="newformdesigner"/>
+ </Unit6>
+ <Unit7>
+ <Filename Value="vfdwidgets.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdwidgets"/>
+ </Unit7>
+ <Unit8>
+ <Filename Value="vfdwidgetclass.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdwidgetclass"/>
+ </Unit8>
+ <Unit9>
+ <Filename Value="vfdeditors.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdeditors"/>
+ </Unit9>
+ <Unit10>
+ <Filename Value="vfdformparser.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdformparser"/>
+ </Unit10>
+ <Unit11>
+ <Filename Value="vfdprops.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdprops"/>
+ </Unit11>
+ <Unit12>
+ <Filename Value="vfdutils.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdutils"/>
+ </Unit12>
+ <Unit13>
+ <Filename Value="vfdpropeditgrid.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="vfdpropeditgrid"/>
+ </Unit13>
+ <Unit14>
+ <Filename Value="anchors.inc"/>
+ <IsPartOfProject Value="True"/>
+ </Unit14>
+ <Unit15>
+ <Filename Value="icons.inc"/>
+ <IsPartOfProject Value="True"/>
+ </Unit15>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="5"/>
+ <Parsing>
+ <SyntaxOptions>
+ <AllowLabel Value="False"/>
+ <CPPInline Value="False"/>
+ </SyntaxOptions>
+ </Parsing>
+ <CodeGeneration>
+ <Generate Value="Faster"/>
+ </CodeGeneration>
+ <Other>
+ <CustomOptions Value="-FUunits
+"/>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/uidesigner/uidesigner.lpr b/uidesigner/uidesigner.lpr
new file mode 100644
index 00000000..9b75daaa
--- /dev/null
+++ b/uidesigner/uidesigner.lpr
@@ -0,0 +1,58 @@
+{
+ fpGUI - Free Pascal GUI Library
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ The starting unit for the UI Designer project.
+}
+
+program uidesigner;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes, SysUtils, fpgfx, vfdmain, vfdresizer, vfdforms,
+ vfdfile, newformdesigner, vfdwidgets, vfdformparser, vfdeditors,
+ vfdwidgetclass, vfdutils, vfdprops, vfddesigner, vfdpropeditgrid;
+
+
+procedure MainProc;
+begin
+ fpgApplication.Initialize;
+ try
+ RegisterWidgets;
+ PropList := TPropertyList.Create;
+ maindsgn := TMainDesigner.Create;
+ maindsgn.CreateWindows;
+ maindsgn.EditedFileName := ParamStr(1);
+ if FileExists(maindsgn.EditedFileName) then
+ maindsgn.OnLoadFile(maindsgn);
+
+ // Note: This needs improving!!
+ fpgApplication.MainForm := frmMain;
+ fpgApplication.Run;
+
+ PropList.Free;
+
+ finally
+ maindsgn.Free;
+ end;
+end;
+
+begin
+ MainProc;
+end.
+
+
diff --git a/uidesigner/vfddesigner.pas b/uidesigner/vfddesigner.pas
new file mode 100644
index 00000000..f8bb23af
--- /dev/null
+++ b/uidesigner/vfddesigner.pas
@@ -0,0 +1,1576 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ A lot of the main code is here.
+}
+
+
+unit vfddesigner;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfxbase,
+ fpgfx,
+ gfx_widget,
+ gui_form,
+ gui_dialogs,
+ gui_label,
+ gui_edit,
+ gui_button,
+ gui_listbox,
+ gui_memo,
+ gui_combobox,
+ gui_checkbox,
+ vfdresizer,
+ vfdforms,
+ vfdeditors,
+ vfdwidgetclass,
+ vfdwidgets,
+ newformdesigner;
+
+type
+
+ TOtherWidget = class(TfpgWidget)
+ protected
+ FFont: TfpgFont;
+ procedure HandlePaint; override;
+ public
+ wgClassName: string;
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+
+ TFormDesigner = class; // forward declaration
+
+
+ TDesignedForm = class(TfpgForm)
+ public
+ procedure AfterCreate; override;
+ end;
+
+
+ TWidgetDesigner = class(TObject)
+ private
+ procedure SetSelected(const AValue: boolean);
+ public
+ FFormDesigner: TFormDesigner;
+ FWidget: TfpgWidget;
+ FVFDClass: TVFDWidgetClass;
+ FSelected: boolean;
+ resizer: array[1..8] of TwgResizer;
+ other: TStringList;
+ constructor Create(AFormDesigner: TFormDesigner; wg: TfpgWidget; wgc: TVFDWidgetClass);
+ destructor Destroy; override;
+ property Selected: boolean read FSelected write SetSelected;
+ property Widget: TfpgWidget read FWidget;
+ procedure UpdateResizerPositions;
+ property FormDesigner: TFormDesigner read FFormDesigner;
+ end;
+
+
+ TFormDesigner = class(TObject)
+ protected
+ FWidgets: TList;
+ FForm: TDesignedForm;
+ FFormOther: string;
+ FDragging: boolean;
+ FDragPosX,
+ FDragPosY: TfpgCoord;
+ FWasDrag: boolean;
+ protected
+ // messages of the designed widgets
+ procedure MsgMouseDown(var msg: TfpgMessageRec); message FPGM_MOUSEDOWN;
+ procedure MsgMouseUp(var msg: TfpgMessageRec); message FPGM_MOUSEUP;
+ procedure MsgMouseMove(var msg: TfpgMessageRec); message FPGM_MOUSEMOVE;
+ procedure MsgKeyPress(var msg: TfpgMessageRec); message FPGM_KEYPRESS;
+ procedure MsgMove(var msg: TfpgMessageRec); message FPGM_MOVE;
+ procedure MsgResize(var msg: TfpgMessageRec); message FPGM_RESIZE;
+ procedure MsgActivate(var msg: TfpgMessageRec); message FPGM_ACTIVATE;
+ procedure DesignerKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
+ public
+ OneClickMove: boolean; // the widgets can be selected and dragged within one click
+ constructor Create;
+ destructor Destroy; override;
+ procedure ClearForm;
+ procedure DefaultHandler(var msg); override;
+ procedure Show;
+ function AddWidget(wg: TfpgWidget; wgc: TVFDWidgetClass): TWidgetDesigner;
+ function WidgetDesigner(wg: TfpgWidget): TWidgetDesigner;
+ function FindWidgetByName(const wgname: string): TfpgWidget;
+ procedure DeSelectAll;
+ procedure SelectAll;
+ procedure SelectNextWidget(fw: boolean);
+ procedure MoveResizeWidgets(dx, dy, dw, dh: integer);
+ procedure DeleteWidgets;
+ procedure EditWidgetOrder;
+ procedure EditTabOrder;
+ procedure InsertWidget(pwg: TfpgWidget; x, y: integer; wgc: TVFDWidgetClass);
+ procedure UpdatePropWin;
+ procedure OnPropTextChange(Sender: TObject);
+ procedure OnPropNameChange(Sender: TObject);
+ procedure OnPropPosEdit(Sender: TObject);
+ procedure OnOtherChange(Sender: TObject);
+ procedure OnAnchorChange(Sender: TObject);
+ procedure OnEditWidget(Sender: TObject);
+ function GenerateNewName(namebase: string): string;
+ procedure RunWidgetEditor(wgd: TWidgetDesigner; wg: TfpgWidget);
+ function GetFormSourceDecl: string;
+ function GetFormSourceImpl: string;
+ function GetWidgetSourceImpl(wd: TWidgetDesigner; ident: string): string;
+ property Form: TDesignedForm read FForm;
+ property FormOther: string read FFormOther write FFormOther;
+ end;
+
+
+implementation
+
+uses
+ vfdmain, TypInfo;
+
+
+{ TWidgetDesigner }
+
+procedure TWidgetDesigner.SetSelected(const AValue: boolean);
+var
+ n: integer;
+begin
+ if FSelected = AValue then
+ Exit;
+ FSelected := AValue;
+
+ if FSelected then
+ Widget.MouseCursor := mcMove
+ else
+ Widget.MouseCursor := mcDefault;
+
+ for n := 1 to 8 do
+ if FSelected then
+ resizer[n] := TwgResizer.Create(self, n)
+ else
+ begin
+ if resizer[n] <> nil then
+ resizer[n].Free;
+ resizer[n] := nil;
+ end;
+
+ UpdateResizerPositions;
+
+ if FSelected and Widget.Parent.HasHandle then
+ for n := 1 to 8 do
+ resizer[n].Show;
+end;
+
+constructor TWidgetDesigner.Create(AFormDesigner: TFormDesigner; wg: TfpgWidget; wgc: TVFDWidgetClass);
+var
+ n: integer;
+begin
+ FFormDesigner := AFormDesigner;
+ FWidget := wg;
+ FVFDClass := wgc;
+ for n := 1 to 8 do
+ resizer[n] := nil;
+ FSelected := False;
+ wg.MouseCursor := mcDefault;
+ other := TStringList.Create;
+end;
+
+destructor TWidgetDesigner.Destroy;
+var
+ n: integer;
+begin
+ for n := 1 to 8 do
+ if resizer[n] <> nil then
+ resizer[n].Free;
+ other.Free;
+ inherited Destroy;
+end;
+
+procedure TWidgetDesigner.UpdateResizerPositions;
+var
+ n: integer;
+ rs: TwgResizer;
+begin
+ if not FSelected then
+ Exit;
+
+ for n := 1 to 8 do
+ begin
+ rs := resizer[n];
+
+ if rs <> nil then
+ begin
+ case n of
+ 1:
+ begin
+ rs.left := Widget.left - 2;
+ rs.Top := Widget.Top - 2;
+ end;
+ 2:
+ begin
+ rs.Top := Widget.Top - 2;
+ rs.left := Widget.left + Widget.Width div 2 - 2;
+ end;
+ 3:
+ begin
+ rs.Top := Widget.Top - 2;
+ rs.left := Widget.left + Widget.Width - 1 - 2;
+ end;
+ 4:
+ begin
+ rs.Top := Widget.Top + Widget.Height div 2 - 2;
+ rs.left := Widget.left + Widget.Width - 1 - 2;
+ end;
+ 5:
+ begin
+ rs.Top := Widget.Top + Widget.Height - 1 - 2;
+ rs.left := Widget.left + Widget.Width - 1 - 2;
+ end;
+ 6:
+ begin
+ rs.Top := Widget.Top + Widget.Height - 1 - 2;
+ rs.left := Widget.left + Widget.Width div 2 - 2;
+ end;
+ 7:
+ begin
+ rs.Top := Widget.Top + Widget.Height - 1 - 2;
+ rs.left := Widget.left - 2;
+ end;
+ 8:
+ begin
+ rs.Top := Widget.Top + Widget.Height div 2 - 2;
+ rs.left := Widget.left - 2;
+ end;
+ end; // case
+ if rs.HasHandle then
+ rs.UpdateWindowPosition;
+ end;
+ end;
+
+end;
+
+{ TFormDesigner }
+
+procedure TFormDesigner.MsgMouseDown(var msg: TfpgMessageRec);
+var
+ wgd: TWidgetDesigner;
+ shift: boolean;
+begin
+// writeln('TFormDesigner.MsgMouseDown');
+ msg.Stop := True;
+ FDragging := True;
+ FWasDrag := False;
+ FDragPosX := msg.Params.mouse.x;
+ FDragPosy := msg.Params.mouse.y;
+
+ if msg.dest = FForm then
+ Exit;
+
+ wgd := WidgetDesigner(TfpgWidget(msg.dest));
+ if wgd = nil then
+ Exit;
+
+ if not OneClickMove then
+ Exit; // this Exit disables one click move
+
+ shift := (ssShift in msg.Params.mouse.shiftstate);
+
+ if shift then
+ Exit;
+
+ if not wgd.Selected then
+ begin
+ DeSelectAll;
+ wgd.Selected := True;
+ UpdatePropWin;
+ end;
+end;
+
+procedure TFormDesigner.MsgMouseUp(var msg: TfpgMessageRec);
+var
+ wgd: TWidgetDesigner;
+ wgc: TVFDWidgetClass;
+ pwg: TfpgWidget;
+ shift: boolean;
+ x, y: integer;
+begin
+// writeln('TFormDesigner.MsgMouseUp');
+ msg.Stop := True;
+ FDragging := False;
+
+ shift := (ssShift in msg.Params.mouse.shiftstate);
+
+ wgc := frmMain.SelectedWidget;
+ pwg := TfpgWidget(msg.dest);
+ wgd := WidgetDesigner(TfpgWidget(msg.dest));
+ if wgd = nil then
+ pwg := FForm
+ else if not wgd.FVFDClass.Container then
+ wgc := nil;
+
+ if wgc <> nil then
+ begin
+ DeSelectAll;
+
+ if wgc <> nil then
+ begin
+ x := msg.Params.mouse.x;
+ y := msg.Params.mouse.y;
+
+ if maindsgn.GridResolution > 1 then
+ begin
+ x := x - x mod maindsgn.GridResolution;
+ y := y - y mod maindsgn.GridResolution;
+ end;
+
+ InsertWidget(pwg, x, y, wgc);
+
+ if not shift then
+ begin
+ FForm.MouseCursor := mcDefault;
+ frmMain.SelectedWidget := nil;
+ end;
+ end;
+ end
+ else
+ begin
+ wgd := WidgetDesigner(TfpgWidget(msg.dest));
+ if wgd = nil then
+ begin
+ DeSelectAll;
+ UpdatePropWin;
+ Exit;
+ end;
+
+ if not shift then
+ begin
+ if not wgd.Selected then
+ DeSelectAll;
+ wgd.Selected := True;
+ end
+ else
+ wgd.Selected := not wgd.Selected;
+ end;
+
+ UpdatePropWin;
+end;
+
+procedure TFormDesigner.MsgMouseMove(var msg: TfpgMessageRec);
+var
+ dx, dy: integer;
+ wgd: TWidgetDesigner;
+begin
+ msg.Stop := True;
+ if not FDragging then
+ Exit;
+
+ FWasDrag := True;
+
+ dx := msg.Params.mouse.x - FDragPosX;
+ dy := msg.Params.mouse.y - FDragPosY;
+
+ wgd := WidgetDesigner(TfpgWidget(msg.dest));
+ if (wgd = nil) or (not wgd.Selected) then
+ Exit;
+
+ if maindsgn.GridResolution > 1 then
+ begin
+ dx := dx - (dx mod maindsgn.GridResolution);
+ dy := dy - (dy mod maindsgn.GridResolution);
+ end;
+
+ MoveResizeWidgets(dx, dy, 0, 0);
+end;
+
+procedure TFormDesigner.MsgKeyPress(var msg: TfpgMessageRec);
+var
+ key: word;
+ ss: TShiftState;
+ consumed: boolean;
+begin
+ key := msg.params.keyboard.keycode;
+ ss := msg.params.keyboard.shiftstate;
+
+ msg.Stop := True;
+ consumed := False;
+
+ DesignerKeyPress(key, ss, consumed);
+end;
+
+procedure TFormDesigner.MsgMove(var msg: TfpgMessageRec);
+begin
+ if msg.dest = FForm then
+ UpdatePropWin;
+ msg.Stop := True;
+end;
+
+procedure TFormDesigner.MsgResize(var msg: TfpgMessageRec);
+begin
+ msg.Stop := True;
+ if msg.dest = FForm then
+ begin
+ DeSelectAll; // because of the anchorings
+ UpdatePropWin;
+ end;
+end;
+
+constructor TFormDesigner.Create;
+begin
+ FWidgets := TList.Create;
+ FWasDrag := False;
+
+ OneClickMove := True;
+
+ FForm := TDesignedForm.Create(nil);
+ FForm.FormDesigner := self;
+ FForm.Name := maindsgn.NewFormName;
+ FForm.WindowTitle := FForm.Name;
+ FFormOther := '';
+end;
+
+destructor TFormDesigner.Destroy;
+var
+ n: integer;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ TObject(FWidgets.Items[n]).Free;
+ FWidgets.Free;
+
+ if FForm <> nil then
+ FForm.Free;
+ inherited Destroy;
+end;
+
+procedure TFormDesigner.ClearForm;
+var
+ n: integer;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ TWidgetDesigner(FWidgets.Items[n]).Widget.Free;
+ TObject(FWidgets.Items[n]).Free;
+ end;
+ FWidgets.Clear;
+end;
+
+procedure TFormDesigner.DefaultHandler(var msg);
+begin
+ //Writeln('Designer message: ',TMessageRec(msg).msgcode,' from ',TMessageRec(msg).dest.ClassName);
+end;
+
+procedure TFormDesigner.Show;
+begin
+ FForm.Show;
+ UpdatePropWin;
+end;
+
+function TFormDesigner.AddWidget(wg: TfpgWidget; wgc: TVFDWidgetClass): TWidgetDesigner;
+var
+ cd: TWidgetDesigner;
+begin
+// writeln('TFormDesigner.AddWidget');
+ cd := TWidgetDesigner.Create(self, wg, wgc);
+ FWidgets.Add(cd);
+ //cd.Selected := true;
+ if wg is TDesignedForm then
+ TDesignedForm(wg).FormDesigner := self;
+ Result := cd;
+end;
+
+function TFormDesigner.WidgetDesigner(wg: TfpgWidget): TWidgetDesigner;
+var
+ n: integer;
+ cd: TWidgetDesigner;
+begin
+ Result := nil;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Widget = wg then
+ begin
+ Result := cd;
+ Exit;
+ end;
+ end;
+end;
+
+procedure TFormDesigner.DeSelectAll;
+var
+ n: integer;
+ cd: TWidgetDesigner;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ cd.Selected := False;
+ end;
+end;
+
+procedure TFormDesigner.SelectAll;
+var
+ n: integer;
+ cd: TWidgetDesigner;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ cd.Selected := True;
+ end;
+end;
+
+procedure TFormDesigner.SelectNextWidget(fw: boolean);
+var
+ n, dir: integer;
+ cd, scd: TWidgetDesigner;
+begin
+ if FWidgets.Count = 0 then
+ Exit;
+
+ if fw then
+ begin
+ n := 0;
+ dir := 1;
+ end
+ else
+ begin
+ dir := -1;
+ n := FWidgets.Count - 1;
+ end;
+
+ scd := TWidgetDesigner(FWidgets.Items[n]);
+
+ while (n >= 0) and (n < FWidgets.Count) do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ if fw then
+ begin
+ if n < FWidgets.Count - 1 then
+ scd := TWidgetDesigner(FWidgets.Items[n + 1]);
+ end
+ else if n > 0 then
+ scd := TWidgetDesigner(FWidgets.Items[n - 1]);
+ break;
+ end;
+ n := n + dir;
+ end;
+ DeSelectAll;
+ scd.Selected := True;
+ UpdatePropWin;
+end;
+
+procedure TFormDesigner.MoveResizeWidgets(dx, dy, dw, dh: integer);
+var
+ n: integer;
+ cd: TWidgetDesigner;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+// if maindsgn.GridResolution > 1 then;
+ cd.Widget.MoveAndResizeBy(dx, dy, dw, dh);
+ cd.UpdateResizerPositions;
+ end;
+ end;
+ UpdatePropWin;
+end;
+
+procedure TFormDesigner.DeleteWidgets;
+var
+ n: integer;
+ cd: TWidgetDesigner;
+begin
+ n := 0;
+ while n < FWidgets.Count do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ cd.Widget.Free;
+ cd.Free;
+ FWidgets.Delete(n);
+ end
+ else
+ Inc(n);
+ end;
+ UpdatePropWin;
+end;
+
+
+procedure TFormDesigner.EditWidgetOrder;
+var
+ frm: TWidgetOrderForm;
+ n, fi: integer;
+ cd: TWidgetDesigner;
+ identlevel: integer;
+
+ procedure AddChildWidgets(pwg: TfpgWidget; slist: TStrings);
+ var
+ f: integer;
+ fcd: TWidgetDesigner;
+ begin
+ for f := 0 to FWidgets.Count - 1 do
+ begin
+ fcd := TWidgetDesigner(FWidgets.Items[f]);
+
+ if fcd.Widget.Parent = pwg then
+ begin
+ frm.list.Items.AddObject(StringOfChar(' ', identlevel) + fcd.Widget.Name + ' : ' + fcd.Widget.ClassName, fcd);
+ Inc(identlevel);
+ AddChildWidgets(fcd.Widget, slist);
+ Dec(identlevel);
+ end;
+
+ if fcd.Selected then
+ fi := f + 1;
+ end;
+ end;
+
+begin
+ frm := TWidgetOrderForm.Create(nil);
+ fi := 1;
+
+ identlevel := 0;
+
+ AddChildWidgets(FForm, frm.list.Items);
+
+ if fi <= frm.list.ItemCount then
+ frm.list.FocusItem := fi;
+
+ if frm.ShowModal = 1 then
+ begin
+ for n := 0 to FWidgets.Count - 1 do
+ TWidgetDesigner(FWidgets.Items[n]).Widget.Visible := False;
+
+ for n := 0 to FWidgets.Count - 1 do
+ FWidgets.Items[n] := frm.List.Items.Objects[n];
+
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ cd.Widget.Visible := True;
+ end;
+
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ // re-creating the resizers
+ cd.Selected := False;
+ cd.Selected := True;
+ end;
+ end;
+
+ end;
+ frm.Free;
+end;
+
+procedure TFormDesigner.EditTabOrder;
+const
+ cDivider = ' : ';
+var
+ frm: TWidgetOrderForm;
+ n, fi, i: integer;
+ cd: TWidgetDesigner;
+ identlevel: integer;
+ s: string;
+ taborder: integer;
+
+ procedure AddChildWidgets(pwg: TfpgWidget; slist: TStrings);
+ var
+ f: integer;
+ fcd: TWidgetDesigner;
+ begin
+ for f := 0 to FWidgets.Count - 1 do
+ begin
+ fcd := TWidgetDesigner(FWidgets.Items[f]);
+
+ if fcd.Widget.Parent = pwg then
+ begin
+ frm.list.Items.AddObject(StringOfChar(' ', identlevel) + fcd.Widget.Name + cDivider + fcd.Widget.ClassName, fcd);
+ Inc(identlevel, 2);
+ AddChildWidgets(fcd.Widget, slist);
+ Dec(identlevel, 2);
+ end;
+
+ if fcd.Selected then
+ fi := f + 1;
+ end;
+ end;
+
+begin
+ frm := TWidgetOrderForm.Create(nil);
+ frm.WindowTitle := 'Tab Order';
+ fi := 1;
+ identlevel := 0;
+
+ AddChildWidgets(FForm, frm.list.Items);
+
+ if fi <= frm.list.ItemCount then
+ frm.list.FocusItem := fi;
+
+ if frm.ShowModal = 1 then
+ begin
+ taborder := 1;
+ for n := 0 to frm.List.Items.Count - 1 do
+ begin
+ try
+ if IsPublishedProp(TWidgetDesigner(frm.List.Items.Objects[n]).Widget, 'TabOrder') then
+ begin
+// SetPropValue(TWidgetDesigner(frm.List.Items.Objects[n]).Widget, 'TabOrder', taborder);
+ TWidgetDesigner(frm.List.Items.Objects[n]).Widget.TabOrder := taborder;
+ inc(taborder);
+ end;
+ except
+ // do nothing. TabOrder was not published
+ end;
+ end;
+ end; { if }
+ frm.Free;
+end;
+
+procedure TFormDesigner.DesignerKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
+var
+ dx,
+ dy: integer;
+begin
+ dx := 0;
+ dy := 0;
+ consumed := True;
+
+ case keycode of
+ keyLeft: dx := -1;
+ keyRight: dx := +1;
+ keyUp: dy := -1;
+ keyDown: dy := +1;
+
+ keyDelete: DeleteWidgets;
+
+ keyTab:
+ begin
+ if ssShift in shiftstate then
+ SelectNextWidget(False) // tab backwards
+ else
+ SelectNextWidget(True); // tab forward
+ end;
+
+ keyF1:
+ ShowMessage('F11: switch to Properties' + LineEnding +
+ 'TAB, SHIFT+TAB: select next widget' + LineEnding +
+ 'F2: edit widget order' + LineEnding {+
+ 'F4: edit items' + LineEnding}, 'Small help');
+
+ keyF2:
+ EditWidgetOrder;
+
+ //keyF4:
+ //if frmProperties.btnEdit.Visible then
+ //frmProperties.btnEdit.Click;
+
+ keyF11:
+ begin
+ frmProperties.SetFocus;
+ frmProperties.ActivateWindow;
+ end;
+ else
+ consumed := False;
+ end;
+
+ if (dx <> 0) or (dy <> 0) then
+ if (ssShift in shiftstate) then
+ MoveResizeWidgets(0, 0, dx, dy)
+ else
+ MoveResizeWidgets(dx, dy, 0, 0);
+end;
+
+procedure TFormDesigner.UpdatePropWin;
+var
+ n, i: integer;
+ cd, scd: TWidgetDesigner;
+ wg: TfpgWidget;
+
+ wgcnt: integer;
+ //btxt : boolean;
+ //bedit : boolean;
+
+ lastpropname: string;
+
+ wgc: TVFDWidgetClass;
+begin
+ wgcnt := 0;
+ wg := FForm;
+ wgc := VFDFormWidget;
+ scd := nil;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ Inc(wgcnt);
+ if wgcnt < 2 then
+ begin
+ wg := cd.Widget;
+ scd := cd;
+ end;
+ end;
+ end;
+
+ if scd <> nil then
+ wgc := scd.FVFDClass;
+
+ n := frmProperties.lstProps.FocusItem;
+ if (n >= 0) and (PropList.GetItem(n) <> nil) then
+ lastpropname := PropList.GetItem(n).Name
+ else
+ lastpropname := '';
+
+ i := -1;
+
+ if PropList.Widget <> wg then
+ begin
+ frmProperties.lstProps.ReleaseEditor;
+ PropList.Clear;
+ for n := 0 to wgc.PropertyCount-1 do
+ begin
+ PropList.AddItem(wgc.GetProperty(n));
+ if UpperCase(wgc.GetProperty(n).Name) = UpperCase(lastPropName) then
+ i := n;
+ end;
+ PropList.Widget := wg;
+ frmProperties.lstProps.Update;
+ if i > -1 then
+ frmProperties.lstProps.FocusItem := i;
+ end;
+
+ with frmProperties do
+ begin
+ if wg is TOtherWidget then
+ lbClass.Text := TOtherWidget(wg).wgClassName
+ else
+ lbClass.Text := wg.ClassName;
+ edName.Text := wg.Name;
+
+ if scd <> nil then
+ edOther.Text := scd.other.Text
+ else
+ edOther.Text := FFormOther;
+
+ edName.Visible := (wgcnt < 2);
+ edOther.Visible := (wgcnt < 2);
+
+ lstProps.Update;
+ end;
+
+ with frmProperties do
+ begin
+ btnLeft.Text := IntToStr(wg.Left);
+ btnTop.Text := IntToStr(wg.Top);
+ btnWidth.Text := IntToStr(wg.Width);
+ btnHeight.Text := IntToStr(wg.Height);
+
+ btnAnLeft.Down := anLeft in wg.Anchors;
+ btnAnTop.Down := anTop in wg.Anchors;
+ btnAnRight.Down := anRight in wg.Anchors;
+ btnAnBottom.Down := anBottom in wg.Anchors;
+ end;
+
+ Exit;
+ {
+ with PropertyForm do
+ begin
+ if wg is TOtherWidget then lbClass.Text8 := TOtherWidget(wg).wgClassName
+ else lbClass.Text8 := wg.ClassName;
+
+ edName.Text8 := wg.Name;
+
+ lbLeft.Text8 := IntToStr(wg.Left);
+ lbTop.Text8 := IntToStr(wg.Top);
+ lbWidth.Text8 := IntToStr(wg.Width);
+ lbHeight.Text8 := IntToStr(wg.Height);
+
+ cbAL.Checked := anLeft in wg.Anchors;
+ cbAT.Checked := anTop in wg.Anchors;
+ cbAR.Checked := anRight in wg.Anchors;
+ cbAB.Checked := anBottom in wg.Anchors;
+
+ btxt := true;
+ bedit := false;
+ lbText.Text := u8('Text:');
+
+ if wg is TGfxForm then edText.Text := TGfxForm(wg).WindowTitle
+ else if wg is TwgLabel then edText.Text := TwgLabel(wg).Text
+ else if wg is TwgEdit then edText.Text := TwgEdit(wg).Text
+ else if wg is TwgButton then edText.Text := TwgButton(wg).Text
+ else if wg is TwgCheckBox then edText.Text := TwgCheckBox(wg).Text
+ else btxt := false;
+
+ if not btxt and ((wg is TwgMemo) or (wg is TwgChoiceList) or (wg is TwgTextListBox))
+ then
+ begin
+ bedit := true;
+ lbText.Text := u8('Items:');
+ btnEdit.Text := u8('Edit items...');
+ end
+ else if (wg is TwgDBGrid) then
+ begin
+ bedit := true;
+ //lbText.Text := u8('Items:');
+ btnEdit.Text := u8('Edit columns...');
+ end;
+
+ if scd <> nil then
+ begin
+ edOther.Text := str8to16(scd.other.Text);
+ end
+ else
+ begin
+ edOther.Text := str8to16(FFormOther);
+ end;
+
+ edText.Visible := btxt;
+ lbText.Visible := btxt;
+ btnEdit.Visible := bedit;
+ edName.Visible := (wgcnt < 2);
+ edOther.Visible := (wgcnt < 2);
+
+ end; // with PropertyForm
+}
+end;
+
+procedure TFormDesigner.OnPropTextChange(Sender: TObject);
+{
+var
+ n : integer;
+ cd : TWidgetDesigner;
+ wg : TWidget;
+ s : string16;
+}
+begin
+ {
+ s := PropertyForm.edText.Text;
+ wg := nil;
+ for n:=0 to FWidgets.Count-1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ wg := cd.Widget;
+ SetWidgetText(wg,s);
+ if wg is TwgLabel then
+ with TwgLabel(wg) do
+ begin
+ if Font.TextWidth16(Text) > width then
+ begin
+ Width := Font.TextWidth16(Text);
+ UpdateWindowPosition;
+ cd.UpdateResizerPositions;
+ end;
+ end;
+ end;
+ end;
+
+ if wg = nil then
+ begin
+ FForm.WindowTitle := s;
+ end;
+}
+end;
+
+procedure TFormDesigner.OnPropNameChange(Sender: TObject);
+var
+ n: integer;
+ cd: TWidgetDesigner;
+ wg: TfpgWidget;
+ s: string;
+begin
+ // writeln('namechange');
+ s := frmProperties.edName.Text;
+ wg := nil;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ wg := cd.Widget;
+{
+ if GetWidgetText(wg,s) and (wg.Name = str16to8(s)) then
+ begin
+ PropertyForm.edText.Text8 := s8;
+ OnPropTextChange(sender);
+ end;
+}
+ end;
+
+ if wg = nil then
+ wg := FForm{
+ if FForm.Name = FForm.WindowTitle8 then
+ begin
+ FForm.WindowTitle8 := s8;
+ PropertyForm.edText.Text8 := s8;
+ end;
+};
+
+ try
+ wg.Name := s;
+ except
+ // invalid name...
+ end;
+end;
+
+procedure TFormDesigner.OnPropPosEdit(Sender: TObject);
+var
+ frm: TEditPositionForm;
+ ax: TfpgCoord;
+ ay: TfpgCoord;
+ wg: TfpgWidget;
+ n: integer;
+ cd: TWidgetDesigner;
+ posval: integer;
+ pt: TPoint;
+
+ procedure SetNewPos(awg: TfpgWidget; pval: integer);
+ begin
+ if Sender = frmProperties.btnLeft then
+ awg.Left := pval
+ else if Sender = frmProperties.btnTop then
+ awg.Top := pval
+ else if Sender = frmProperties.btnWidth then
+ awg.Width := pval
+ else if Sender = frmProperties.btnHeight then
+ awg.Height := pval;
+ end;
+
+begin
+ wg := nil;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ wg := cd.Widget;
+ break;
+ end;
+ end;
+
+ if wg = nil then
+ wg := Form;
+
+ frm := TEditPositionForm.Create(nil);
+
+ if Sender = frmProperties.btnLeft then
+ begin
+ frm.lbPos.Text := 'Left:';
+ frm.edPos.Text := IntToStr(wg.Left);
+ end
+ else if Sender = frmProperties.btnTop then
+ begin
+ frm.lbPos.Text := 'Top:';
+ frm.edPos.Text := IntToStr(wg.Top);
+ end
+ else if Sender = frmProperties.btnWidth then
+ begin
+ frm.lbPos.Text := 'Width:';
+ frm.edPos.Text := IntToStr(wg.Width);
+ end
+ else if Sender = frmProperties.btnHeight then
+ begin
+ frm.lbPos.Text := 'Height:';
+ frm.edPos.Text := IntToStr(wg.Height);
+ end;
+
+ posval := -9999;
+ if frm.ShowModal = 1 then
+ posval := StrToIntDef(frm.edPos.Text, -9999);
+ frm.Free;
+
+ if posval > -999 then
+ begin
+ wg := nil;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ wg := cd.Widget;
+ SetNewPos(wg, posval);
+ wg.UpdateWindowPosition;
+ cd.UpdateResizerPositions;
+ end;
+ end;
+
+ if wg = nil then
+ begin
+ SetNewPos(FForm, posval);
+ FForm.UpdateWindowPosition;
+ end;
+
+ end;
+
+ UpdatePropWin;
+end;
+
+procedure TFormDesigner.OnOtherChange(Sender: TObject);
+var
+ n: integer;
+ cd: TWidgetDesigner;
+ s: string;
+ sc: integer;
+begin
+ sc := 0;
+ s := frmProperties.edOther.Text;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ cd.other.Text := s;
+ Inc(sc);
+ end;
+ end;
+
+ if sc < 1 then
+ FFormOther := s;
+end;
+
+procedure TFormDesigner.OnAnchorChange(Sender: TObject);
+var
+ n: integer;
+ cd: TWidgetDesigner;
+ wg: TfpgWidget;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ wg := cd.Widget;
+
+ wg.Anchors := [];
+ if frmProperties.btnAnLeft.Down then
+ wg.Anchors := wg.Anchors + [anLeft];
+ if frmProperties.btnAnTop.Down then
+ wg.Anchors := wg.Anchors + [anTop];
+ if frmProperties.btnAnRight.Down then
+ wg.Anchors := wg.Anchors + [anRight];
+ if frmProperties.btnAnBottom.Down then
+ wg.Anchors := wg.Anchors + [anBottom];
+ end;
+ end;
+end;
+
+function TFormDesigner.GenerateNewName(namebase: string): string;
+var
+ nind, n: integer;
+ cd: TWidgetDesigner;
+ newname: string;
+ bok: boolean;
+begin
+ nind := 1;
+ repeat
+ newname := namebase + IntToStr(nind);
+ bok := True;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Widget.Name = newname then
+ begin
+ bok := False;
+ break;
+ end;
+ end;
+ Inc(nind);
+ until bok;
+ Result := newname;
+end;
+
+
+procedure TFormDesigner.MsgActivate(var msg: TfpgMessageRec);
+begin
+ msg.Stop := True;
+ maindsgn.SelectForm(self);
+end;
+
+function TFormDesigner.GetFormSourceDecl: string;
+var
+ n: integer;
+ wd: TWidgetDesigner;
+ wgclass: string;
+begin
+ Result := '';
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ wd := TWidgetDesigner(FWidgets.Items[n]);
+ if wd.Widget is TOtherWidget then
+ wgclass := TOtherWidget(wd.Widget).wgClassName
+ else
+ wgclass := wd.Widget.ClassName;
+ Result := Result + ' ' + wd.Widget.Name + ': ' + wgclass + ';' + LineEnding;
+ end;
+end;
+
+function TFormDesigner.GetFormSourceImpl: string;
+var
+ s: string;
+ sl: TStringList;
+ n: integer;
+ wd: TWidgetDesigner;
+ wg: TfpgWidget;
+ wgclass, pwgname: string;
+begin
+ s := '';
+
+ if maindsgn.SaveComponentNames then
+ s := s + ' Name := ' + QuotedStr(FForm.Name) + ';' + LineEnding;
+
+ s := s + ' SetPosition('
+ + IntToStr(FForm.Left) + ', '
+ + IntToStr(FForm.Top) + ', '
+ + IntToStr(FForm.Width) + ', '
+ + IntToStr(FForm.Height) + ');' + LineEnding;
+
+{
+ // Extend this and the Form Parser to handle WindowPosition, Width and Height
+ case FForm.WindowPosition of
+ wpUser:
+ begin
+ s := s + ' SetPosition('
+ + IntToStr(FForm.Left) + ', '
+ + IntToStr(FForm.Top) + ', '
+ + IntToStr(FForm.Width) + ', '
+ + IntToStr(FForm.Height) + ');' + LineEnding;
+ end;
+ else
+ begin
+ s := s + 'WindowPosition := wpScreenCenter;' + LineEnding;
+ s := s + 'Width := ' + IntToStr(FForm.Width) + ';' + LineEnding
+ + 'Height := ' + IntToStr(FForm.Height) + ';' + LineEnding;
+ end;
+ end;
+}
+ s := s + ' WindowTitle := ' + QuotedStr(FForm.WindowTitle) + ';' + LineEnding;
+
+ //adding other form properties, idented
+ sl := TStringList.Create;
+ sl.Text := FFormOther;
+ for n := 0 to sl.Count - 1 do
+ s := s + ' ' + sl.Strings[n] + LineEnding;
+ sl.Free;
+
+ s := s + LineEnding;
+
+ // FORM WIDGETS
+
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ wd := TWidgetDesigner(FWidgets.Items[n]);
+ wg := wd.Widget;
+ if wg.Parent = FForm then
+ pwgname := 'self'
+ else
+ pwgname := wg.Parent.Name;
+ if wg is TOtherWidget then
+ wgclass := TOtherWidget(wg).wgClassName
+ else
+ wgclass := wg.ClassName;
+
+ s := s + ' ' + wg.Name + ' := ' + wgclass + '.Create(' + pwgname + ');' + LineEnding +
+ ' with ' + wg.Name + ' do' + LineEnding + ' begin' + LineEnding + GetWidgetSourceImpl(wd, ' ') +
+ ' end;' + LineEnding + LineEnding;
+ end;
+
+ Result := s;
+end;
+
+function TFormDesigner.GetWidgetSourceImpl(wd: TWidgetDesigner; ident: string): string;
+var
+ ts, cs: string;
+ s: string;
+ wg: TfpgWidget;
+ wgc: TVFDWidgetClass;
+ n: integer;
+
+ procedure SaveItems(Name: string; sl: TStringList);
+ var
+ f: integer;
+ begin
+ for f := 0 to sl.Count - 1 do
+ s := s + ident + Name + '.Add(' + QuotedStr(sl.Strings[f]) + ');' + LineEnding;
+ end;
+
+ { procedure SaveColumns(grid : TwgDBGrid);
+ var
+ f : integer;
+ c : TDBColumn;
+ alstr : string;
+ begin
+ for f := 0 to grid.ColumnCount - 1 do
+ begin
+ c := grid.Columns[f];
+ case c.Alignment of
+ alRight : alstr := 'alRight';
+ alCenter : alstr := 'alCenter';
+ else
+ alstr := 'alLeft';
+ end;
+ s := s + ident + 'AddColumn8('+QuotedStr(u16u8safe(c.Title))+','+QuotedStr(c.FieldName8)
+ +','+IntToStr(c.Width)+','+alstr+');'#10;
+ end;
+ end;
+}
+begin
+ wg := wd.Widget;
+ wgc := wd.FVFDClass;
+ s := '';
+
+ if maindsgn.SaveComponentNames then
+ s := s + ident + 'Name := ' + QuotedStr(wg.Name) + ';' + LineEnding;
+
+ s := s + ident + 'SetPosition('
+ + IntToStr(wg.Left) + ', '
+ + IntToStr(wg.Top) + ', '
+ + IntToStr(wg.Width) + ', '
+ + IntToStr(wg.Height) + ');' + LineEnding;
+
+ if wg.Anchors <> [anLeft, anTop] then
+ begin
+ ts := '[';
+ cs := '';
+ if anLeft in wg.Anchors then
+ begin
+ ts := ts + cs + 'anLeft';
+ cs := ',';
+ end;
+ if anRight in wg.Anchors then
+ begin
+ ts := ts + cs + 'anRight';
+ cs := ',';
+ end;
+ if anTop in wg.Anchors then
+ begin
+ ts := ts + cs + 'anTop';
+ cs := ',';
+ end;
+ if anBottom in wg.Anchors then
+ begin
+ ts := ts + cs + 'anBottom';
+ cs := ',';
+ end;
+ ts := ts + '];';
+ s := s + ident + 'Anchors := ' + ts + LineEnding;
+ end;
+
+ for n := 0 to wgc.PropertyCount-1 do
+ s := s + wgc.GetProperty(n).GetPropertySource(wg, ident);
+
+ {
+ if wg is TwgMemo then
+ begin
+ SaveItems('Lines',TwgMemo(wg).Lines);
+ end
+ else if wg is TwgChoiceList then
+ begin
+ SaveItems('Items',TwgChoiceList(wg).Items);
+ end
+ else if wg is TwgTextListBox then
+ begin
+ SaveItems('Items',TwgTextListBox(wg).Items);
+ end
+ else if wg is TwgDBGrid then
+ begin
+ SaveColumns(TwgDBGrid(wg));
+ end
+ else
+ if GetWidgetText(wg, ts) then
+ begin
+ s := s + ident + 'Text := u8('+QuotedStr(u8encode(ts))+');'#10; // encoding with all printable characters
+ end;
+}
+
+ for n := 0 to wd.other.Count - 1 do
+ if trim(wd.other.Strings[n]) <> '' then
+ s := s + ident + wd.other.Strings[n] + LineEnding;
+
+ Result := s;
+end;
+
+procedure TFormDesigner.OnEditWidget(Sender: TObject);
+var
+ n: integer;
+ cd: TWidgetDesigner;
+ wg: TfpgWidget;
+begin
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if cd.Selected then
+ begin
+ wg := cd.Widget;
+
+ // Running widget editor;
+ RunWidgetEditor(cd, wg);
+
+ Exit;
+ end;
+ end;
+end;
+
+procedure EditItems(sl: TStringList);
+var
+ frmie: TItemEditorForm;
+ //ax,ay : integer;
+begin
+ frmie := TItemEditorForm.Create(nil);
+ //GfxGetAbsolutePosition(PropertyForm.btnEdit.WinHandle, PropertyForm.btnEdit.width, 0, ax,ay);
+ //frmie.Left := ax;
+ //frmie.Top := ay;
+
+ frmie.edItems.Lines.Assign(sl);
+ if frmie.ShowModal = 1 then
+ begin
+// Writeln('OK');
+ sl.Assign(frmie.edItems.Lines);
+ end;
+ frmie.Free;
+end;
+
+procedure TFormDesigner.RunWidgetEditor(wgd: TWidgetDesigner; wg: TfpgWidget);
+begin
+ if wg is TfpgMemo then
+ begin
+ EditItems(TfpgMemo(wg).Lines);
+ wg.Invalidate;
+ end
+ else if wg is TfpgComboBox then
+ begin
+ EditItems(TfpgComboBox(wg).Items);
+ wg.Invalidate;
+ end
+ else if wg is TfpgListBox then
+ begin
+ EditItems(TfpgListBox(wg).Items);
+ wg.Invalidate;
+ end;
+end;
+
+procedure TFormDesigner.InsertWidget(pwg: TfpgWidget; x, y: integer; wgc: TVFDWidgetClass);
+var
+ cfrm: TInsertCustomForm;
+ newname, newclassname: string;
+ wg: TfpgWidget;
+ wgd: TWidgetDesigner;
+begin
+// writeln('TFormDesigner.InsertWidget');
+ if wgc = nil then
+ Exit;
+
+ newname := '';
+
+ if wgc.WidgetClass = TOtherWidget then
+ begin
+ newclassname := '';
+ cfrm := TInsertCustomForm.Create(nil);
+ cfrm.edName.Text := GenerateNewName(wgc.NameBase);
+ cfrm.edClass.Text := 'Tfpg';
+ if cfrm.ShowModal = 1 then
+ begin
+ newname := cfrm.edName.Text;
+ newClassName := cfrm.edClass.Text;
+ end;
+ cfrm.Free;
+ if (newname = '') or (newclassname = '') then
+ Exit;
+ end;
+
+ wg := wgc.CreateWidget(pwg);
+ if wg <> nil then
+ begin
+ wg.FormDesigner := self;
+ if newname = '' then
+ newname := GenerateNewName(wgc.NameBase);
+ wg.Name := newname;
+ if wgc.WidgetClass = TOtherWidget then
+ TOtherWidget(wg).wgClassName := newclassname;
+ wgd := AddWidget(wg, wgc);
+ wg.Visible := True;
+ wg.SetPosition(x, y, wg.Width, wg.Height);
+ DeSelectAll;
+ wgd.Selected := True;
+ UpdatePropWin;
+ end;
+end;
+
+function TFormDesigner.FindWidgetByName(const wgname: string): TfpgWidget;
+var
+ n: integer;
+ wgnameuc: string;
+ cd: TWidgetDesigner;
+begin
+ wgnameuc := UpperCase(wgname);
+ Result := nil;
+ for n := 0 to FWidgets.Count - 1 do
+ begin
+ cd := TWidgetDesigner(FWidgets.Items[n]);
+ if UpperCase(cd.Widget.Name) = wgnameuc then
+ begin
+ Result := cd.Widget;
+ Exit;
+ end;
+ end;
+end;
+
+{ TDesignedForm }
+
+procedure TDesignedForm.AfterCreate;
+begin
+ inherited AfterCreate;
+ WindowPosition := wpUser;
+ WindowTitle := 'New Form';
+ SetPosition(300, 150, 300, 250);
+end;
+
+
+{ TOtherWidget }
+
+procedure TOtherWidget.HandlePaint;
+var
+ s: string;
+begin
+ Canvas.Clear(FBackgroundColor);
+ Canvas.SetFont(FFont);
+ Canvas.SetColor(clWidgetFrame);
+ Canvas.DrawRectangle(0, 0, Width, Height);
+ Canvas.SetTextColor(clText1);
+ s := Name + ': ' + wgClassName;
+ Canvas.DrawString(2, 2, s);
+end;
+
+constructor TOtherWidget.Create(AOwner: TComponent);
+begin
+ inherited;
+ wgClassName := 'TfpgWidget';
+ FBackgroundColor := $C0E0C0;
+ FFont := fpgStyle.DefaultFont;
+ FWidth := 120;
+ FHeight := 32;
+end;
+
+end.
+
diff --git a/uidesigner/vfdeditors.pas b/uidesigner/vfdeditors.pas
new file mode 100644
index 00000000..0c4e081f
--- /dev/null
+++ b/uidesigner/vfdeditors.pas
@@ -0,0 +1,98 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Some property editors.
+}
+
+unit vfdeditors;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfx_widget,
+ gui_label,
+ gui_button,
+ gui_memo,
+ vfdforms;
+
+type
+
+ TItemEditorForm = class(TVFDDialog)
+ private
+ procedure btnClearClicked(Sender: TObject);
+ procedure OnButtonClick(Sender: TObject);
+ public
+ l1: TfpgLabel;
+ edItems: TfpgMemo;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ btnClear: TfpgButton;
+ procedure AfterCreate; override;
+ end;
+
+
+implementation
+
+uses
+ gfxbase,
+ fpgfx;
+
+{ TItemEditorForm }
+
+procedure TItemEditorForm.AfterCreate;
+begin
+ inherited;
+ WindowTitle := 'Items';
+ SetPosition(0, 0, 360, 230);
+
+ l1 := CreateLabel(self, 8, 4, 'Items:');
+
+ edItems := TfpgMemo.Create(self);
+ with edItems do
+ begin
+ SetPosition(8, 24, 344, 168);
+ Anchors := AllAnchors;
+ end;
+
+ btnClear := CreateButton(self, 8, 200, 80, 'Clear', @btnClearClicked);
+ btnClear.Anchors := [anLeft, anBottom];
+
+ btnOK := CreateButton(self, btnClear.Right + 4, 200, 80, 'OK', @OnButtonClick);
+ btnOK.Anchors := [anLeft, anBottom];
+
+ btnCancel := CreateButton(self, Width-84, 200, 80, 'Cancel', @OnButtonClick);
+ btnCancel.Anchors := [anRight, anBottom];
+
+end;
+
+procedure TItemEditorForm.btnClearClicked(Sender: TObject);
+begin
+ edItems.Lines.Clear;
+end;
+
+procedure TItemEditorForm.OnButtonClick(Sender: TObject);
+begin
+ if Sender = btnOK then
+ ModalResult := mrOK
+ else
+ ModalResult := mrCancel;
+end;
+
+
+end.
+
diff --git a/uidesigner/vfdfile.pas b/uidesigner/vfdfile.pas
new file mode 100644
index 00000000..16910883
--- /dev/null
+++ b/uidesigner/vfdfile.pas
@@ -0,0 +1,388 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ This unit handles the load, save and merge functions. Doing
+ marker searching.
+}
+
+unit vfdfile;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils,
+ Classes,
+ gfx_utils;
+
+type
+ TVFDFileBlock = class
+ public
+ BlockID: string;
+ FormName: string;
+ Position: integer;
+ Data: string;
+ end;
+
+
+ TVFDFile = class
+ protected
+ FFileData: string;
+ FParsedData: string;
+ FBlocks: TList;
+ public
+ NewFormsDecl: string;
+ NewFormsImpl: string;
+ constructor Create;
+ destructor Destroy; override;
+ function LoadFile(fname: string): boolean;
+ procedure AddBlock(aposition: integer; ablockid, aformname, ablockdata: string);
+ function BlockCount: integer;
+ function Block(index: integer): TVFDFileBlock;
+ procedure FreeBlocks;
+ function GetBlocks: integer; // parse file
+ function MergeBlocks: string; // store file
+ procedure AddNewFormDecl(formname, formheadblock: string);
+ procedure AddNewFormImpl(formname, formbody: string);
+ function FindFormBlock(blockid, formname: string): TVFDFileBlock;
+ procedure SetFormData(formname, headblock, bodyblock: string);
+ procedure NewFileSkeleton(unitname: string);
+ end;
+
+
+implementation
+
+{ TVFDFile }
+
+procedure TVFDFile.AddBlock(aposition: integer; ablockid, aformname, ablockdata: string);
+var
+ fb: TVFDFileBlock;
+begin
+ fb := TVFDFileBlock.Create;
+ fb.Position := aposition;
+ fb.BlockID := ablockid;
+ fb.FormName := aformname;
+ fb.Data := ablockdata;
+ FBlocks.Add(fb);
+end;
+
+procedure TVFDFile.AddNewFormDecl(formname, formheadblock: string);
+var
+ s: string;
+begin
+ s :=
+ ' T' + formname + ' = class(TfpgForm)' + LineEnding +
+ ' public' + LineEnding +
+ ' {@VFD_HEAD_BEGIN: ' + formname + '}' + LineEnding +
+ formheadblock +
+ ' {@VFD_HEAD_END: ' + formname + '}' + LineEnding +
+ ' procedure AfterCreate; override;' + LineEnding
+ + ' end;' + LineEnding + LineEnding;
+ NewFormsDecl := NewFormsDecl + s;
+end;
+
+procedure TVFDFile.AddNewFormImpl(formname, formbody: string);
+var
+ s: string;
+begin
+ s := LineEnding + LineEnding +
+ 'procedure T' + formname + '.AfterCreate;' + LineEnding +
+ 'begin' + LineEnding +
+ ' {@VFD_BODY_BEGIN: ' + formname + '}' + LineEnding +
+ formbody +
+ ' {@VFD_BODY_END: ' + formname + '}' + LineEnding +
+ 'end;' + LineEnding;
+ NewFormsImpl := NewFormsImpl + s;
+end;
+
+function TVFDFile.Block(index: integer): TVFDFileBlock;
+begin
+ Result := nil;
+ if (index < 0) or (index > FBlocks.Count-1) then
+ Exit;
+ Result := TVFDFileBlock(FBlocks[index]);
+end;
+
+function TVFDFile.BlockCount: integer;
+begin
+ Result := FBlocks.Count;
+end;
+
+constructor TVFDFile.Create;
+begin
+ FFileData := '';
+ FParsedData := '';
+ NewFormsDecl := '';
+ NewFormsImpl := '';
+ FBlocks := TList.Create;
+end;
+
+destructor TVFDFile.Destroy;
+begin
+ FreeBlocks;
+ FBlocks.Free;
+ inherited;
+end;
+
+function TVFDFile.FindFormBlock(blockid, formname: string): TVFDFileBlock;
+var
+ n: integer;
+ fb: TVFDFileBlock;
+begin
+ Result := nil;
+ for n := 0 to BlockCount-1 do
+ begin
+ fb := Block(n);
+ if (fb.BlockID = blockid) and (UpperCase(fb.FormName) = UpperCase(formname)) then
+ begin
+ Result := fb;
+ Exit;
+ end;
+ end;
+end;
+
+procedure TVFDFile.FreeBlocks;
+var
+ n: integer;
+begin
+ for n := 0 to FBlocks.Count-1 do
+ TVFDFileBlock(FBlocks[n]).Free;
+ FBlocks.Clear;
+ NewFormsDecl := '';
+ NewFormsImpl := '';
+end;
+
+function TVFDFile.GetBlocks: integer;
+var
+ n: integer;
+
+ s: string;
+
+ startp, endp: integer;
+ formname: string;
+ bname, startmarker, endmarker: string;
+ datablock: string;
+ deletelen: integer;
+
+ dropmarker: boolean;
+begin
+ FreeBlocks;
+
+ FParsedData := FFileData;
+
+ // searching blocks:
+
+ repeat
+
+ bname := '';
+ formname := '';
+ datablock := '';
+
+ s := '{@VFD_';
+ startp := pos(s, FParsedData);
+ if startp > 0 then
+ begin
+ // marker found
+ n := startp + 2;
+ while (n < length(FParsedData)) and (FParsedData[n] in ['_', 'A'..'Z']) do
+ begin
+ bname := bname + FParsedData[n];
+ Inc(n);
+ end;
+
+ if FParsedData[n] = ':' then
+ Inc(n, 2);
+
+ while (n < length(FParsedData)) and (FParsedData[n] <> '}') do
+ begin
+ formname := formname + FParsedData[n];
+ Inc(n);
+ end;
+
+ startmarker := copy(FParsedData, startp, n - startp + 1);
+ deletelen := length(startmarker);
+ dropmarker := False;
+
+// Writeln('marker: ', startmarker);
+
+ // block marker ?
+
+ endmarker := '';
+ if bname = 'VFD_HEAD_BEGIN' then //or (bname = 'VFD_BODY_BEGIN') then
+ endmarker := '{@VFD_HEAD_END: ' + formname + '}'
+ else if bname = 'VFD_BODY_BEGIN' then
+ endmarker := '{@VFD_BODY_END: ' + formname + '}';
+
+ if endmarker <> '' then
+ begin
+ //Writeln('Block: ',bname,' form: ',formname);
+ // find the end of the block
+ endp := pos(endmarker, FParsedData);
+ if endp > 0 then
+ begin
+ //Writeln('end marker found.');
+ datablock := copy(FParsedData, startp + length(startmarker), endp - startp - length(startmarker));
+ //Writeln('data block:');
+ //writeln(datablock);
+ //writeln('.');
+ deletelen := endp - startp + length(endmarker);
+ end
+ else
+ dropmarker := True// error: end marker did not found
+ //Writeln('file error: ',endmarker,' marker wasn''t found.');
+ // block length = 0
+ ;
+ end;
+
+ Delete(FParsedData, startp, deletelen);
+
+ if not dropmarker then
+ AddBlock(startp, bname, formname, datablock);
+
+ end;
+
+ until startp <= 0;
+
+ //writeln(FParsedData);
+
+ Result := BlockCount;
+end;
+
+function TVFDFile.LoadFile(fname: string): boolean;
+var
+ ff: file;
+ s: string;
+ cnt: integer;
+begin
+ Result := False;
+ AssignFile(ff, fpgToOSEncoding(fname));
+ try
+ Reset(ff, 1);
+ except
+ Exit;
+ end;
+
+ FFileData := '';
+ try
+ while not EOF(ff) do
+ begin
+ SetLength(s, 4096);
+ BlockRead(ff, s[1], length(s), cnt);
+ FFileData := FFileData + copy(s, 1, cnt);
+ if cnt < length(s) then
+ break;
+ end;
+ Result := True;
+ finally
+ CloseFile(ff);
+ end;
+ //Writeln('data length: ',length(FFileData));
+end;
+
+function TVFDFile.MergeBlocks: string;
+var
+ rs: string;
+ n: integer;
+ iofs, startp: integer;
+ fb: TVFDFileBlock;
+ startmarker, endmarker: string;
+ iblock: string;
+
+ newsaved: boolean;
+
+begin
+ // Writeln('merging blocks: ');
+ newsaved := False;
+ rs := FParsedData;
+ iofs := 0;
+ for n := 0 to FBlocks.Count - 1 do
+ begin
+ fb := TVFDFileBlock(FBlocks[n]);
+ startmarker := '{@' + fb.BlockID;
+ if fb.formname <> '' then
+ startmarker := startmarker + ': ' + fb.FormName;
+ startmarker := startmarker + '}';
+ if fb.BlockID = 'VFD_HEAD_BEGIN' then
+ endmarker := ' {@VFD_HEAD_END: ' + fb.FormName + '}'
+ else if fb.BlockID = 'VFD_BODY_BEGIN' then
+ endmarker := ' {@VFD_BODY_END: ' + fb.FormName + '}'
+ else
+ endmarker := '';
+
+ iblock := startmarker;
+ if endmarker <> '' then
+ iblock := iblock + LineEnding + fb.Data + endmarker;
+
+ if fb.BlockID = 'VFD_NEWFORM_DECL' then
+ iblock := NewFormsDecl + iblock
+ else if fb.BlockID = 'VFD_NEWFORM_IMPL' then
+ begin
+ iblock := iblock + NewFormsImpl;
+ newsaved := True;
+ end;
+
+ startp := fb.Position + iofs;
+ insert(iblock, rs, startp);
+ Inc(iofs, length(iblock));
+ end;
+
+ if not newsaved and (NewFormsImpl <> '') then
+ rs := rs + NewFormsImpl; // do not loose new form data.
+
+ Result := rs;
+end;
+
+procedure TVFDFile.NewFileSkeleton(unitname: string);
+begin
+ FFileData :=
+ 'unit ' + unitname + ';'+ LineEnding + LineEnding +
+ '{$mode objfpc}{$H+}' + LineEnding + LineEnding +
+ 'interface' + LineEnding + LineEnding +
+ 'uses' + LineEnding +
+ ' SysUtils, Classes, gfxbase, fpgfx, gui_edit, ' + LineEnding +
+ ' gfx_widget, gui_form, gui_label, gui_button,' + LineEnding +
+ ' gui_listbox, gui_memo, gui_combobox, gui_basegrid, gui_grid, ' + LineEnding +
+ ' gui_dialogs, gui_checkbox, gui_tree, gui_trackbar, ' + LineEnding +
+ ' gui_progressbar, gui_radiobutton, gui_tab, gui_menu,' + LineEnding +
+ ' gui_panel, gui_popupcalendar, gui_gauge;' + LineEnding + LineEnding +
+ 'type' + LineEnding + LineEnding +
+ '{@VFD_NEWFORM_DECL}' + LineEnding + LineEnding +
+ 'implementation' + LineEnding + LineEnding +
+ '{@VFD_NEWFORM_IMPL}' + LineEnding + LineEnding +
+ 'end.' + LineEnding;
+
+ GetBlocks;
+end;
+
+procedure TVFDFile.SetFormData(formname, headblock, bodyblock: string);
+var
+ fb: TVFDFileBlock;
+begin
+ fb := FindFormBlock('VFD_HEAD_BEGIN', formname);
+ if fb <> nil then
+ fb.Data := HeadBlock
+ else
+ AddNewFormDecl(formname, headblock);
+
+ fb := FindFormBlock('VFD_BODY_BEGIN', formname);
+ if fb <> nil then
+ fb.Data := bodyblock
+ else
+ AddNewFormImpl(formname, bodyblock);
+end;
+
+
+end.
+
diff --git a/uidesigner/vfdformparser.pas b/uidesigner/vfdformparser.pas
new file mode 100644
index 00000000..a3d7c966
--- /dev/null
+++ b/uidesigner/vfdformparser.pas
@@ -0,0 +1,545 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Some Pascal source code parsing functionality.
+}
+
+unit vfdformparser;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ fpgfx,
+ gfx_widget,
+ gui_form,
+ vfddesigner,
+ vfdwidgetclass,
+ vfdwidgets;
+
+type
+ TVFDFormParser = class(TObject)
+ protected
+ ffd: TFormDesigner;
+ fformname: string;
+ BodyLines: TStringList;
+ eob: boolean;
+ line: string;
+ lineindex: integer;
+ public
+ procedure NextLine;
+ public
+ constructor Create(const FormName, FormHead, FormBody: string);
+ destructor Destroy; override;
+ function ParseForm: TFormDesigner;
+ procedure ParseFormProperties;
+ procedure ParseFormWidgets;
+ function ReadWGProperty(propline: string; wg: TfpgWidget; wgc: TVFDWidgetClass): boolean;
+ end;
+
+
+function GetIdentifier(var s: string): string;
+function GetStringValue(var s: string): string;
+procedure SkipSpaces(var s: string);
+function CheckSymbol(var s: string; const sym: string): boolean;
+function GetIntValue(var s: string): integer;
+function GetBoolValue(var s: string): boolean;
+
+
+implementation
+
+
+{ TVFDFormParser }
+
+constructor TVFDFormParser.Create(const FormName, FormHead, FormBody: string);
+begin
+ fformname := FormName;
+ ffd := nil;
+ BodyLines := TStringList.Create;
+ BodyLines.Text := FormBody;
+ lineindex := -1;
+end;
+
+destructor TVFDFormParser.Destroy;
+begin
+ BodyLines.Free;
+ inherited;
+end;
+
+procedure TVFDFormParser.NextLine;
+begin
+ repeat
+ Inc(lineindex);
+ eob := (lineindex > BodyLines.Count-1);
+ if not eob then
+ line := trim(bodylines.Strings[lineindex])
+ else
+ line := '';
+ until eob or (line <> '');
+end;
+
+function TVFDFormParser.ParseForm: TFormDesigner;
+begin
+ ffd := TFormDesigner.Create;
+ ffd.Form.Name := fformname;
+ // parsing line by line
+ // the unknown lines will be "other properties"
+ lineindex := -1;
+ NextLine;
+ ParseFormProperties;
+ ParseFormWidgets;
+ Result := ffd;
+end;
+
+procedure SkipSpaces(var s: string);
+begin
+ while (s <> '') and (s[1] in [' ', #9, #13, #10]) do
+ Delete(s, 1, 1);
+end;
+
+function CheckSymbol(var s: string; const sym: string): boolean;
+begin
+ SkipSpaces(s);
+ Result := (pos(sym, s) = 1);
+ if Result then
+ Delete(s, 1, length(sym));
+end;
+
+function GetIntValue(var s: string): integer;
+var
+ n: integer;
+ ns: string;
+begin
+ SkipSpaces(s);
+ ns := '';
+ n := 1;
+ while (n <= length(s)) and (s[n] in ['0'..'9', '-']) do
+ begin
+ ns := ns + s[n];
+ Inc(n);
+ end;
+ Result := StrToIntDef(ns, 0);
+ Delete(s, 1, length(ns));
+end;
+
+function GetBoolValue(var s: string): boolean;
+var
+ ts: string;
+ fs: string;
+begin
+ SkipSpaces(s);
+ ts := copy(s, 1, 4); // true string
+ fs := copy(s, 1, 5); // false string
+ if UpperCase(ts) = 'TRUE' then
+ Result := True
+ else if UpperCase(fs) = 'FALSE' then
+ Result := False
+ else
+ raise exception.Create('Failed to parse Boolean value <' + s + '>');
+
+ if Result then
+ Delete(s, 1, 4)
+ else
+ Delete(s, 1, 5);
+end;
+
+function GetStringValue(var s: string): string;
+var
+ n: integer;
+ quot: boolean;
+ c, prevc: char;
+ ccode: string;
+ ids: string;
+begin
+ Result := '';
+ ids := GetIdentifier(s);
+ if ids <> '' then
+{ if ids = 'u8' then
+ begin
+ if not CheckSymbol(s, '(') then
+ Exit;
+ end
+ else
+ Exit;
+}
+ SkipSpaces(s);
+ prevc := #0;
+ n := 1;
+ quot := False;
+ while n <= length(s) do
+ begin
+ c := s[n];
+ if c = '''' then
+ begin
+ quot := not quot;
+ if quot and (prevc = '''') then
+ Result := Result + c;
+ end
+ else if not quot then
+ begin
+ if not (c in ['+', ' ', #9, #13, #10]) then
+ if (c = '#') then
+ begin
+ Inc(n);
+ ccode := '';
+ while (n <= length(s)) and (s[n] in ['0'..'9']) do
+ begin
+ ccode := ccode + s[n];
+ Inc(n);
+ end;
+ c := chr(StrToIntDef(ccode, Ord('?')) and $FF);
+ Result := Result + c;
+ end
+ else
+ break;
+ end
+ else
+ Result := Result + c;
+ prevc := c;
+ Inc(n);
+ end;
+ if (n - 1) > 0 then
+ Delete(s, 1, n - 1);
+
+ SkipSpaces(s);
+// if ids <> '' then
+// CheckSymbol(s, ')');
+// if ids = 'u8' then
+// Result := u8(Result);
+end;
+
+function GetIdentifier(var s: string): string;
+var
+ n: integer;
+begin
+ SkipSpaces(s);
+ Result := '';
+ n := 1;
+ while n <= length(s) do
+ begin
+ if s[n] in ['_', 'a'..'z', 'A'..'Z', '0'..'9'] then
+ Result := Result + s[n]
+ else
+ Break;
+ Inc(n);
+ end;
+ if length(Result) > 0 then
+ Delete(s, 1, length(Result));
+end;
+
+procedure TVFDFormParser.ParseFormProperties;
+var
+ lok: boolean;
+begin
+ while not eob and (pos('.CREATE(', UpperCase(line)) = 0) do
+ begin
+ lok := ReadWGProperty(line, ffd.Form, VFDFormWidget);
+ if not lok then
+ ffd.FormOther := ffd.FormOther + line + LineEnding;
+ NextLine;
+ end;
+end;
+
+procedure TVFDFormParser.ParseFormWidgets;
+var
+ n: integer;
+ lok: boolean;
+ s: string;
+ ident: string;
+ wgname, wgclass, wgclassuc, wgparent: string;
+ pwg, wg: TfpgWidget;
+ wgother: string;
+ wd: TWidgetDesigner;
+ wgc: TVFDWidgetClass;
+begin
+ while not eob do
+ begin
+ //s := UpperCase(line);
+ s := line;
+
+ wgname := GetIdentifier(s);
+ //writeln('wg: ',wgname);
+ lok := CheckSymbol(s, ':=');
+ if lok then
+ wgclass := GetIdentifier(s);
+ lok := lok and CheckSymbol(s, '.');
+ lok := lok and (UpperCase(GetIdentifier(s)) = 'CREATE');
+ lok := lok and CheckSymbol(s, '(');
+ if lok then
+ wgparent := GetIdentifier(s);
+ lok := lok and CheckSymbol(s, ')');
+ lok := lok and CheckSymbol(s, ';');
+
+ if lok then
+ begin
+// writeln('wg create: ',wgname,' (',wgclass,') - ',wgparent);
+
+ // searching for the parent ...
+ pwg := nil;
+ if UpperCase(wgparent) <> 'SELF' then
+ begin
+ pwg := ffd.FindWidgetByName(wgparent);
+ if pwg = nil then
+ Writeln('Warning! Parent object "' + wgparent + '" not found for "' + wgname + '"');
+ end;
+ if pwg = nil then
+ pwg := ffd.Form;
+
+ wgclassuc := UpperCase(wgclass);
+
+ wg := nil;
+ wgc := nil;
+ for n := 0 to VFDWidgetCount-1 do
+ begin
+ wgc := VFDWidget(n);
+ if wgclassuc = UpperCase(wgc.WidgetClass.ClassName) then
+ begin
+ wg := wgc.CreateWidget(pwg);
+ break;
+ end;
+ end;
+
+ if wg = nil then
+ begin
+ wgc := VFDOtherWidget;
+ wg := TOtherWidget.Create(pwg);
+ TOtherWidget(wg).wgClassName := wgclass;
+ end;
+
+ wg.Name := wgname;
+ wg.FormDesigner := ffd;
+
+ NextLine;
+ s := UpperCase(line);
+ ident := GetIdentifier(s);
+ if ident = 'WITH' then
+ begin
+ // skip with line...
+ NextLine;
+
+ s := UpperCase(line);
+ ident := GetIdentifier(s);
+ if ident = 'BEGIN' then
+ NextLine;
+
+ // reading widget properties...
+ wgother := '';
+
+ while (not eob) and (pos('END;', UpperCase(line)) <> 1) do
+ begin
+ lok := ReadWGProperty(line, wg, wgc);
+ if not lok then
+ wgother := wgother + line + LineEnding;
+ nextline;
+ end;
+
+ if (pos('END;', UpperCase(line)) = 1) then
+ nextline;
+
+ end;
+
+ wd := ffd.AddWidget(wg, nil);
+ wd.FVFDClass := wgc;
+ wd.other.Text := wgother;
+
+ end
+ else
+ begin
+ ffd.FormOther := ffd.FormOther + line + LineEnding;
+ NextLine;
+ end;
+
+ end;
+end;
+
+function TVFDFormParser.ReadWGProperty(propline: string; wg: TfpgWidget; wgc: TVFDWidgetClass): boolean;
+var
+ s: string;
+ n: integer;
+ ident: string;
+ lok: boolean;
+ sval: string;
+ wga: TAnchors;
+begin
+ s := propline;
+
+ ident := UpperCase(GetIdentifier(s));
+ //writeln('ident: ',ident);
+ sval := '';
+
+ lok := False;
+
+ if ident = 'NAME' then
+ begin
+ lok := CheckSymbol(s, ':=');
+ if lok then
+ begin
+ sval := GetStringValue(s);
+ lok := CheckSymbol(s, ';');
+ end;
+ if lok then
+ wg.Name := sval;
+ end
+ {
+ else if ident = 'TEXT' then
+ begin
+ lok := CheckSymbol(s, ':=');
+ if lok then
+ begin
+ sval := GetStringValue(s);
+ lok := CheckSymbol(s, ';');
+ end;
+ if lok then
+ begin
+ if wg is TwgLabel then TwgLabel(wg).Text := sval
+ else if wg is TwgEdit then TwgEdit(wg).Text := sval
+ else if wg is TwgButton then TwgButton(wg).Text := sval
+ else if wg is TwgCheckBox then TwgCheckBox(wg).Text := sval
+ else
+ lok := false;
+ end;
+ if lok then SetWidgetText(wg, sval);
+ end
+ else if (ident = 'LINES') or (ident = 'ITEMS') then
+ begin
+ lok := CheckSymbol(s, '.');
+ lok := lok and (UpperCase(GetIdentifier(s)) = 'ADD');
+ lok := lok and CheckSymbol(s, '(');
+ if lok then
+ begin
+ sval := GetStringValue(s);
+ lok := lok and CheckSymbol(s, ')');
+ lok := lok and CheckSymbol(s, ';');
+ end;
+ if lok then
+ begin
+ if wg is TwgMemo then TwgMemo(wg).Lines.Add(sval)
+ else if wg is TwgChoiceList then TwgChoiceList(wg).Items.Add(sval)
+ else if wg is TwgTextListBox then TwgTextListBox(wg).Items.Add(sval)
+ else
+ lok := false;
+ end;
+ end
+}
+ else if ident = 'ANCHORS' then
+ begin
+ lok := CheckSymbol(s, ':=');
+ lok := lok and CheckSymbol(s, '[');
+ if lok then
+ begin
+ wga := [];
+ repeat
+ sval := UpperCase(GetIdentifier(s));
+ if sval = 'ANLEFT' then
+ wga := wga + [anLeft]
+ else if sval = 'ANTOP' then
+ wga := wga + [anTop]
+ else if sval = 'ANRIGHT' then
+ wga := wga + [anRight]
+ else if sval = 'ANBOTTOM' then
+ wga := wga + [anBottom];
+ until not CheckSymbol(s, ',');
+ end;
+ lok := lok and CheckSymbol(s, ']');
+ lok := lok and CheckSymbol(s, ';');
+
+ if lok then
+ wg.Anchors := wga;
+ end
+ else if ident = 'WINDOWTITLE' then
+ begin
+ lok := (wg is TfpgForm);
+ if lok then
+ begin
+ lok := CheckSymbol(s, ':=');
+ if lok then
+ begin
+ sval := GetStringValue(s);
+ lok := CheckSymbol(s, ';');
+ end;
+ if lok then
+ TfpgForm(wg).WindowTitle := sval;
+ end;
+ end
+ else if ident = 'SETPOSITION' then
+ begin
+ lok := CheckSymbol(s, '(');
+ if lok then
+ wg.Left := GetIntValue(s);
+ lok := lok and CheckSymbol(s, ',');
+ if lok then
+ wg.Top := GetIntValue(s);
+ lok := lok and CheckSymbol(s, ',');
+ if lok then
+ wg.Width := GetIntValue(s);
+ lok := lok and CheckSymbol(s, ',');
+ if lok then
+ wg.Height := GetIntValue(s);
+ lok := lok and CheckSymbol(s, ')');
+ lok := lok and CheckSymbol(s, ';');
+ //if lok then Writeln('sd ok.');
+ //writeln('WT: ',sval);
+ end
+ {
+ else if (wg is TwgDBGrid) and (ident = 'ADDCOLUMN8') then
+ begin
+ c := TDBColumn.Create;
+ lok := CheckSymbol(s, '(');
+
+ if lok then c.Title := u8(GetStringValue(s));
+ lok := lok and CheckSymbol(s, ',');
+ if lok then c.FieldName8 := GetStringValue(s);
+ lok := lok and CheckSymbol(s, ',');
+ if lok then c.Width := GetIntValue(s);
+ lok := lok and CheckSymbol(s, ',');
+ if lok then
+ begin
+ sval := UpperCase(GetIdentifier(s));
+ if sval = 'ALRIGHT' then c.Alignment := alRight
+ else if sval = 'ALCENTER' then c.Alignment := alCenter
+ else c.Alignment := alLeft;
+ end;
+
+ lok := lok and CheckSymbol(s, ')');
+ lok := lok and CheckSymbol(s, ';');
+
+ if lok then
+ begin
+ TwgDBGrid(wg).AddColumn(c.Title, c.FieldName8, c.Width, c.Alignment)
+ end;
+
+ c.Free;
+ end;
+};
+
+ if not lok then
+ if wgc <> nil then
+ for n := 0 to wgc.PropertyCount-1 do
+ begin
+ lok := wgc.GetProperty(n).ParseSourceLine(wg, line);
+ if lok then
+ Break;
+ end;
+
+ if not lok then
+ Writeln('unknown: ', line);
+
+ Result := lok;
+end;
+
+end.
+
diff --git a/uidesigner/vfdforms.pas b/uidesigner/vfdforms.pas
new file mode 100644
index 00000000..61ce43c2
--- /dev/null
+++ b/uidesigner/vfdforms.pas
@@ -0,0 +1,587 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ The main uiDesigner forms.
+}
+
+unit vfdforms;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfxbase,
+ gfx_widget,
+ gui_form,
+ gui_label,
+ gui_edit,
+ gui_button,
+ gui_listbox,
+ gui_combobox,
+ gui_trackbar,
+ gui_checkbox;
+
+type
+
+ TVFDDialog = class(TfpgForm)
+ protected
+ procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
+ end;
+
+
+ TInsertCustomForm = class(TVFDDialog)
+ public
+ l1,
+ l2: TfpgLabel;
+ edClass: TfpgEdit;
+ edName: TfpgEdit;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ procedure AfterCreate; override;
+ procedure OnButtonClick(Sender: TObject);
+ end;
+
+
+ TNewFormForm = class(TVFDDialog)
+ private
+ procedure OnedNameKeyPressed(Sender: TObject; var KeyCode: word;
+ var ShiftState: TShiftState; var Consumed: boolean);
+ public
+ l1: TfpgLabel;
+ edName: TfpgEdit;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ procedure AfterCreate; override;
+ procedure OnButtonClick(Sender: TObject);
+ end;
+
+
+ TEditPositionForm = class(TVFDDialog)
+ private
+ procedure edPosKeyPressed(Sender: TObject; var KeyCode: word;
+ var ShiftState: TShiftState; var Consumed: boolean);
+ public
+ lbPos: TfpgLabel;
+ edPos: TfpgEdit;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ procedure AfterCreate; override;
+ procedure OnButtonClick(Sender: TObject);
+ end;
+
+
+ TWidgetOrderForm = class(TVFDDialog)
+ public
+ {@VFD_HEAD_BEGIN: WidgetOrderForm}
+ l1: TfpgLabel;
+ list: TfpgListBox;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ btnUp: TfpgButton;
+ btnDown: TfpgButton;
+ {@VFD_HEAD_END: WidgetOrderForm}
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure AfterCreate; override;
+ procedure OnButtonClick(Sender: TObject);
+ end;
+
+
+ TfrmVFDSetup = class(TfpgForm)
+ private
+ procedure LoadSettings;
+ procedure SaveSettings;
+ procedure btnOKClick(Sender: TObject);
+ public
+ {@VFD_HEAD_BEGIN: frmVFDSetup}
+ lb1: TfpgLabel;
+ chlGrid: TfpgComboBox;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ lblRecentFiles: TfpgLabel;
+ tbMRUFileCount: TfpgTrackBar;
+ cbFullPath: TfpgCheckBox;
+ lblName1: TfpgLabel;
+ lblName2: TfpgLabel;
+ eDefaultExt: TfpgEdit;
+ lblName3: TfpgLabel;
+ cbUndoOnExit: TfpgCheckBox;
+ {@VFD_HEAD_END: frmVFDSetup}
+ procedure AfterCreate; override;
+ procedure BeforeDestruction; override;
+ end;
+
+
+
+implementation
+
+uses
+ fpgfx,
+ gui_iniutils,
+ gfx_constants,
+ vfdprops; // used to get Object Inspector defaults
+
+
+{ TInsertCustomForm }
+
+procedure TInsertCustomForm.AfterCreate;
+begin
+ inherited;
+ WindowPosition := wpScreenCenter;
+ WindowTitle := 'Insert Custom Widget';
+ SetPosition(0, 0, 300, 100);
+
+ l1 := CreateLabel(self, 8, 4, 'Class name:');
+ edClass := CreateEdit(self, 8, 24, 150, 0);
+ edClass.Text := 'Tfpg';
+ l2 := CreateLabel(self, 8, 48, 'Name:');
+ edName := CreateEdit(self, 8, 68, 150, 0);
+ btnOK := CreateButton(self, 180, 20, 100, 'OK', @OnButtonClick);
+ btnCancel := CreateButton(self, 180, 52, 100, 'Cancel', @OnButtonClick);
+end;
+
+procedure TInsertCustomForm.OnButtonClick(Sender: TObject);
+begin
+ if Sender = btnOK then
+ ModalResult := 1
+ else
+ ModalResult := 2;
+end;
+
+{ TNewFormForm }
+
+procedure TNewFormForm.OnedNameKeyPressed(Sender: TObject; var KeyCode: word;
+ var ShiftState: TShiftState; var Consumed: boolean);
+begin
+ if (KeyCode = keyEnter) or (KeyCode = keyPEnter) then
+ btnOK.Click;
+end;
+
+procedure TNewFormForm.AfterCreate;
+begin
+ inherited AfterCreate;
+ WindowPosition := wpScreenCenter;
+ SetPosition(0, 0, 286, 66);
+ WindowTitle := 'New Form';
+
+ l1 := CreateLabel(self, 8, 8, 'Form name:');
+ edName := CreateEdit(self, 8, 28, 180, 0);
+ edName.Text := 'frm';
+ edName.OnKeyPress := @OnedNameKeyPressed;
+ btnOK := CreateButton(self, 196, 8, 80, rsOK, @OnButtonClick);
+ btnCancel := CreateButton(self, 196, 36, 80, rsCancel, @OnButtonClick);
+end;
+
+procedure TNewFormForm.OnButtonClick(Sender: TObject);
+begin
+ if Sender = btnOK then
+ ModalResult := 1
+ else
+ ModalResult := 2;
+end;
+
+{ TEditPositionForm }
+
+procedure TEditPositionForm.edPosKeyPressed(Sender: TObject; var KeyCode: word;
+ var ShiftState: TShiftState; var Consumed: boolean);
+begin
+ if (KeyCode = keyEnter) or (KeyCode = keyPEnter) then
+ btnOK.Click;
+end;
+
+procedure TEditPositionForm.AfterCreate;
+begin
+ inherited AfterCreate;
+ WindowPosition := wpScreenCenter;
+ Width := 186;
+ Height := 66;
+ WindowTitle := 'Position';
+ Sizeable := False;
+
+ lbPos := CreateLabel(self, 8, 8, 'Pos: ');
+ edPos := CreateEdit(self, 8, 28, 80, 0);
+ edPos.OnKeyPress := @edPosKeyPressed;
+ btnOK := CreateButton(self, 98, 8, 80, rsOK, @OnButtonClick);
+ btnCancel := CreateButton(self, 98, 36, 80, rsCancel, @OnButtonClick);
+end;
+
+procedure TEditPositionForm.OnButtonClick(Sender: TObject);
+begin
+ if Sender = btnOK then
+ ModalResult := 1
+ else
+ ModalResult := 2;
+end;
+
+{ TWidgetOrderForm }
+
+constructor TWidgetOrderForm.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ Name := 'WidgetOrderForm';
+ gINI.ReadFormState(self);
+end;
+
+destructor TWidgetOrderForm.Destroy;
+begin
+ gINI.WriteFormState(self);
+ inherited Destroy;
+end;
+
+procedure TWidgetOrderForm.AfterCreate;
+begin
+ inherited AfterCreate;
+ {@VFD_BODY_BEGIN: WidgetOrderForm}
+ Name := 'WidgetOrderForm';
+ SetPosition(534, 173, 312, 258);
+ WindowTitle := 'Widget order';
+ WindowPosition := wpScreenCenter;
+
+ l1 := TfpgLabel.Create(self);
+ with l1 do
+ begin
+ Name := 'l1';
+ SetPosition(4, 4, 108, 16);
+ FontDesc := '#Label1';
+ Text := 'Form widget order:';
+ end;
+
+ list := TfpgListBox.Create(self);
+ with list do
+ begin
+ Name := 'list';
+ SetPosition(4, 24, 220, 228);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ FontDesc := '#List';
+ TabOrder := 1;
+ end;
+
+ btnOK := TfpgButton.Create(self);
+ with btnOK do
+ begin
+ Name := 'btnOK';
+ SetPosition(232, 24, 75, 24);
+ Anchors := [anRight,anTop];
+ Text := 'OK';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.ok';
+ TabOrder := 2;
+ OnClick := @OnButtonClick;
+ end;
+
+ btnCancel := TfpgButton.Create(self);
+ with btnCancel do
+ begin
+ Name := 'btnCancel';
+ SetPosition(232, 52, 75, 24);
+ Anchors := [anRight,anTop];
+ Text := 'Cancel';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.cancel';
+ TabOrder := 3;
+ OnClick := @OnButtonClick;
+ end;
+
+ btnUp := TfpgButton.Create(self);
+ with btnUp do
+ begin
+ Name := 'btnUp';
+ SetPosition(232, 108, 75, 24);
+ Anchors := [anRight,anTop];
+ Text := 'Up';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 4;
+ OnClick := @OnButtonClick;
+ end;
+
+ btnDown := TfpgButton.Create(self);
+ with btnDown do
+ begin
+ Name := 'btnDown';
+ SetPosition(232, 136, 75, 24);
+ Anchors := [anRight,anTop];
+ Text := 'Down';
+ FontDesc := '#Label1';
+ ImageName := '';
+ TabOrder := 5;
+ OnClick := @OnButtonClick;
+ end;
+
+ {@VFD_BODY_END: WidgetOrderForm}
+end;
+
+procedure TWidgetOrderForm.OnButtonClick(Sender: TObject);
+var
+ i: integer;
+ n: integer;
+ myilev: integer;
+
+ function IdentLevel(astr: string): integer;
+ var
+ s: string;
+ f: integer;
+ begin
+ Result := 0;
+ s := astr;
+ f := 1;
+ while (f <= length(s)) and (s[f] = ' ') do
+ begin
+ Inc(Result);
+ Inc(f);
+ end;
+ end;
+
+begin
+ if Sender = btnOK then
+ ModalResult := 1
+ else if Sender = btnCancel then
+ ModalResult := 2
+ else
+ begin
+ // up / down
+ i := list.FocusItem;
+ if i < 0 then
+ Exit;
+
+ myilev := IdentLevel(list.Items[i]);
+
+ if Sender = btnUP then
+ begin
+ if (i > 0) and (IdentLevel(list.Items[i - 1]) = myilev) then
+ begin
+ list.Items.Move(i, i - 1);
+
+ n := i;
+ while (n < list.Items.Count) and (IdentLevel(list.Items[n]) > myilev) do
+ begin
+ list.Items.Move(n, n - 1);
+ Inc(n);
+ end;
+
+ list.FocusItem := i - 1;
+ end;
+ end
+ else if Sender = btnDOWN then
+ if (i < list.Items.Count-1) then
+ begin
+ n := i;
+ while (n < list.Items.Count) and (IdentLevel(list.Items[n]) > myilev) do
+ Inc(n);
+
+ if (i = n) and (i < list.Items.Count-1) and (IdentLevel(list.Items[i]) > myilev) then
+ Exit;
+
+ if (n > list.Items.Count-1) then
+ Exit; //==>
+
+ while (n >= i) do
+ begin
+ list.Items.Move(n, n + 1);
+ Dec(n);
+ end;
+
+ list.FocusItem := i + 1;
+ end;
+ end;
+end;
+
+{ TVFDDialogBase }
+
+procedure TVFDDialog.HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
+begin
+ if keycode = keyEscape then
+ begin
+ ModalResult := 2;
+ consumed := True;
+ end;
+ inherited HandleKeyPress(keycode, shiftstate, consumed);
+end;
+
+procedure TfrmVFDSetup.LoadSettings;
+begin
+ chlGrid.FocusItem := gINI.ReadInteger('Options', 'GridResolution', 2);
+ tbMRUFileCount.Position := gINI.ReadInteger('Options', 'MRUFileCount', 4);
+ cbFullPath.Checked := gINI.ReadBool('Options', 'ShowFullPath', True);
+ eDefaultExt.Text := gINI.ReadString('Options', 'DefaultFileExt', '.pas');
+ cbUndoOnExit.Checked := gINI.ReadBool('Options', 'UndoOnExit', UndoOnPropExit);
+end;
+
+procedure TfrmVFDSetup.SaveSettings;
+begin
+ gINI.WriteInteger('Options', 'GridResolution', chlGrid.FocusItem);
+ gINI.WriteInteger('Options', 'MRUFileCount', tbMRUFileCount.Position);
+ gINI.WriteBool('Options', 'ShowFullPath', cbFullPath.Checked);
+ gINI.WriteString('Options', 'DefaultFileExt', eDefaultExt.Text);
+ gINI.WriteBool('Options', 'UndoOnExit', cbUndoOnExit.Checked);
+end;
+
+procedure TfrmVFDSetup.btnOKClick(Sender: TObject);
+begin
+ SaveSettings;
+ ModalResult := 1;
+end;
+
+procedure TfrmVFDSetup.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: frmVFDSetup}
+ Name := 'frmVFDSetup';
+ SetPosition(394, 399, 253, 225);
+ WindowTitle := 'General settings';
+ WindowPosition := wpScreenCenter;
+ gINI.ReadFormState(self);
+
+ lb1 := TfpgLabel.Create(self);
+ with lb1 do
+ begin
+ Name := 'lb1';
+ SetPosition(28, 28, 116, 16);
+ FontDesc := '#Label1';
+ Text := 'Grid resolution:';
+ end;
+
+ chlGrid := TfpgComboBox.Create(self);
+ with chlGrid do
+ begin
+ Name := 'chlGrid';
+ SetPosition(140, 24, 88, 22);
+ FontDesc := '#List';
+ Items.Add('1');
+ Items.Add('4');
+ Items.Add('8');
+ TabOrder := 1;
+ FocusItem := 0;
+ end;
+
+ btnOK := TfpgButton.Create(self);
+ with btnOK do
+ begin
+ Name := 'btnOK';
+ SetPosition(93, 195, 75, 24);
+ Anchors := [anRight,anBottom];
+ Text := 'OK';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.ok';
+ TabOrder := 6;
+ OnClick := @btnOKClick;
+ end;
+
+ btnCancel := TfpgButton.Create(self);
+ with btnCancel do
+ begin
+ Name := 'btnCancel';
+ SetPosition(172, 195, 75, 24);
+ Anchors := [anRight,anBottom];
+ Text := 'Cancel';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.cancel';
+ ModalResult := -1;
+ TabOrder := 7;
+ end;
+
+ lblRecentFiles := TfpgLabel.Create(self);
+ with lblRecentFiles do
+ begin
+ Name := 'lblRecentFiles';
+ SetPosition(28, 92, 124, 16);
+ FontDesc := '#Label1';
+ Text := 'Recent files count:';
+ end;
+
+ tbMRUFileCount := TfpgTrackBar.Create(self);
+ with tbMRUFileCount do
+ begin
+ Name := 'tbMRUFileCount';
+ SetPosition(156, 84, 76, 30);
+ Max := 10;
+ Min := 2;
+ Position := 4;
+ ShowPosition := True;
+ TabOrder := 3;
+ end;
+
+ cbFullPath := TfpgCheckBox.Create(self);
+ with cbFullPath do
+ begin
+ Name := 'cbFullPath';
+ SetPosition(24, 112, 204, 20);
+ FontDesc := '#Label1';
+ TabOrder := 4;
+ Text := 'Show the full file path';
+ end;
+
+ lblName1 := TfpgLabel.Create(self);
+ with lblName1 do
+ begin
+ Name := 'lblName1';
+ SetPosition(8, 8, 176, 16);
+ FontDesc := '#Label2';
+ Text := 'Form designer';
+ end;
+
+ lblName2 := TfpgLabel.Create(self);
+ with lblName2 do
+ begin
+ Name := 'lblName2';
+ SetPosition(8, 72, 232, 16);
+ FontDesc := '#Label2';
+ Text := 'Open Recent menu settings';
+ end;
+
+ eDefaultExt := TfpgEdit.Create(self);
+ with eDefaultExt do
+ begin
+ Name := 'eDefaultExt';
+ SetPosition(28, 160, 68, 22);
+ TabOrder := 5;
+ Text := '';
+ FontDesc := '#Edit1';
+ end;
+
+ lblName3 := TfpgLabel.Create(self);
+ with lblName3 do
+ begin
+ Name := 'lblName3';
+ SetPosition(12, 140, 152, 16);
+ FontDesc := '#Label2';
+ Text := 'Default file extension';
+ end;
+
+ cbUndoOnExit := TfpgCheckBox.Create(self);
+ with cbUndoOnExit do
+ begin
+ Name := 'cbUndoOnExit';
+ SetPosition(24, 48, 204, 18);
+ FontDesc := '#Label1';
+ TabOrder := 2;
+ Text := 'Undo on property editor exit';
+ end;
+
+ {@VFD_BODY_END: frmVFDSetup}
+
+ LoadSettings;
+end;
+
+procedure TfrmVFDSetup.BeforeDestruction;
+begin
+ gINI.WriteFormState(self);
+ inherited BeforeDestruction;
+end;
+
+
+end.
+
diff --git a/uidesigner/vfdmain.pas b/uidesigner/vfdmain.pas
new file mode 100644
index 00000000..b11a5f02
--- /dev/null
+++ b/uidesigner/vfdmain.pas
@@ -0,0 +1,445 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Main window functionality and designer class.
+}
+
+unit vfdmain;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfx_widget,
+ gui_dialogs,
+ vfdprops,
+ vfdforms,
+ vfddesigner,
+ vfdfile,
+ newformdesigner;
+
+const
+ program_version = '0.7 beta';
+
+type
+
+ TMainDesigner = class(TObject)
+ private
+ procedure SetEditedFileName(const Value: string);
+ procedure LoadDefaults;
+ protected
+ FDesigners: TList;
+ FFile: TVFDFile;
+ FEditedFileName: string;
+ public
+ GridResolution: integer;
+ SaveComponentNames: boolean;
+ selectedform: TFormDesigner;
+ constructor Create;
+ destructor Destroy; override;
+ procedure CreateWindows;
+ procedure SelectForm(aform: TFormDesigner);
+ function Designer(index: integer): TFormDesigner;
+ function DesignerCount: integer;
+ function NewFormName: string;
+ procedure CreateParseForm(const FormName, FormHead, FormBody: string);
+ procedure OnNewForm(Sender: TObject);
+ procedure OnNewFile(Sender: TObject);
+ procedure OnSaveFile(Sender: TObject);
+ procedure OnLoadFile(Sender: TObject);
+ procedure OnPropTextChange(Sender: TObject);
+ procedure OnPropNameChange(Sender: TObject);
+ procedure OnPropPosEdit(Sender: TObject);
+ procedure OnOtherChange(Sender: TObject);
+ procedure OnAnchorChange(Sender: TObject);
+ procedure OnEditWidget(Sender: TObject);
+ procedure OnEditWidgetOrder(Sender: TObject);
+ procedure OnEditTabOrder(Sender: TObject);
+ procedure OnExit(Sender: TObject);
+ procedure OnOptionsClick(Sender: TObject);
+ property EditedFileName: string read FEditedFileName write SetEditedFileName;
+ end;
+
+
+var
+ maindsgn: TMainDesigner;
+
+
+implementation
+
+uses
+ vfdformparser,
+ gui_iniutils,
+ gfx_utils;
+
+Var
+ DefaultPasExt : String = '.pas';
+
+{ TMainDesigner }
+
+procedure TMainDesigner.OnNewFile(Sender: TObject);
+var
+ n: integer;
+begin
+ EditedFileName := '';
+ for n := 0 to FDesigners.Count - 1 do
+ begin
+ selectedform := nil;
+ TFormDesigner(FDesigners[n]).Free;
+ end;
+ FDesigners.Clear;
+ OnNewForm(Sender);
+end;
+
+
+procedure TMainDesigner.OnLoadFile(Sender: TObject);
+var
+ n, m: integer;
+ bl, bl2: TVFDFileBlock;
+ fname: string;
+ afiledialog: TfpgFileDialog;
+begin
+ fname := EditedFileName;
+
+ if Sender <> maindsgn then
+ begin
+ afiledialog := TfpgFileDialog.Create(nil);
+ afiledialog.Filename := EditedFilename;
+ afiledialog.WindowTitle := 'Open form file';
+ afiledialog.Filter := 'Pascal source files (*.pp;*.pas;*.inc;*.dpr;*.lpr)|*.pp;*.pas;*.inc;*.dpr;*.lpr|All Files (*)|*';
+ if afiledialog.RunOpenFile then
+ begin
+ EditedFileName := aFileDialog.Filename;
+ fname := EditedFilename;
+ end
+ else
+ fname := '';
+ FreeAndNil(aFileDialog);
+ end;
+
+ if fname = '' then
+ Exit;
+
+ for n := 0 to FDesigners.Count - 1 do
+ begin
+ selectedform := nil;
+ TFormDesigner(FDesigners[n]).Free;
+ end;
+ FDesigners.Clear;
+
+ if not fpgFileExists(fname) then
+ begin
+ ShowMessage('File does not exists.', 'Error loading form');
+ Exit;
+ end;
+
+ FFile.LoadFile(fname);
+ FFile.GetBlocks;
+
+ for n := 0 to FFile.BlockCount-1 do
+ begin
+ bl := FFile.Block(n);
+ if bl.BlockID = 'VFD_HEAD_BEGIN' then
+ for m := n + 1 to FFile.BlockCount-1 do
+ begin
+ bl2 := FFile.Block(m);
+ if (bl2.BlockID = 'VFD_BODY_BEGIN') and (bl2.FormName = bl.FormName) then
+ CreateParseForm(bl.FormName, bl.Data, bl2.Data); // pair was found
+ end;
+ end;
+
+ frmMain.mru.AddItem(fname);
+end;
+
+procedure TMainDesigner.OnSaveFile(Sender: TObject);
+var
+ n, i: integer;
+ fd: TFormDesigner;
+ fdata: string;
+ ff: file;
+ fname, uname: string;
+ aFileDialog: TfpgFileDialog;
+begin
+ fname := EditedFileName;
+
+ if ((Sender as TComponent).Name = 'btnSave')
+ and (EditedFileName <> '') then
+ fname := EditedFileName
+ else
+ begin
+ afiledialog := TfpgFileDialog.Create(nil);
+ afiledialog.Filename := EditedFilename;
+ afiledialog.WindowTitle := 'Save form source';
+ afiledialog.Filter := 'Pascal source files (*.pp;*.pas;*.inc;*.dpr;*.lpr)|*.pp;*.pas;*.inc;*.dpr;*.lpr|All Files (*)|*';
+ if afiledialog.RunSaveFile then
+ begin
+ fname:=aFileDialog.Filename;
+ if (ExtractFileExt(fname)='') then
+ fname:=fname+DefaultPasExt;
+ EditedFileName := fname;
+ end
+ else
+ fname := '';
+ aFileDialog.Free;
+ end;
+
+ if fname = '' then
+ Exit;
+
+ EditedFileName := fname;
+
+ if fpgFileExists(fname) then
+ begin
+ FFile.LoadFile(fname);
+ FFile.GetBlocks;
+ end
+ else
+ begin
+ uname := ExtractFileName(fname);
+ i := pos('.pas', LowerCase(uname));
+ if i > 0 then
+ uname := copy(uname, 1, i - 1);
+ FFile.NewFileSkeleton(uname);
+ end;
+
+ for n := 0 to DesignerCount-1 do
+ begin
+ fd := Designer(n);
+ FFile.SetFormData(fd.Form.Name, fd.GetFormSourceDecl, fd.GetFormSourceImpl);
+ end;
+
+ fdata := FFile.MergeBlocks;
+
+ AssignFile(ff, fpgToOSEncoding(fname));
+ try
+ Rewrite(ff, 1);
+ try
+ BlockWrite(ff, fdata[1], length(fdata));
+ finally
+ CloseFile(ff);
+ end;
+ frmMain.mru.AddItem(fname);
+ except
+ on E: Exception do
+ raise Exception.Create('Form save I/O failure in TMainDesigner.OnSaveFile.' + #13 +
+ E.Message);
+ end;
+end;
+
+procedure TMainDesigner.OnAnchorChange(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.OnAnchorChange(Sender);
+end;
+
+procedure TMainDesigner.OnOtherChange(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.OnOtherChange(Sender);
+end;
+
+procedure TMainDesigner.OnPropNameChange(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.OnPropNameChange(Sender);
+end;
+
+procedure TMainDesigner.OnPropPosEdit(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.OnPropPosEdit(Sender);
+end;
+
+procedure TMainDesigner.OnPropTextChange(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.OnPropTextChange(Sender);
+end;
+
+procedure TMainDesigner.OnNewForm(Sender: TObject);
+var
+ fd: TFormDesigner;
+ nfrm: TNewFormForm;
+begin
+ nfrm := TNewFormForm.Create(nil);
+ if nfrm.ShowModal = 1 then
+ if nfrm.edName.Text <> '' then
+ begin
+ fd := TFormDesigner.Create;
+ fd.Form.Name := nfrm.edName.Text;
+ fd.Form.WindowTitle := nfrm.edName.Text;
+ FDesigners.Add(fd);
+ fd.Show;
+ end;
+ nfrm.Free;
+end;
+
+procedure TMainDesigner.CreateWindows;
+begin
+ frmMain := TfrmMain.Create(nil);
+ frmMain.WindowTitle := 'fpGUI Designer v' + program_version;
+ frmMain.Show;
+
+ frmProperties := TfrmProperties.Create(nil);
+ frmProperties.Show;
+end;
+
+constructor TMainDesigner.Create;
+begin
+ FDesigners := TList.Create;
+ SelectedForm := nil;
+ FFile := TVFDFile.Create;
+
+ // options
+ SaveComponentNames := True;
+ LoadDefaults;
+
+ FEditedFileName := '';
+end;
+
+destructor TMainDesigner.Destroy;
+var
+ n: integer;
+begin
+ for n := 0 to FDesigners.Count - 1 do
+ TFormDesigner(FDesigners[n]).Free;
+ FDesigners.Free;
+ FFile.Free;
+
+ frmProperties.Free;
+ frmMain.Free;
+ inherited;
+end;
+
+procedure TMainDesigner.SelectForm(aform: TFormDesigner);
+begin
+ if (SelectedForm <> nil) and (SelectedForm <> aform) then
+ SelectedForm.DeSelectAll;
+ SelectedForm := aform;
+end;
+
+function TMainDesigner.Designer(index: integer): TFormDesigner;
+begin
+ Result := nil;
+ if (index < 0) or (index > FDesigners.Count-1) then
+ Exit;
+ Result := TFormDesigner(FDesigners[index]);
+end;
+
+function TMainDesigner.DesignerCount: integer;
+begin
+ Result := FDesigners.Count;
+end;
+
+function TMainDesigner.NewFormName: string;
+var
+ n, i: integer;
+ s: string;
+begin
+ i := 0;
+ repeat
+ Inc(i);
+ s := 'Form' + IntToStr(i);
+ n := 0;
+ while (n < DesignerCount) do
+ begin
+ if Designer(n).Form.Name = s then
+ Break;
+ Inc(n);
+ end;
+ until n > DesignerCount-1;
+ Result := s;
+end;
+
+procedure TMainDesigner.CreateParseForm(const FormName, FormHead, FormBody: string);
+var
+ fd: TFormDesigner;
+ fp: TVFDFormParser;
+begin
+ fp := TVFDFormParser.Create(FormName, FormHead, FormBody);
+ fd := fp.ParseForm;
+ fp.Free;
+
+ FDesigners.Add(fd);
+ fd.Show;
+end;
+
+procedure TMainDesigner.OnEditWidget(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.OnEditWidget(Sender);
+end;
+
+procedure TMainDesigner.OnEditWidgetOrder(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.EditWidgetOrder;
+end;
+
+procedure TMainDesigner.OnEditTabOrder(Sender: TObject);
+begin
+ if SelectedForm <> nil then
+ SelectedForm.EditTabOrder;
+end;
+
+procedure TMainDesigner.OnExit(Sender: TObject);
+begin
+ frmProperties.Close;
+ frmMain.Close;
+end;
+
+procedure TMainDesigner.OnOptionsClick(Sender: TObject);
+var
+ frm: TfrmVFDSetup;
+begin
+ frm := TfrmVFDSetup.Create(nil);
+ try
+ if frm.ShowModal = 1 then
+ begin
+ LoadDefaults;
+ frmMain.mru.MaxItems := gINI.ReadInteger('Options', 'MRUFileCount', 4);
+ frmMain.mru.ShowFullPath := gINI.ReadBool('Options', 'ShowFullPath', True);
+ end;
+ finally
+ frm.Free;
+ end;
+end;
+
+procedure TMainDesigner.SetEditedFileName(const Value: string);
+var
+ s: string;
+begin
+ FEditedFileName := Value;
+ s := ExtractFileName(FEditedFileName);
+ if s = '' then
+ s := '[new]';
+ frmMain.WindowTitle := 'fpGUI Designer v' + program_version + ' - ' + s;
+end;
+
+procedure TMainDesigner.LoadDefaults;
+begin
+ case gINI.ReadInteger('Options', 'GridResolution', 1) of
+ 0: GridResolution := 2;
+ 1: GridResolution := 4;
+ 2: GridResolution := 8;
+ end;
+ DefaultPasExt := gINI.ReadString('Options', 'DefaultFileExt', '.pas');
+ UndoOnPropExit := gINI.ReadBool('Options', 'UndoOnExit', DefUndoOnPropExit);
+end;
+
+end.
+
diff --git a/uidesigner/vfdpropeditgrid.pas b/uidesigner/vfdpropeditgrid.pas
new file mode 100644
index 00000000..209b1d59
--- /dev/null
+++ b/uidesigner/vfdpropeditgrid.pas
@@ -0,0 +1,541 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Property editor for grid columns.
+}
+
+unit vfdpropeditgrid;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfxbase,
+ gfx_widget,
+ gui_form,
+ gui_label,
+ gui_edit,
+ gui_button,
+ gui_listbox,
+ gui_memo,
+ gui_combobox,
+ gui_customgrid,
+ gui_basegrid,
+ gui_grid,
+ gui_checkbox,
+ vfdforms,
+ vfdwidgetclass,
+ vfdprops,
+ vfdformparser;
+
+type
+
+ TPropertyDBColumns = class(TVFDWidgetProperty)
+ public
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ procedure OnExternalEdit(wg: TfpgWidget); override;
+ end;
+
+
+ // A normal grid's column information now become rows of data.
+ TColumnsGrid = class(TfpgCustomGrid)
+ protected
+ function GetRowCount: Integer; override;
+ procedure DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState); override;
+ public
+ dbgrid: TfpgStringGrid;
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+
+ TColumnEditForm = class(TfpgForm)
+ private
+ procedure GridRowChange(Sender: TObject; row: Integer);
+ procedure EditChange(Sender: TObject);
+ procedure NewButtonClick(Sender: TObject);
+ procedure DeleteButtonClick(Sender: TObject);
+ procedure CloseButtonClick(Sender: TObject);
+ procedure UpDownButtonClick(Sender: TObject);
+ procedure SaveColumn(row: integer);
+ public
+ {@VFD_HEAD_BEGIN: ColumnEditForm}
+ lbLabel1: TfpgLabel;
+ grid: TColumnsGrid;
+ lbLabel2: TfpgLabel;
+ lbLabel3: TfpgLabel;
+ lbLabel6: TfpgLabel;
+ lbLabel5: TfpgLabel;
+ lbCOLNO: TfpgLabel;
+ edTITLE: TfpgEdit;
+ edCOLWIDTH: TfpgEdit;
+ chlALIGN: TfpgComboBox;
+ btnNew: TfpgButton;
+ btnDelete: TfpgButton;
+ btnUP: TfpgButton;
+ btnDOWN: TfpgButton;
+ btnClose: TfpgButton;
+ {@VFD_HEAD_END: ColumnEditForm}
+
+ dbgrid: TfpgStringGrid;
+ procedure AfterCreate; override;
+ end;
+
+
+implementation
+
+
+procedure EditStringGridColumns(agrid: TfpgStringGrid);
+var
+ frm: TColumnEditForm;
+begin
+ frm := TColumnEditForm.Create(nil);
+ frm.dbgrid := agrid;
+ frm.grid.dbgrid := agrid;
+ frm.ShowModal;
+ frm.Free;
+end;
+
+{ TColumnEditForm }
+
+procedure TColumnEditForm.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: ColumnEditForm}
+ Name := 'ColumnEditForm';
+ SetPosition(270, 267, 511, 269);
+ WindowTitle := 'Column editor';
+ Sizeable := False;
+
+ lbLabel1 := TfpgLabel.Create(self);
+ with lbLabel1 do
+ begin
+ Name := 'lbLabel1';
+ SetPosition(8, 4, 110, 16);
+ Text := 'String Grid columns:';
+ FontDesc := '#Label1';
+ AutoSize := True;
+ end;
+
+ grid := TColumnsGrid.Create(self);
+ with grid do
+ begin
+ Name := 'grid';
+ SetPosition(8, 24, 328, 204);
+ OnRowChange := @GridRowChange;
+ end;
+
+ lbLabel2 := TfpgLabel.Create(self);
+ with lbLabel2 do
+ begin
+ Name := 'lbLabel2';
+ SetPosition(344, 24, 56, 16);
+ Text := 'Column:';
+ FontDesc := '#Label1';
+ AutoSize := True;
+ end;
+
+ lbLabel3 := TfpgLabel.Create(self);
+ with lbLabel3 do
+ begin
+ Name := 'lbLabel3';
+ SetPosition(344, 56, 34, 16);
+ Text := 'Title:';
+ FontDesc := '#Label1';
+ AutoSize := True;
+ end;
+
+ lbLabel6 := TfpgLabel.Create(self);
+ with lbLabel6 do
+ begin
+ Name := 'lbLabel6';
+ SetPosition(344, 100, 88, 16);
+ Text := 'Column width:';
+ FontDesc := '#Label1';
+ AutoSize := True;
+ end;
+
+ lbLabel5 := TfpgLabel.Create(self);
+ with lbLabel5 do
+ begin
+ Name := 'lbLabel5';
+ SetPosition(344, 144, 83, 16);
+ Text := 'Alignment:';
+ FontDesc := '#Label1';
+ AutoSize := True;
+ end;
+
+ lbCOLNO := TfpgLabel.Create(self);
+ with lbCOLNO do
+ begin
+ Name := 'lbCOLNO';
+ SetPosition(404, 24, 54, 16);
+ Text := '--';
+ FontDesc := '#Label1';
+ AutoSize := True;
+ end;
+
+ edTITLE := TfpgEdit.Create(self);
+ with edTITLE do
+ begin
+ Name := 'edTITLE';
+ SetPosition(344, 72, 160, 22);
+ Text := '';
+ FontDesc := '#Edit1';
+ OnChange := @EditChange;
+ end;
+
+ edCOLWIDTH := TfpgEdit.Create(self);
+ with edCOLWIDTH do
+ begin
+ Name := 'edCOLWIDTH';
+ SetPosition(344, 116, 160, 22);
+ Text := '';
+ FontDesc := '#Edit1';
+ OnChange := @EditChange;
+ end;
+
+ chlALIGN := TfpgComboBox.Create(self);
+ with chlALIGN do
+ begin
+ Name := 'chlALIGN';
+ SetPosition(344, 162, 160, 22);
+ Items.Add('Left');
+ Items.Add('Right');
+ Items.Add('Center');
+ FontDesc := '#List';
+ OnChange := @EditChange;
+ end;
+
+ btnNew := TfpgButton.Create(self);
+ with btnNew do
+ begin
+ Name := 'btnNew';
+ SetPosition(8, 236, 75, 24);
+ Text := 'New';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 0;
+ OnClick := @NewButtonClick;
+ end;
+
+ btnDelete := TfpgButton.Create(self);
+ with btnDelete do
+ begin
+ Name := 'btnDelete';
+ SetPosition(86, 236, 75, 24);
+ Text := 'Delete';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 0;
+ OnClick := @DeleteButtonClick;
+ end;
+
+ btnUP := TfpgButton.Create(self);
+ with btnUP do
+ begin
+ Name := 'btnUP';
+ SetPosition(182, 236, 75, 24);
+ Text := 'UP';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 0;
+ OnClick := @UpDownButtonClick;
+ end;
+
+ btnDOWN := TfpgButton.Create(self);
+ with btnDOWN do
+ begin
+ Name := 'btnDOWN';
+ SetPosition(260, 236, 75, 24);
+ Text := 'DOWN';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 0;
+ OnClick := @UpDownButtonClick;
+ end;
+
+ btnClose := TfpgButton.Create(self);
+ with btnClose do
+ begin
+ Name := 'btnClose';
+ SetPosition(428, 236, 75, 24);
+ Text := 'Close';
+ FontDesc := '#Label1';
+ ImageName := 'stdimg.close';
+ ModalResult := 0;
+ OnClick := @CloseButtonClick;
+ end;
+
+ {@VFD_BODY_END: ColumnEditForm}
+end;
+
+procedure TColumnEditForm.GridRowChange(Sender: TObject; row: Integer);
+var
+ i: integer;
+ c: TfpgStringColumn;
+begin
+ c := dbgrid.Columns[row];
+ if c = nil then
+ Exit;
+
+ try
+ // disable event handlers
+ edTITLE.OnChange := nil;
+ edCOLWIDTH.OnChange := nil;
+ chlALIGN.OnChange := nil;
+
+ lbCOLNO.Text := IntToStr(row);
+ edTITLE.Text := c.Title;
+ edCOLWIDTH.Text := IntToStr(c.Width);
+ case c.Alignment of
+ taRightJustify:
+ i := 1;
+ taCenter:
+ i := 2
+ else
+ i := 0;
+ end;
+ chlALIGN.FocusItem := i;
+ finally
+ // enable event handlers again.
+ edTITLE.OnChange := @EditChange;
+ edCOLWIDTH.OnChange := @EditChange;
+ chlALIGN.OnChange := @EditChange;
+ end;
+end;
+
+procedure TColumnEditForm.SaveColumn(row: integer);
+var
+ c: TfpgStringColumn;
+begin
+ c := dbgrid.Columns[row];
+ if c = nil then
+ Exit;
+
+ c.Title := edTITLE.Text;
+ c.Width := StrToIntDef(edCOLWIDTH.Text, 30);
+ case chlALIGN.FocusItem of
+ 1: c.Alignment := taRightJustify;
+ 2: c.Alignment := taCenter;
+ else
+ c.Alignment := taLeftJustify;
+ end;
+
+ grid.RePaint;
+ dbgrid.Update;
+end;
+
+procedure TColumnEditForm.EditChange(Sender: TObject);
+begin
+ if grid.FocusRow < 0 then
+ Exit;
+ SaveColumn(grid.FocusRow)
+end;
+
+procedure TColumnEditForm.NewButtonClick(Sender: TObject);
+begin
+ dbgrid.AddColumn('New', 50, taLeftJustify);
+ grid.FocusRow := grid.RowCount;
+ grid.Update;
+ GridRowChange(Sender, grid.FocusRow);
+end;
+
+procedure TColumnEditForm.DeleteButtonClick(Sender: TObject);
+begin
+ dbgrid.DeleteColumn(grid.FocusRow);
+ grid.Update;
+end;
+
+procedure TColumnEditForm.CloseButtonClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TColumnEditForm.UpDownButtonClick(Sender: TObject);
+begin
+ if Sender = btnUP then
+ begin
+ if grid.FocusRow > 0 then
+ begin
+ dbgrid.MoveColumn(grid.FocusRow - 1, grid.FocusRow - 2);
+ grid.FocusRow := grid.FocusRow - 1;
+ grid.Update;
+ end;
+ end
+ else if grid.FocusRow < grid.RowCount-1 then
+ begin
+ dbgrid.MoveColumn(grid.FocusRow - 1, grid.FocusRow);
+ grid.FocusRow := grid.FocusRow + 1;
+ grid.Update;
+ end;
+end;
+
+
+{ TColumnsGrid }
+
+function TColumnsGrid.GetRowCount: Integer;
+begin
+ try
+ // Yes, it must be ColumnCount and *not* RowCount!
+ Result := dbgrid.ColumnCount;
+ except
+ Result := inherited GetColumnCount;
+ end;
+end;
+
+procedure TColumnsGrid.DrawCell(ARow, ACol: Integer; ARect: TfpgRect; AFlags: TfpgGridDrawState);
+var
+ s: string;
+ x: integer;
+ c: TfpgStringColumn;
+begin
+// writeln('ARow=', ARow, ' ACol=', ACol);
+ c := dbgrid.Columns[ARow{ - 1}];
+ if c = nil then
+ begin
+// writeln(' TColumnsGrid.DrawCell -> exit early because c = nil');
+ Exit;
+ end;
+// writeln(' ... we passed the nil test');
+ x := ARect.Left + 1;
+
+ case ACol of
+ 0: s := IntToStr(ARow);
+ 1: s := c.Title;
+ 2: s := IntToStr(c.Width);
+ 3: case c.Alignment of
+ taRightJustify:
+ s := 'Right';
+ taCenter:
+ s := 'Center';
+ else
+ s := 'Left';
+ end;
+ else
+ s := '?';
+ end;
+
+ Canvas.DrawString(x, ARect.Top + 1, s);
+end;
+
+constructor TColumnsGrid.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ RowSelect := True;
+ ColumnCount := 0;
+ RowCount := 0;
+ AddColumn('Col.', 30);
+ AddColumn('Title', 80);
+ AddColumn('Width', 40);
+ AddColumn('Align', 50);
+end;
+
+{ TPropertyDBColumns }
+
+function TPropertyDBColumns.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TExternalPropertyEditor.Create(AOwner, self);
+end;
+
+function TPropertyDBColumns.GetValueText(wg: TfpgWidget): string;
+begin
+ with TfpgStringGrid(wg) do
+ Result := '[' + IntToStr(ColumnCount) + ' columns]';
+end;
+
+procedure TPropertyDBColumns.OnExternalEdit(wg: TfpgWidget);
+begin
+ if not Assigned(wg) then
+ raise Exception.Create('TPropertyDBColumns.OnExternalEdit(wg) - wg widget may not be nil.');
+ if not (wg is TfpgStringGrid) then
+ raise Exception.Create('TPropertyDBColumns.OnExternalEdit(wg) - wg widget is not a TfpgStringGrid.');
+ EditStringGridColumns(TfpgStringGrid(wg));
+end;
+
+function TPropertyDBColumns.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+var
+ c: TfpgStringColumn;
+ s: string;
+ sval: string;
+begin
+ s := line;
+ Result := False;
+ if UpperCase(GetIdentifier(s)) <> UpperCase('ADDCOLUMN') then
+ Exit;
+
+ c := TfpgStringColumn.Create;
+
+ Result := CheckSymbol(s, '(');
+
+ if Result then
+ c.Title := GetStringValue(s);
+ Result := Result and CheckSymbol(s, ',');
+ if Result then
+ c.Width := GetIntValue(s);
+ Result := Result and CheckSymbol(s, ',');
+ if Result then
+ begin
+ sval := UpperCase(GetIdentifier(s));
+ if sval = 'TARIGHTJUSTIFY' then
+ c.Alignment := taRightJustify
+ else if sval = 'TACENTER' then
+ c.Alignment := taCenter
+ else
+ c.Alignment := taLeftJustify;
+ end;
+
+ Result := Result and CheckSymbol(s, ')');
+ Result := Result and CheckSymbol(s, ';');
+
+ if Result then
+ TfpgStringGrid(wg).AddColumn(c.Title, c.Width, c.Alignment);
+
+ c.Free;
+end;
+
+function TPropertyDBColumns.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+var
+ f: integer;
+ c: TfpgStringColumn;
+ alstr: string;
+begin
+ Result := '';
+ with TfpgStringGrid(wg) do
+ begin
+ for f := 0 to ColumnCount-1 do
+ begin
+ c := Columns[f];
+ case c.Alignment of
+ taRightJustify:
+ alstr := 'taRightJustify';
+ taCenter:
+ alstr := 'taCenter';
+ else
+ alstr := 'taLeftJustify';
+ end;
+ Result := Result + ident
+ + 'AddColumn(' + QuotedStr(c.Title) + ', '
+ + IntToStr(c.Width) + ', '
+ + alstr + ');' + LineEnding;
+ end; { for }
+ end; { with }
+end;
+
+end.
+
diff --git a/uidesigner/vfdprops.pas b/uidesigner/vfdprops.pas
new file mode 100644
index 00000000..a46b73c5
--- /dev/null
+++ b/uidesigner/vfdprops.pas
@@ -0,0 +1,696 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Property editors.
+}
+
+unit vfdprops;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfxbase,
+ gfx_widget,
+ vfdwidgetclass,
+ gui_edit,
+ gui_button,
+ gui_combobox;
+
+type
+
+ TPropertyString = class(TVFDWidgetProperty)
+ public
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ end;
+
+
+ TPropertyInteger = class(TVFDWidgetProperty)
+ public
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ end;
+
+
+ TPropertyEnum = class(TVFDWidgetProperty)
+ public
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ end;
+
+
+ TPropertyStringList = class(TVFDWidgetProperty)
+ public
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ procedure OnExternalEdit(wg: TfpgWidget); override;
+ end;
+
+
+ TPropertyBoolean = class(TVFDWidgetProperty)
+ public
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; override;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; override;
+ function GetValueText(wg: TfpgWidget): string; override;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ end;
+
+
+ TPropertyFontDesc = class(TPropertyString)
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; override;
+ procedure OnExternalEdit(wg: TfpgWidget); override;
+ end;
+
+
+ TGPEType = (gptInteger, gptString);
+
+
+ TGeneralPropertyEditor = class(TVFDPropertyEditor)
+ private
+ FOrigValue: string;
+ procedure EditExit(Sender: TObject);
+ procedure EditKeyPressed(Sender: TObject; var KeyCode: word;
+ var ShiftState: TShiftState; var Consumed: boolean);
+ public
+ etype: TGPEType;
+ edit: TfpgEdit;
+ procedure CreateLayout; override;
+ procedure LoadValue(wg: TfpgWidget); override;
+ procedure StoreValue(wg: TfpgWidget); override;
+ procedure LoadIntValue(wg: TfpgWidget);
+ procedure StoreIntValue(wg: TfpgWidget);
+ procedure LoadStrValue(wg: TfpgWidget);
+ procedure StoreStrValue(wg: TfpgWidget);
+ end;
+
+
+ TChoicePropertyEditor = class(TVFDPropertyEditor)
+ public
+ chl: TfpgComboBox;
+ procedure CreateLayout; override;
+ procedure LoadValue(wg: TfpgWidget); override;
+ procedure StoreValue(wg: TfpgWidget); override;
+ end;
+
+
+ TBooleanPropertyEditor = class(TChoicePropertyEditor)
+ public
+ procedure LoadValue(wg: TfpgWidget); override;
+ procedure StoreValue(wg: TfpgWidget); override;
+ end;
+
+
+ TExternalPropertyEditor = class(TVFDPropertyEditor)
+ protected
+ procedure HandlePaint; override;
+ public
+ btnEdit: TfpgButton;
+ Widget: TfpgWidget;
+ procedure CreateLayout; override;
+ procedure LoadValue(wg: TfpgWidget); override;
+ procedure StoreValue(wg: TfpgWidget); override;
+ procedure OnEditClick(Sender: TObject);
+ end;
+
+
+procedure EditStringList(sl: TStringList);
+procedure GetEnumPropValueList(wg: TObject; const APropName: string; sl: TStringList);
+
+const
+ DefUndoOnPropExit = False;
+
+var
+ UndoOnPropExit: Boolean = DefUndoOnPropExit;
+
+implementation
+
+uses
+ TypInfo,
+ vfdformparser,
+ vfdeditors,
+ fpgfx,
+ gui_dialogs;
+
+
+procedure EditStringList(sl: TStringList);
+var
+ frm: TItemEditorForm;
+begin
+ frm := TItemEditorForm.Create(nil);
+ try
+ frm.edItems.Lines.Assign(sl);
+ if frm.ShowModal = 1 then
+ sl.Assign(frm.edItems.Lines);
+ finally
+ frm.Free;
+ end;
+end;
+
+procedure GetEnumPropValueList(wg: TObject; const APropName: string; sl: TStringList);
+var
+ lPropInfo: PPropInfo;
+ s: string;
+ lTypeData: PTypeData;
+ n: integer;
+begin
+ lPropInfo := GetPropInfo(wg, APropName);
+ lTypeData := GetTypeData(lPropInfo^.PropType);
+
+ sl.BeginUpdate;
+ try
+ sl.Clear;
+ for n := lTypeData^.MinValue to lTypeData^.MaxValue do
+ begin
+ s := GetEnumName(lPropInfo^.PropType, n);
+ sl.Add(s);
+ end;
+ finally
+ sl.EndUpdate;
+ end;
+end;
+
+{ TPropertyString }
+
+function TPropertyString.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TGeneralPropertyEditor.Create(AOwner, self);
+ with TGeneralPropertyEditor(Result) do
+ etype := gptString;
+end;
+
+function TPropertyString.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+begin
+ Result := ident + Name + ' := ' + QuotedStr(GetStrProp(wg, Name)) + ';' + LineEnding;
+end;
+
+function TPropertyString.GetValueText(wg: TfpgWidget): string;
+begin
+ Result := GetStrProp(wg, Name);
+end;
+
+function TPropertyString.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+var
+ s, sval: string;
+begin
+ s := line;
+ Result := False;
+ if UpperCase(GetIdentifier(s)) <> UpperCase(Name) then
+ Exit;
+
+ Result := CheckSymbol(s, ':=');
+ if Result then
+ begin
+ sval := GetStringValue(s);
+ Result := CheckSymbol(s, ';');
+ end;
+
+ if Result then
+ SetStrProp(wg, Name, sval);
+end;
+
+
+{ TPropertyInteger }
+
+function TPropertyInteger.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TGeneralPropertyEditor.Create(AOwner, self);
+ with TGeneralPropertyEditor(Result) do
+ etype := gptInteger;
+end;
+
+function TPropertyInteger.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+var
+ PropInfo: PPropInfo;
+begin
+ PropInfo := GetPropInfo(wg.ClassType, Name);
+ if PropInfo^.Default <> GetOrdProp(wg, Name) then
+ Result := ident + Name + ' := ' + IntToStr(GetOrdProp(wg, Name)) + ';' + LineEnding
+ else
+ Result := '';
+end;
+
+function TPropertyInteger.GetValueText(wg: TfpgWidget): string;
+begin
+ Result := IntToStr(GetOrdProp(wg, Name));
+end;
+
+function TPropertyInteger.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+var
+ s: string;
+ ival: integer;
+begin
+ s := line;
+ Result := False;
+ if UpperCase(GetIdentifier(s)) <> UpperCase(Name) then
+ Exit;
+
+ Result := CheckSymbol(s, ':=');
+ if Result then
+ begin
+ ival := GetIntValue(s);
+ Result := CheckSymbol(s, ';');
+ end
+ else
+ ival := 0;
+
+ if Result then
+ SetOrdProp(wg, Name, ival);
+end;
+
+{ TGeneralPropertyEditor }
+
+procedure TGeneralPropertyEditor.EditExit(Sender: TObject);
+begin
+ if FOrigValue <> edit.Text then
+ if UndoOnPropExit then
+ edit.Text := FOrigvalue
+ else
+ begin
+ UpdateProperty(nil);
+ FOrigValue := edit.Text;
+ end;
+end;
+
+procedure TGeneralPropertyEditor.EditKeyPressed(Sender: TObject;
+ var KeyCode: word; var ShiftState: TShiftState; var Consumed: boolean);
+begin
+ if (KeyCode = keyReturn) or (KeyCode = keyPEnter) then
+ begin
+ UpdateProperty(nil);
+ FOrigValue := edit.Text;
+ end
+ else if (keycode=keyEscape) then
+ begin
+ edit.Text := FOrigValue;
+ end
+ else
+ inherited;
+end;
+
+procedure TGeneralPropertyEditor.CreateLayout;
+begin
+ Anchors := [anTop, anLeft, anRight];
+ Edit := TfpgEdit.Create(self);
+ Edit.SetPosition(0, 0, Width, Height);
+ Edit.Anchors := Anchors;
+// Edit.OnChange := @UpdateProperty;
+ Edit.OnKeyPress := @EditKeyPressed;
+ Edit.OnExit :=@EditExit;
+ Edit.Visible := True;
+end;
+
+procedure TGeneralPropertyEditor.LoadIntValue(wg: TfpgWidget);
+begin
+ edit.Text := IntToStr(GetOrdProp(wg, prop.Name));
+end;
+
+procedure TGeneralPropertyEditor.LoadStrValue(wg: TfpgWidget);
+var
+ s: string;
+begin
+ s := GetStrProp(wg, prop.Name);
+ if etype = gptString then
+ edit.Text := s;
+end;
+
+procedure TGeneralPropertyEditor.LoadValue(wg: TfpgWidget);
+begin
+ case etype of
+ gptInteger:
+ LoadIntValue(wg);
+ else
+ LoadStrValue(wg);
+ end;
+ FOrigValue := edit.Text;
+end;
+
+procedure TGeneralPropertyEditor.StoreIntValue(wg: TfpgWidget);
+var
+ i: integer;
+begin
+ try
+ i := StrToInt(edit.Text);
+ SetOrdProp(wg, Prop.Name, i);
+ except
+ // error
+ end;
+end;
+
+procedure TGeneralPropertyEditor.StoreStrValue(wg: TfpgWidget);
+var
+ s: string;
+begin
+ if etype = gptString then
+ s := edit.Text;
+ SetStrProp(wg, prop.Name, s);
+end;
+
+procedure TGeneralPropertyEditor.StoreValue(wg: TfpgWidget);
+begin
+ case etype of
+ gptInteger: StoreIntValue(wg);
+ else
+ StoreStrValue(wg);
+ end;
+end;
+
+{ TPropertyStringList }
+
+function TPropertyStringList.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TExternalPropertyEditor.Create(AOwner, self);
+end;
+
+function TPropertyStringList.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+var
+ sl: TStringList;
+ f: integer;
+begin
+ sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
+
+ Result := '';
+
+ //if sl.Text <> '' then
+ //begin
+ //writeln('Text = <', sl.Text, '>');
+ //writeln('StringList.Count = ', sl.Count);
+ for f := 0 to sl.Count - 1 do
+ Result := Result + ident + Name + '.Add(' + QuotedStr(sl.Strings[f]) + ');' + LineEnding;
+ //end;
+end;
+
+function TPropertyStringList.GetValueText(wg: TfpgWidget): string;
+var
+ sl: TStringList;
+begin
+ sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
+ Result := '[' + IntToStr(sl.Count) + ' lines]';
+end;
+
+procedure TPropertyStringList.OnExternalEdit(wg: TfpgWidget);
+var
+ sl: TStringList;
+begin
+ sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
+ EditStringList(sl);
+end;
+
+function TPropertyStringList.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+var
+ s: string;
+ sval: string;
+ sl: TStringList;
+begin
+ s := line;
+ Result := False;
+ if UpperCase(GetIdentifier(s)) <> UpperCase(Name) then
+ Exit;
+
+ Result := CheckSymbol(s, '.');
+ Result := Result and (UpperCase(GetIdentifier(s)) = 'ADD');
+ Result := Result and CheckSymbol(s, '(');
+ if Result then
+ begin
+ sval := GetStringValue(s);
+ Result := Result and CheckSymbol(s, ')');
+ Result := Result and CheckSymbol(s, ';');
+ end;
+
+ if Result then
+ begin
+ sl := TStringList(GetObjectProp(wg, Name, TStrings));
+ if not Assigned(sl) then
+ raise Exception.Create('Failed to find TStrings type property.');
+ sl.Add(sval);
+ end;
+end;
+
+{ TPropertyBoolean }
+
+
+function TPropertyBoolean.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+var
+ s: string;
+ bval: boolean;
+begin
+ s := line;
+ Result := False;
+ if UpperCase(GetIdentifier(s)) <> UpperCase(Name) then
+ Exit;
+
+ Result := CheckSymbol(s, ':=');
+ if Result then
+ begin
+ bval := GetBoolValue(s);
+ Result := CheckSymbol(s, ';');
+ end
+ else
+ bval := False;
+
+ if Result then
+ SetOrdProp(wg, Name, Ord(bval));
+end;
+
+function TPropertyBoolean.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+var
+ i: integer;
+ s: string;
+ PropInfo: PPropInfo;
+begin
+ PropInfo := GetPropInfo(wg.ClassType, Name);
+ i := GetOrdProp(wg, Name);
+ if PropInfo^.Default <> i then
+ begin
+ if i = 1 then
+ s := 'True'
+ else
+ s := 'False';
+ Result := ident + Name + ' := ' + s + ';' + LineEnding;
+ end
+ else
+ Result := '';
+end;
+
+function TPropertyBoolean.GetValueText(wg: TfpgWidget): string;
+begin
+ if GetOrdProp(wg, Name) = 1 then
+ Result := 'True'
+ else
+ Result := 'False';
+end;
+
+function TPropertyBoolean.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TBooleanPropertyEditor.Create(AOwner, self);
+end;
+
+{ TExternalPropertyEditor }
+
+procedure TExternalPropertyEditor.HandlePaint;
+var
+ r: TfpgRect;
+begin
+// inherited HandlePaint;
+// if not Windowed then
+// Exit;
+ if widget = nil then
+ Exit;
+ Canvas.Clear(clBoxColor);
+ Canvas.GetWinRect(r);
+ Canvas.SetTextColor(clText1);
+ prop.DrawValue(Widget, Canvas, r, 0);
+end;
+
+procedure TExternalPropertyEditor.CreateLayout;
+begin
+ inherited;
+ Widget := nil;
+ Anchors := [anTop, anLeft, anRight];
+
+ btnEdit := TfpgButton.Create(self);
+ with btnEdit do
+ begin
+ Height := self.Height;
+ Width := 24;
+ Top := 0;
+ Left := self.Width - btnEdit.Width;
+ Text := '...';
+ UpdateWindowPosition;
+ Anchors := [anTop, anRight];
+ OnClick := @OnEditClick;
+ Visible := True;
+ end;
+end;
+
+procedure TExternalPropertyEditor.LoadValue(wg: TfpgWidget);
+begin
+ Widget := wg;
+ RePaint;
+end;
+
+procedure TExternalPropertyEditor.OnEditClick(Sender: TObject);
+begin
+ if widget = nil then
+ Exit;
+ prop.OnExternalEdit(widget);
+ widget.Invalidate;
+ RePaint;
+end;
+
+procedure TExternalPropertyEditor.StoreValue(wg: TfpgWidget);
+begin
+ // nothing
+end;
+
+{ TPropertyEnum }
+
+function TPropertyEnum.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TChoicePropertyEditor.Create(AOwner, self);
+end;
+
+function TPropertyEnum.GetValueText(wg: TfpgWidget): string;
+begin
+ Result := GetEnumProp(wg, Name);
+end;
+
+function TPropertyEnum.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+var
+ PropInfo: PPropInfo;
+begin
+ PropInfo := GetPropInfo(wg.ClassType, Name);
+ if PropInfo^.Default <> GetOrdProp(wg, Name) then
+ Result := ident + Name + ' := ' + GetEnumProp(wg, Name) + ';' + LineEnding
+ else
+ Result := '';
+end;
+
+function TPropertyEnum.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+var
+ s, sval: string;
+begin
+ s := line;
+ Result := False;
+ if UpperCase(GetIdentifier(s)) <> UpperCase(Name) then
+ Exit;
+
+ Result := CheckSymbol(s, ':=');
+ if Result then
+ begin
+ sval := GetIdentifier(s);
+ Result := CheckSymbol(s, ';');
+ end;
+
+ if Result then
+ try
+ SetEnumProp(wg, Name, sval);
+ except
+ Writeln('invalid enum value: "' + sval + '" for ' + Name);
+ Result := False;
+ end;
+end;
+
+{ TChoicePropertyEditor }
+
+procedure TChoicePropertyEditor.CreateLayout;
+begin
+ Anchors := [anTop, anLeft, anRight];
+ chl := TfpgComboBox.Create(self);
+ chl.SetPosition(0, 0, Width, Height);
+ chl.Anchors := Anchors;
+ chl.OnChange := @UpdateProperty;
+ chl.Visible := True;
+end;
+
+procedure TChoicePropertyEditor.LoadValue(wg: TfpgWidget);
+var
+ sv: string;
+ i, fi: integer;
+ sl: TStringList;
+begin
+ sv := GetEnumProp(wg, prop.Name);
+ sl := TStringList.Create;
+ GetEnumPropValueList(wg, prop.Name, sl);
+ fi := 0;
+ for i := 0 to sl.Count - 1 do
+ begin
+ chl.Items.Add(sl.Strings[i]);
+ if UpperCase(sv) = UpperCase(sl.Strings[i]) then
+ fi := i;
+ end;
+ chl.FocusItem := fi;
+ sl.Free;
+end;
+
+procedure TChoicePropertyEditor.StoreValue(wg: TfpgWidget);
+begin
+ SetEnumProp(wg, prop.Name, chl.Text);
+end;
+
+{ TBooleanPropertyEditor }
+
+procedure TBooleanPropertyEditor.LoadValue(wg: TfpgWidget);
+var
+ b: integer;
+begin
+ b := GetOrdProp(wg, prop.Name);
+ chl.Items.Add('True');
+ chl.Items.Add('False');
+ if b = 1 then
+ chl.FocusItem := 0
+ else
+ chl.FocusItem := 1;
+end;
+
+procedure TBooleanPropertyEditor.StoreValue(wg: TfpgWidget);
+begin
+ SetOrdProp(wg, prop.Name, Ord(StrToBool(chl.Text)));
+end;
+
+{ TPropertyFontDesc }
+
+function TPropertyFontDesc.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := TExternalPropertyEditor.Create(AOwner, self);
+end;
+
+procedure TPropertyFontDesc.OnExternalEdit(wg: TfpgWidget);
+var
+ s: string;
+begin
+ s := GetStrProp(wg, Name);
+ if SelectFontDialog(s) then
+ SetStrProp(wg, Name, s);
+end;
+
+end.
+
diff --git a/uidesigner/vfdresizer.pas b/uidesigner/vfdresizer.pas
new file mode 100644
index 00000000..9944e3b6
--- /dev/null
+++ b/uidesigner/vfdresizer.pas
@@ -0,0 +1,146 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ The resizer widget used in the form designer.
+}
+
+unit vfdresizer;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfxbase,
+ gfx_widget;
+
+type
+ TwgResizer = class(TfpgWidget)
+ protected
+ wgdesigner: TObject;
+ procedure HandlePaint; override;
+ procedure HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
+ procedure HandleMouseMove(x, y: integer; btnstate: word; shiftstate: TShiftState); override;
+ public
+ direction: integer;
+ FDragging: boolean;
+ FDragPosX,
+ FDragPosY: TfpgCoord;
+ constructor Create(ACompDesigner: TObject; adirection: integer); reintroduce;
+ procedure Show;
+ end;
+
+
+implementation
+
+
+uses
+ vfddesigner,
+ vfdmain;
+
+{ TwgResizer }
+
+procedure TwgResizer.HandlePaint;
+begin
+ Canvas.Clear(FBackgroundColor);
+end;
+
+procedure TwgResizer.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
+begin
+ inherited HandleLMouseDown(x, y, shiftstate);
+ FDragging := True;
+ FDragPosX := x;
+ FDragPosy := y;
+ {$IFDEF MSWINDOWS}
+ CaptureMouse;
+ {$ENDIF}
+end;
+
+procedure TwgResizer.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
+begin
+ inherited HandleLMouseUp(x, y, shiftstate);
+ FDragging := False;
+ {$IFDEF MSWINDOWS}
+ ReleaseMouse;
+ {$ENDIF}
+end;
+
+procedure TwgResizer.HandleMouseMove(x, y: integer; btnstate: word;
+ shiftstate: TShiftState);
+var
+ dx,
+ dy: integer;
+ gridc: integer;
+ wgd: TWidgetDesigner;
+begin
+// inherited HandleMouseMove(x, y, btnstate, shiftstate);
+
+ if (not FDragging) or ((btnstate and MOUSE_LEFT) = 0) then
+ Exit;
+
+ dx := x - FDragPosX;
+ dy := y - FDragPosY;
+
+ wgd := TWidgetDesigner(wgdesigner);
+ gridc := maindsgn.GridResolution;
+
+ dx := dx - dx mod gridc;
+ dy := dy - dy mod gridc;
+
+ case direction of
+ 1: wgd.Widget.MoveAndResizeBy(dx, dy, -dx, -dy);
+ 2: wgd.Widget.MoveAndResizeBy(0, dy, 0, -dy);
+ 3: wgd.Widget.MoveAndResizeBy(0, dy, dx, -dy);
+ 4: wgd.Widget.MoveAndResizeBy(0, 0, dx, 0);
+ 5: wgd.Widget.MoveAndResizeBy(0, 0, dx, dy);
+ 6: wgd.Widget.MoveAndResizeBy(0, 0, 0, dy);
+ 7: wgd.Widget.MoveAndResizeBy(dx, 0, -dx, dy);
+ 8: wgd.Widget.MoveAndResizeBy(dx, 0, -dx, 0);
+ end;
+ wgd.UpdateResizerPositions;
+ wgd.FormDesigner.UpdatePropWin;
+end;
+
+constructor TwgResizer.Create(ACompDesigner: TObject; adirection: integer);
+begin
+ inherited Create(TWidgetDesigner(aCompDesigner).Widget.Parent);
+ FBackgroundColor := $404040;
+ wgdesigner := aCompDesigner;
+ FDragging := False;
+ Width := 5;
+ Height := 5;
+ direction := adirection;
+ case direction of
+ 1: MouseCursor := mcSizeSENW; // top left
+ 2: MouseCursor := mcSizeNS; // top
+ 3: MouseCursor := mcSizeSWNE; // top right
+ 4: MouseCursor := mcSizeEW; // right
+ 5: MouseCursor := mcSizeNWSE; // bottom right
+ 6: MouseCursor := mcSizeNS; // bottom
+ 7: MouseCursor := mcSizeNESW; // bottom left
+ 8: MouseCursor := mcSizeEW; // left
+ end;
+ Visible := True;
+end;
+
+procedure TwgResizer.Show;
+begin
+ HandleShow;
+end;
+
+end.
+
diff --git a/uidesigner/vfdutils.pas b/uidesigner/vfdutils.pas
new file mode 100644
index 00000000..90b99841
--- /dev/null
+++ b/uidesigner/vfdutils.pas
@@ -0,0 +1,82 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Some utility functions.
+}
+
+unit vfdutils;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfx_widget,
+ gui_form,
+ gui_label,
+ gui_edit,
+ gui_button,
+ gui_memo,
+ gui_checkbox;
+
+
+procedure SetWidgetText(wg: TfpgWidget; txt: string);
+function GetWidgetText(wg: TfpgWidget; out txt: string): boolean;
+
+
+implementation
+
+procedure SetWidgetText(wg: TfpgWidget; txt: string);
+begin
+ if wg is TfpgForm then
+ TfpgForm(wg).WindowTitle := txt
+ else if wg is TfpgLabel then
+ TfpgLabel(wg).Text := txt
+ else if wg is TfpgEdit then
+ TfpgEdit(wg).Text := txt
+ else if wg is TfpgMemo then
+ TfpgMemo(wg).Text := txt
+ else if wg is TfpgButton then
+ TfpgButton(wg).Text := txt
+ else if wg is TfpgCheckBox then
+ TfpgCheckBox(wg).Text := txt;
+end;
+
+function GetWidgetText(wg: TfpgWidget; out txt: string): boolean;
+begin
+ Result := True;
+ if wg is TfpgForm then
+ txt := TfpgForm(wg).WindowTitle
+ else if wg is TfpgLabel then
+ txt := TfpgLabel(wg).Text
+ else if wg is TfpgEdit then
+ txt := TfpgEdit(wg).Text
+ else if wg is TfpgMemo then
+ txt := TfpgMemo(wg).Text
+ else if wg is TfpgButton then
+ txt := TfpgButton(wg).Text
+ else if wg is TfpgCheckBox then
+ txt := TfpgCheckBox(wg).Text
+ else
+ begin
+ Result := False;
+ txt := '';
+ end;
+end;
+
+
+end.
+
diff --git a/uidesigner/vfdwidgetclass.pas b/uidesigner/vfdwidgetclass.pas
new file mode 100644
index 00000000..9729691f
--- /dev/null
+++ b/uidesigner/vfdwidgetclass.pas
@@ -0,0 +1,233 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Main window functionality and designer class.
+}
+
+unit vfdwidgetclass;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes,
+ SysUtils,
+ gfxbase,
+ fpgfx,
+ gfx_widget;
+
+type
+ TWidgetClass = class of TfpgWidget;
+
+
+ TVFDWidgetProperty = class;
+
+
+ TVFDPropertyEditor = class(TfpgWidget)
+ private
+ FProp: TVFDWidgetProperty;
+ public
+ OnUpdate: TNotifyEvent;
+ procedure UpdateProperty(Sender: TObject);
+ property Prop: TVFDWidgetProperty read FProp;
+ constructor Create(AOwner: TComponent; aprop: TVFDWidgetProperty); reintroduce;
+ procedure CreateLayout; virtual;
+ procedure LoadValue(wg: TfpgWidget); virtual;
+ procedure StoreValue(wg: TfpgWidget); virtual;
+ end;
+
+
+ TVFDWidgetProperty = class(TObject)
+ public
+ Name: string;
+ Description: string;
+ public
+ constructor Create(aName: string); virtual;
+ function ParseSourceLine(wg: TfpgWidget; const line: string): boolean; virtual;
+ function GetPropertySource(wg: TfpgWidget; const ident: string): string; virtual;
+ function GetValueText(wg: TfpgWidget): string; virtual;
+ procedure DrawValue(wg: TfpgWidget; Canvas: TfpgCanvas; rect: TfpgRect; flags: integer); virtual;
+ function CreateEditor(AOwner: TComponent): TVFDPropertyEditor; virtual;
+ procedure OnExternalEdit(wg: TfpgWidget); virtual;
+ end;
+
+
+ TVFDPropertyClass = class of TVFDWidgetProperty;
+
+
+ TVFDWidgetClass = class(TObject)
+ private
+ FProps: TList;
+ public
+ WidgetClass: TWidgetClass;
+ Description: string;
+ WidgetIconName: string;
+ NameBase: string;
+ Container: boolean;
+ constructor Create(aClass: TWidgetClass);
+ destructor Destroy; override;
+ function AddProperty(apropname: string; apropclass: TVFDPropertyClass; desc: string): TVFDWidgetProperty;
+ function PropertyCount: integer;
+ function GetProperty(ind: integer): TVFDWidgetProperty;
+ function CreateWidget(AOwner: TComponent): TfpgWidget;
+ end;
+
+
+implementation
+
+uses
+ TypInfo;
+
+
+type
+ // used to get to SetDesigning() in Form Designer
+ TComponentFriendClass = class(TComponent);
+
+
+{ TVFDWidgetClass }
+
+function TVFDWidgetClass.AddProperty(apropname: string; apropclass: TVFDPropertyClass;
+ desc: string): TVFDWidgetProperty;
+begin
+ Result := apropclass.Create(apropname);
+ Result.Description := desc;
+ FProps.Add(Result);
+end;
+
+constructor TVFDWidgetClass.Create(aClass: TWidgetClass);
+begin
+ WidgetClass := aClass;
+ FProps := TList.Create;
+ Description := '';
+ NameBase := 'Widget';
+ Container := False;
+end;
+
+function TVFDWidgetClass.CreateWidget(AOwner: TComponent): TfpgWidget;
+begin
+ Result := WidgetClass.Create(AOwner);
+ TComponentFriendClass(Result).SetDesigning(True);
+end;
+
+destructor TVFDWidgetClass.Destroy;
+var
+ n: integer;
+begin
+ for n := 0 to FProps.Count - 1 do
+ TVFDWidgetProperty(FProps[n]).Free;
+ FProps.Free;
+ inherited;
+end;
+
+function TVFDWidgetClass.GetProperty(ind: integer): TVFDWidgetProperty;
+begin
+ Result := TVFDWidgetProperty(FProps[ind]);
+end;
+
+function TVFDWidgetClass.PropertyCount: integer;
+begin
+ Result := FProps.Count;
+end;
+
+{ TVFDWidgetProperty }
+
+constructor TVFDWidgetProperty.Create(aName: string);
+begin
+ Name := aName;
+ Description := '';
+end;
+
+function TVFDWidgetProperty.GetPropertySource(wg: TfpgWidget; const ident: string): string;
+begin
+
+end;
+
+function TVFDWidgetProperty.ParseSourceLine(wg: TfpgWidget; const line: string): boolean;
+begin
+ Result := False;
+end;
+
+function TVFDWidgetProperty.CreateEditor(AOwner: TComponent): TVFDPropertyEditor;
+begin
+ Result := nil;
+end;
+
+procedure TVFDWidgetProperty.DrawValue(wg: TfpgWidget; Canvas: TfpgCanvas; rect: TfpgRect; flags: integer);
+var
+ x, y, fy: integer;
+ s: string;
+begin
+ x := rect.left;
+ y := rect.top;
+ fy := y + rect.Height div 2 - Canvas.Font.Height div 2;
+
+ try
+ s := GetValueText(wg);
+ except
+ on E: Exception do
+ writeln('Detected a error: ', E.Message);
+ end;
+
+ Canvas.BeginDraw;
+ Canvas.DrawString(x + 1, fy, s);
+ Canvas.EndDraw;
+end;
+
+function TVFDWidgetProperty.GetValueText(wg: TfpgWidget): string;
+begin
+ Result := '[' + Name + ']';
+end;
+
+procedure TVFDWidgetProperty.OnExternalEdit(wg: TfpgWidget);
+begin
+ writeln('external edit');
+end;
+
+{ TVFDPropertyEditor }
+
+constructor TVFDPropertyEditor.Create(AOwner: TComponent; aprop: TVFDWidgetProperty);
+begin
+ inherited Create(AOwner);
+ OnUpdate := nil;
+ FProp := aprop;
+end;
+
+procedure TVFDPropertyEditor.CreateLayout;
+begin
+ //abstract
+end;
+
+procedure TVFDPropertyEditor.LoadValue(wg: TfpgWidget);
+begin
+ Writeln('abstract: editor.LoadValue');
+end;
+
+procedure TVFDPropertyEditor.UpdateProperty(Sender: TObject);
+begin
+ if Assigned(OnUpdate) then
+ OnUpdate(self);
+end;
+
+procedure TVFDPropertyEditor.StoreValue(wg: TfpgWidget);
+begin
+ Writeln('abstract: editor.StoreValue');
+ // check property type
+ // the property must be published !
+ // PPropInfo := GetPropInfo(object, 'propname');
+ // if PPropInfo^.PropType^.name =
+end;
+
+end.
+
diff --git a/uidesigner/vfdwidgets.pas b/uidesigner/vfdwidgets.pas
new file mode 100644
index 00000000..099cf4c5
--- /dev/null
+++ b/uidesigner/vfdwidgets.pas
@@ -0,0 +1,453 @@
+{
+ fpGUI - Free Pascal GUI Toolkit
+
+ Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this
+ distribution, for details of the copyright.
+
+ See the file COPYING.modifiedLGPL, included in this distribution,
+ for details about redistributing fpGUI.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ Setting up of widgets, properties and images.
+}
+
+unit vfdwidgets;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils,
+ Classes,
+ contnrs,
+ vfdwidgetclass,
+ vfdprops,
+ typinfo;
+
+procedure RegisterWidgets;
+procedure RegisterVFDWidget(awc: TVFDWidgetClass);
+function VFDWidgetCount: integer;
+function VFDWidget(ind: integer): TVFDWidgetClass;
+function VFDFormWidget: TVFDWidgetClass;
+
+var
+ VFDOtherWidget: TVFDWidgetClass;
+
+implementation
+
+uses
+ fpgfx,
+ vfddesigner,
+ gui_form,
+ gui_label,
+ gui_edit,
+ gui_button,
+ gui_listbox,
+ gui_memo,
+ gui_combobox,
+ gui_grid,
+ gui_checkbox,
+ gui_panel,
+ gui_tree,
+ gui_radiobutton,
+ gui_listview,
+ gui_trackbar,
+ gui_menu,
+ gui_progressbar,
+ gui_tab,
+ gui_popupcalendar,
+ gui_gauge,
+ vfdpropeditgrid;
+
+var
+ FVFDFormWidget: TVFDWidgetClass;
+ FVFDWidgets: TObjectList;
+
+function VFDFormWidget: TVFDWidgetClass;
+begin
+ Result := FVFDFormWidget;
+end;
+
+function VFDWidgetCount: integer;
+begin
+ Result := FVFDWidgets.Count;
+end;
+
+function VFDWidget(ind: integer): TVFDWidgetClass;
+begin
+ Result := TVFDWidgetClass(FVFDWidgets[ind]);
+end;
+
+procedure RegisterVFDWidget(awc: TVFDWidgetClass);
+begin
+ FVFDWidgets.Add(awc);
+end;
+
+{$I icons.inc}
+
+procedure LoadIcons;
+begin
+ fpgImages.AddMaskedBMP(
+ 'vfd.arrow', @stdimg_vfd_arrow,
+ sizeof(stdimg_vfd_arrow),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.label', @stdimg_vfd_label,
+ sizeof(stdimg_vfd_label),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.edit', @stdimg_vfd_edit,
+ sizeof(stdimg_vfd_edit),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.memo', @stdimg_vfd_memo,
+ sizeof(stdimg_vfd_memo),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.button', @stdimg_vfd_button,
+ sizeof(stdimg_vfd_button),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.checkbox', @stdimg_vfd_checkbox,
+ sizeof(stdimg_vfd_checkbox),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.listbox', @stdimg_vfd_listbox,
+ sizeof(stdimg_vfd_listbox),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.combobox', @stdimg_vfd_combobox,
+ sizeof(stdimg_vfd_combobox),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.panel', @stdimg_vfd_panel,
+ sizeof(stdimg_vfd_panel),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.other', @stdimg_vfd_other,
+ sizeof(stdimg_vfd_other),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.dbgrid', @stdimg_vfd_dbgrid,
+ sizeof(stdimg_vfd_dbgrid),
+ 15,0 );
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.progressbar', @stdimg_vfd_progressbar,
+ sizeof(stdimg_vfd_progressbar),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.trackbar', @stdimg_vfd_trackbar,
+ sizeof(stdimg_vfd_trackbar),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.gauge', @stdimg_vfd_gauge,
+ sizeof(stdimg_vfd_gauge),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.menubar', @stdimg_vfd_menubar,
+ sizeof(stdimg_vfd_menubar),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.listview', @stdimg_vfd_listview,
+ sizeof(stdimg_vfd_listview),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.stringgrid', @stdimg_vfd_stringgrid,
+ sizeof(stdimg_vfd_stringgrid),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.radiobutton', @stdimg_vfd_radiobutton,
+ sizeof(stdimg_vfd_radiobutton),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.pagecontrol', @stdimg_vfd_pagecontrol,
+ sizeof(stdimg_vfd_pagecontrol),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.treeview', @stdimg_vfd_treeview,
+ sizeof(stdimg_vfd_treeview),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.newform', @stdimg_vfd_newform,
+ sizeof(stdimg_vfd_newform),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.combodateedit', @stdimg_vfd_dateedit,
+ sizeof(stdimg_vfd_dateedit),
+ 0, 0);
+
+ fpgImages.AddMaskedBMP(
+ 'vfd.bevel', @stdimg_vfd_bevel,
+ sizeof(stdimg_vfd_bevel),
+ 0, 0);
+
+end;
+
+procedure AddWidgetPosProps(wgc: TVFDWidgetClass);
+begin
+ wgc.AddProperty('Left', TPropertyInteger, '');
+ wgc.AddProperty('Top', TPropertyInteger, '');
+ wgc.AddProperty('Width', TPropertyInteger, '');
+ wgc.AddProperty('Height', TPropertyInteger, '');
+end;
+
+procedure RegisterWidgets;
+var
+ wc: TVFDWidgetClass;
+begin
+ LoadIcons;
+
+ wc := TVFDWidgetClass.Create(TfpgForm);
+ wc.NameBase := 'frm';
+ wc.AddProperty('WindowTitle', TPropertyString, '');
+// wc.AddProperty('WindowPosition', TPropertyEnum, '');
+ FVFDFormWidget := wc;
+
+ // Label
+ wc := TVFDWidgetClass.Create(TfpgLabel);
+ wc.NameBase := 'lblName';
+ wc.AddProperty('Alignment', TPropertyEnum, 'Horizontal text alignment');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the label text');
+ wc.AddProperty('Layout', TPropertyEnum, 'Vertical text layout');
+ wc.AddProperty('Text', TPropertyString, 'Label text');
+ wc.AddProperty('WrapText', TPropertyBoolean, 'If True text will wrap when it doesn''t fit the width');
+ wc.WidgetIconName := 'vfd.label';
+ RegisterVFDWidget(wc);
+
+ // Edit
+ wc := TVFDWidgetClass.Create(TfpgEdit);
+ wc.NameBase := 'edtName';
+// wc.AddProperty('Color', TPropertyColor, 'Text color');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.AddProperty('Text', TPropertyString, 'Initial text');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.WidgetIconName := 'vfd.edit';
+ RegisterVFDWidget(wc);
+
+ // Memo
+ wc := TVFDWidgetClass.Create(TfpgMemo);
+ wc.NameBase := 'memName';
+ wc.AddProperty('Lines', TPropertyStringList, '');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.memo';
+ RegisterVFDWidget(wc);
+
+ // Button
+ wc := TVFDWidgetClass.Create(TfpgButton);
+ wc.NameBase := 'btnName';
+ wc.AddProperty('Text', TPropertyString, 'Initial text');
+ wc.AddProperty('AllowAllUp', TPropertyBoolean, '');
+ wc.AddProperty('Embedded', TPropertyBoolean, 'No focus rectangle will be drawn. eg: Toolbar buttons');
+ wc.AddProperty('Flat', TPropertyBoolean, 'Only draw button borders when mouse hovers over button');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('GroupIndex', TPropertyInteger, '');
+ wc.AddProperty('ImageLayout', TPropertyEnum, 'Which side of the button contains the image');
+ wc.AddProperty('ImageMargin', TPropertyInteger, 'Space between image and border, -1 centers image/text');
+ wc.AddProperty('ImageName', TPropertyString, '');
+ wc.AddProperty('ImageSpacing', TPropertyInteger, 'Space between image and text, -1 centers text');
+ wc.AddProperty('ModalResult', TPropertyInteger, '');
+ wc.AddProperty('ShowImage', TPropertyBoolean, 'Boolean value');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.button';
+ RegisterVFDWidget(wc);
+
+ // CheckBox
+ wc := TVFDWidgetClass.Create(TfpgCheckBox);
+ wc.NameBase := 'cbName';
+ wc.AddProperty('Checked', TPropertyBoolean, 'Boolean value');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.AddProperty('Text', TPropertyString, 'Initial text');
+ wc.WidgetIconName := 'vfd.checkbox';
+ RegisterVFDWidget(wc);
+
+ // RadioButton
+ wc := TVFDWidgetClass.Create(TfpgRadioButton);
+ wc.NameBase := 'rbName';
+ wc.AddProperty('Checked', TPropertyBoolean, 'Boolean value');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('GroupIndex', TPropertyInteger, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.AddProperty('Text', TPropertyString, 'Initial text');
+ wc.WidgetIconName := 'vfd.radiobutton';
+ RegisterVFDWidget(wc);
+
+ // ComboBox
+ wc := TVFDWidgetClass.Create(TfpgComboBox);
+ wc.NameBase := 'cbName';
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('Items', TPropertyStringList, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.combobox';
+ RegisterVFDWidget(wc);
+
+ // Calendar ComboBox
+ wc := TVFDWidgetClass.Create(TfpgCalendarCombo);
+ wc.NameBase := 'calName';
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.combodateedit';
+ RegisterVFDWidget(wc);
+
+ // ListBox
+ wc := TVFDWidgetClass.Create(TfpgListBox);
+ wc.NameBase := 'lstName';
+ wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
+ wc.AddProperty('HotTrack', TPropertyBoolean, '');
+ wc.AddProperty('Items', TPropertyStringList, '');
+ wc.AddProperty('PopupFrame', TPropertyBoolean, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.listbox';
+ RegisterVFDWidget(wc);
+
+ // StringGrid
+ wc := TVFDWidgetClass.Create(TfpgStringGrid);
+ wc.NameBase := 'grdName';
+ wc.AddProperty('Columns', TPropertyDBColumns, '');
+ wc.AddProperty('FontDesc', TPropertyFontDesc, '');
+ wc.AddProperty('HeaderFontDesc', TPropertyFontDesc, '');
+ wc.AddProperty('RowCount', TPropertyInteger, '');
+ wc.AddProperty('RowSelect', TPropertyBoolean, '');
+ wc.AddProperty('ShowHeader', TPropertyBoolean, '');
+ wc.AddProperty('ShowGrid', TPropertyBoolean, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.stringgrid';
+ RegisterVFDWidget(wc);
+
+ // Bevel
+ wc := TVFDWidgetClass.Create(TfpgBevel);
+ wc.NameBase := 'bvlName';
+ wc.AddProperty('BorderStyle', TPropertyEnum, 'Single or Double');
+ wc.AddProperty('Style', TPropertyEnum, 'Raised or Lower look');
+ wc.AddProperty('Shape', TPropertyEnum, 'Box, Frame, TopLine, Spacer etc..');
+ wc.WidgetIconName := 'vfd.bevel';
+ wc.Container := True;
+ RegisterVFDWidget(wc);
+
+ // Panel
+ wc := TVFDWidgetClass.Create(TfpgPanel);
+ wc.NameBase := 'pnlName';
+ wc.AddProperty('Alignment', TPropertyEnum, 'Text alignment');
+ wc.AddProperty('Layout', TPropertyEnum, 'Layout of the caption');
+ wc.AddProperty('LineSpace', TPropertyInteger, 'Line spacing between wrapped caption');
+ wc.AddProperty('Margin', TPropertyInteger, 'Margin of text');
+ wc.AddProperty('Style', TPropertyEnum, '');
+ wc.AddProperty('Text', TPropertyString, 'The panel caption');
+ wc.AddProperty('WrapText', TPropertyBoolean, 'Should the panel text be wrapped');
+ wc.WidgetIconName := 'vfd.panel';
+ wc.Container := True;
+ RegisterVFDWidget(wc);
+
+ // ProgressBar
+ wc := TVFDWidgetClass.Create(TfpgProgressBar);
+ wc.NameBase := 'pbName';
+ wc.AddProperty('Min', TPropertyInteger, '');
+ wc.AddProperty('Max', TPropertyInteger, '');
+ wc.AddProperty('Position', TPropertyInteger, '');
+ wc.AddProperty('ShowCaption', TPropertyBoolean, '');
+ wc.WidgetIconName := 'vfd.progressbar';
+ RegisterVFDWidget(wc);
+
+ // TrackBar
+ wc := TVFDWidgetClass.Create(TfpgTrackBar);
+ wc.NameBase := 'tbName';
+ wc.AddProperty('Max', TPropertyInteger, '');
+ wc.AddProperty('Min', TPropertyInteger, '');
+ wc.AddProperty('Orientation', TPropertyEnum, '');
+ wc.AddProperty('Position', TPropertyInteger, '');
+ wc.AddProperty('ShowPosition', TPropertyBoolean, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.trackbar';
+ RegisterVFDWidget(wc);
+
+ // ListView
+ wc := TVFDWidgetClass.Create(TfpgListView);
+ wc.NameBase := 'lvName';
+ wc.AddProperty('MultiSelect', TPropertyBoolean, '');
+ wc.AddProperty('ShowHeaders', TPropertyBoolean, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.WidgetIconName := 'vfd.listview';
+ RegisterVFDWidget(wc);
+
+ // Treeview
+ wc := TVFDWidgetClass.Create(TfpgTreeView);
+ wc.NameBase := 'tvName';
+ wc.AddProperty('DefaultColumnWidth',TPropertyInteger, '');
+ wc.AddProperty('FontDesc',TPropertyFontDesc, '');
+ wc.AddProperty('ScrollWheelDelta', TPropertyInteger, 'Scroll amount with mouse wheel');
+ wc.AddProperty('ShowColumns',TPropertyBoolean, 'Boolean value');
+ wc.AddProperty('ShowImages',TPropertyBoolean, 'Boolean value');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.AddProperty('TreeLineStyle', TPropertyEnum, '');
+ wc.WidgetIconName := 'vfd.treeview';
+ RegisterVFDWidget(wc);
+
+ // PageControl
+ wc := TVFDWidgetClass.Create(TfpgPageControl);
+ wc.NameBase := 'pcName';
+ wc.AddProperty('FixedTabWidth', TPropertyInteger, '');
+ wc.AddProperty('SortPages', TPropertyBoolean, 'Boolean value');
+ wc.AddProperty('Style', TPropertyEnum, '');
+ wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
+ wc.AddProperty('TabPosition', TPropertyEnum, '');
+ wc.WidgetIconName := 'vfd.pagecontrol';
+ RegisterVFDWidget(wc);
+
+ // Gauge
+ wc := TVFDWidgetClass.Create(TfpgGauge);
+ wc.NameBase := 'gauName';
+ wc.AddProperty('Kind', TPropertyEnum, '');
+ wc.AddProperty('MinValue', TPropertyInteger, '');
+ wc.AddProperty('MaxValue', TPropertyInteger, '');
+ wc.AddProperty('Progress', TPropertyInteger, '');
+ wc.AddProperty('ShowText', TPropertyBoolean, 'Boolean value');
+ wc.WidgetIconName := 'vfd.gauge';
+ RegisterVFDWidget(wc);
+
+
+ // Other - do not delete!!! this should be the last...
+ wc := TVFDWidgetClass.Create(TOtherWidget);
+ wc.NameBase := 'Custom';
+ wc.WidgetIconName := 'vfd.other';
+ wc.Container := True;
+ RegisterVFDWidget(wc);
+ VFDOtherWidget := wc;
+end;
+
+
+initialization
+ FVFDWidgets := TObjectList.Create;
+
+finalization
+ FVFDWidgets.Free;
+ FVFDFormWidget.Free;
+
+end.
+