diff options
Diffstat (limited to 'uidesigner')
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 Binary files differnew file mode 100644 index 00000000..7e075c10 --- /dev/null +++ b/uidesigner/images/dateedit.bmp diff --git a/uidesigner/images/gauge.bmp b/uidesigner/images/gauge.bmp Binary files differnew file mode 100644 index 00000000..3de08d15 --- /dev/null +++ b/uidesigner/images/gauge.bmp diff --git a/uidesigner/images/listview.bmp b/uidesigner/images/listview.bmp Binary files differnew file mode 100644 index 00000000..740de6d8 --- /dev/null +++ b/uidesigner/images/listview.bmp diff --git a/uidesigner/images/menubar.bmp b/uidesigner/images/menubar.bmp Binary files differnew file mode 100644 index 00000000..011e7048 --- /dev/null +++ b/uidesigner/images/menubar.bmp diff --git a/uidesigner/images/newform_16.bmp b/uidesigner/images/newform_16.bmp Binary files differnew file mode 100644 index 00000000..674ccabc --- /dev/null +++ b/uidesigner/images/newform_16.bmp diff --git a/uidesigner/images/pagecontrol.bmp b/uidesigner/images/pagecontrol.bmp Binary files differnew file mode 100644 index 00000000..355ffacf --- /dev/null +++ b/uidesigner/images/pagecontrol.bmp diff --git a/uidesigner/images/progressbar.bmp b/uidesigner/images/progressbar.bmp Binary files differnew file mode 100644 index 00000000..ec860f18 --- /dev/null +++ b/uidesigner/images/progressbar.bmp diff --git a/uidesigner/images/radiobutton.bmp b/uidesigner/images/radiobutton.bmp Binary files differnew file mode 100644 index 00000000..89e8cfe7 --- /dev/null +++ b/uidesigner/images/radiobutton.bmp diff --git a/uidesigner/images/shape_align_bottom.bmp b/uidesigner/images/shape_align_bottom.bmp Binary files differnew file mode 100644 index 00000000..d9495933 --- /dev/null +++ b/uidesigner/images/shape_align_bottom.bmp diff --git a/uidesigner/images/shape_align_left.bmp b/uidesigner/images/shape_align_left.bmp Binary files differnew file mode 100644 index 00000000..c9c3ab38 --- /dev/null +++ b/uidesigner/images/shape_align_left.bmp diff --git a/uidesigner/images/shape_align_right.bmp b/uidesigner/images/shape_align_right.bmp Binary files differnew file mode 100644 index 00000000..d26d4ad2 --- /dev/null +++ b/uidesigner/images/shape_align_right.bmp diff --git a/uidesigner/images/shape_align_top.bmp b/uidesigner/images/shape_align_top.bmp Binary files differnew file mode 100644 index 00000000..9d26f3d8 --- /dev/null +++ b/uidesigner/images/shape_align_top.bmp diff --git a/uidesigner/images/stringgrid.bmp b/uidesigner/images/stringgrid.bmp Binary files differnew file mode 100644 index 00000000..1930f4a5 --- /dev/null +++ b/uidesigner/images/stringgrid.bmp diff --git a/uidesigner/images/trackbar.bmp b/uidesigner/images/trackbar.bmp Binary files differnew file mode 100644 index 00000000..7bca6e56 --- /dev/null +++ b/uidesigner/images/trackbar.bmp diff --git a/uidesigner/images/treeview.bmp b/uidesigner/images/treeview.bmp Binary files differnew file mode 100644 index 00000000..ff480a8f --- /dev/null +++ b/uidesigner/images/treeview.bmp 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. + |