Announcement

Collapse
No announcement yet.

DDT Based Dialog Designer - only $14.95 (on sale)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • DDT Based Dialog Designer - only $14.95 (on sale)

    From July 28 to August 3, 2008 my EZGUI Utility Dialog Designer 4.01 will be on sale.

    This is a DDT based Visual Designer, which generates 100% source code apps (uses Library code in an include file).

    The Designer generated code uses a unique Event based coding style. Rather then use control callbacks and API notification constants, many common messages are converted to EZGUI style Events.

    This makes coding easier.

    The regular price for this designer is $29.

    Now get it for only $14.95 !

    To order easily, you can click this link to go directly to the order page:

    http://cwsof.com/order.htm

    For this price, even if you already own another Visual Designer, you can afford to purchase this one so you can have an alternate way for building PowerBasic apps.

    Where can you buy another Visual Designer for only $14.95 ?

    For this price, I am almost giving it away.

    The Utility Designer is for building those quick utility applications where you need to create it fast and where you need a small executable. The designer does not support the more advanced controls directly (ie. common controls), but you can add them via the Custom Control object. You can even use third party custom controls like Egrid or SIGrid with it. Imagine working with Egrid visually in a Designer and for only $14.95.

    Any custom control in DLL form, which can be created via the CreateWindow API (a real window class) can be used with this Designer.

    Here are some screen shots:








    Chris Boss
    Computer Workshop
    Developer of "EZGUI"
    http://cwsof.com
    http://twitter.com/EZGUIProGuy

  • #2
    Don't let the low price fool you

    While the Designer is called a "Utility" Designer, don't let this fool you.
    Also the low price is not a reflection of the Designers power either.

    This is a very powerful Designer which works at a project level (many Forms). You can build very large and complex applications with it.

    The reason I call it a Utility Designer, is because there is a high end Designer in development which is similiar to this one, but will support many high end features (including the common controls), such as Layers, subclassing, Toolbar builder, etc. I want to differentiate this Designer with the later one which will likely be called the EZGUI Dialog Designer Studio (or Pro).

    This Designer though has many powerful features which makes it useful, even for large scale development. It makes working with multiple Forms easy. You just click the form name from the project list and it automatically appears. You can edit the tab order of controls, edit form menus, select control/form colors and fonts. The Designer has a snap to grid.

    Another nice feature is the Form templates. You can save any form as a template and the form will appear in the "New Form" dialog so you can select it for any new projects.

    The Code Generator supports plugins (DLLs). You can write your own plugins using PB which can parse source code generated by the Designer before it is passed to your code editor.

    Another nice feature is that you are not stuck with a builtin code editor. You can use your favorite code editor (ie. JellyFish) with the Designer. The designer regenerates the entire app and passes it to your code editor. It uses a Smart Parser which handles making GUI modifications to your source code and it removes unneeded subroutines.

    The most powerful feature is the Custom control object. It can load custom controls (in DLL form) like EGrid, SIGrid or GDImage into the Designer so they can be worked with visually. You get to actually see what the controls will look like.

    The Designer also supports the PB Graphic control.

    If you really need the common controls (which are not directly supported), they can be added via the custom control object. So you can build more than just utility apps with this designer. Also the library event code supports the WM_NOTIFY message so it is easier to handle the common control events. You still have to write WM_NOTIFY processing code, but it is passed to the controls event subroutine and the EZ_GetNotify command makes it easy to test the notification code.

    Lastly, this is a real DDT based designer, so you can use your favorite DDT commands just like you normally do.

    For this price, everyone can add this designer to their toolbox of PB addons.

    One more thing. The generated code and library code is highly optimized so you can compile the smallest application possible with the designer. The library code uses conditional compiler directives to remove unwanted library code (by selecting properties in the designer) so the final compiled EXE is as small as possible. If you don't need colors, fonts, etc. then the supporting library code can be left out of the compiled app.

    This is a high quality designer, so don't be fooled by the price.
    Chris Boss
    Computer Workshop
    Developer of "EZGUI"
    http://cwsof.com
    http://twitter.com/EZGUIProGuy

    Comment


    • #3
      This is not part of your EZGUI product, correct?
      How long is an idea? Write it down.

      Comment


      • #4
        Mike,

        This Designer is very similiar to the Visual Designer found in EZGUI 4.0 Pro (it is itself an EZGUI application). It reads the same form files, has many of the same features and works basically the same as far as the core features.

        The difference is that the generated code is not EZGUI code. It is DDT Based code. Actually most of the DDT code is in an include file which has a library of routines plus an event engine.

        It is pure source code.

        No runtimes are used.

        This means the applications you build with it, can use any of the DDT command set, since it is a true DDT application. Also the compiled EXE has no runtimes.

        The coding style though is similiar to EZGUI, because of the event engine.

        This is how it works:

        This is an example of a generated Dialog Procedure for a Form (DDT Based Dialog):

        Code:
        CALLBACK FUNCTION FORM3_DlgProc
             SELECT CASE CBMSG
                  CASE %WM_DESTROY
                  CASE ELSE
             END SELECT
             ' Pass Messages to EZGUI Default Event Generator
             ' make sure CODEPTR parameter points to _ParseEvents routine for this form
             FUNCTION=EZLIB_DLGEvents(CBHNDL, CBMSG, CBWPARAM, CBLPARAM, CODEPTR(EZ_FORM3_ParseEvents))
        END FUNCTION
        Notice there is little code in the Dialog Procedure. The key line of code is this:

        Code:
        FUNCTION=EZLIB_DLGEvents(CBHNDL, CBMSG, CBWPARAM, CBLPARAM, CODEPTR(EZ_FORM3_ParseEvents))
        This routine (EZLIB_DLGEvents) is in the library code in the include file. It is an event engine, which converts common API dialog messages into EZGUI style events.

        The following messages are processed by this Designers event engine:

        %WM_CTLCOLOREDIT TO %WM_CTLCOLORSTATIC
        %WM_INITDIALOG
        %WM_COMMAND
        %WM_SYSCOMMAND
        %WM_ACTIVATE
        %WM_VSCROLL
        %WM_HSCROLL
        %WM_NOTIFY
        %WM_DESTROY

        The following EZGUI style events are generated by this event engine:

        %EZ_Close (Form Closes)
        %EZ_Click (Click event)
        %EZ_DClick (Double Click event)
        %EZ_Focus (Get Focus event)
        %EZ_NoFocus (Lose Focus event)
        %EZ_Disable (static Control is disabled)
        %EZ_Change (Change event)
        %EZ_Command (unknown WM_COMMAND)
        %EZ_Notify (W_NOTIFY message event)
        %EZ_Loading (Loading event)
        %EZ_Started (Form Started event)
        %EZ_Loaded (Loaded event)
        %EZ_Enable (Static control enabled)
        %EZ_FreeNow (WM_DESTROY message so free stuff now)
        %EZ_Maximize (User Maximizing Form)
        %EZ_Minimize (User Minimizing Form)
        %EZ_Restore (User Restoring Form)

        For each Form the designer generates five subroutines:

        These routines can not be edited and are controlled by the Smart Parser in Designer:

        MyFormName_Display (creates Dialog or Form)
        MyFormName_Design (designs controls for Form)
        MyFormName_PareEvents (Event event forwards events back to this routine)

        Thse routines can be edited to add your own code:

        MyFormName_Events (Event routine for the Form itself)
        MyFormName_DLGProc (actual Dialog Procedure)


        Where actual EZGUI style events are generated you don't need to write any dialog procedure code. You simply write code in the forms event routine. If you need (or want) to write any actual Dialog procedure code, there is a dialog procedure so you can add code there.

        Here is an example of a Forms event routine:

        Code:
        SUB FORM3_Events(BYVAL hDlg&, BYVAL CID&, CMsg&, CVal&, Cancel&)
             SELECT CASE CID&
                  CASE %EZ_Window
                       SELECT CASE CMsg&
                            CASE %EZ_Loaded
                            CASE %EZ_Started
                            CASE %EZ_Loading
                            CASE %EZ_Close
                            CASE %EZ_FreeNow
                                 ' Form FreeRes routine can be called here!
                            CASE %EZ_Maximize
                            CASE %EZ_Minimize
                            CASE %EZ_Restore
                            CASE ELSE
                       END SELECT
                  CASE ELSE
             END SELECT
        END SUB
        The controls will have their own event routines generated by the designer. You write code in those routines for each individual control. If you create a control via code (rather than through designer generated code), it won't have its own event routine, so the Forms event routine passes the control ID for any unknown controls so you can process them there.

        Here is an example of some control event routines:

        Code:
        SUB FORM3_BUTTON1_Events( MyID&, CMsg&, CVal&, Cancel&)
             SELECT CASE CMsg&
                  CASE %EZ_Click
                  CASE ELSE
             END SELECT
        END SUB
        '
        SUB FORM3_BUTTON2_Events( MyID&, CMsg&, CVal&, Cancel&)
             SELECT CASE CMsg&
                  CASE %EZ_Click
                  CASE ELSE
             END SELECT
        END SUB
        '
        SUB FORM3_COMBOBOX1_Events( MyID&, CMsg&, CVal&, Cancel&)
             SELECT CASE CMsg&
                  CASE %EZ_Change
                  CASE ELSE
             END SELECT
        END SUB
        Now the beauty of the event engine is that rather than reinvent the wheel all the time using API code, rather than write dialog procedure code you can expand the event engine to add your own events for any window messages you want. The event engine provides the ability to add a event hook so you can process other messages and generate your own events.

        Here is the template for the event hook function:

        Code:
        ' ---------------------
        ' User events template
        ' ---------------------
        '
        ' This code is public domain and can be modified any way you choose and distributed to third parties.
        ' The Functions name and parameters though must not be changed!
        ' Define your own Events here!
        ' User defined Events should start with the value of %EZ_User so they don't conflict with existing events.
        %MY_LButtonDown     =    %EZ_USER + 1
        FUNCTION EZLIB_UserEvents(BYVAL hDlg AS LONG, BYVAL Msg AS LONG, BYVAL wParam AS LONG, BYVAL lParam AS LONG, BYVAL EventAddress AS DWORD, RV AS LONG) AS LONG
             LOCAL CVal&, Cancel&
             ' if function returns non-zero then no more event processing is done by EZ Library code for this message
             ' RV is the return value for to the Dialog procedure. Set to non-zero to prevent default processing.
             SELECT CASE Msg     ' Window messages
                  CASE %WM_LBUTTONDOWN
                       CVal&=lParam   ' pass mouse position in CVal&
                       EZLIB_SendEvent hDlg, %EZ_Window, %MY_LButtonDown, CVal&, Cancel&, EventAddress
                       RV&=0
                       FUNCTION=1
                  CASE ELSE
             END SELECT
        END FUNCTION
        It is suggested to prefix your own user events with something other than %EZ_ to differentiate them from the predefined events.

        Notice the EZLIB_SendEvent call. This is in the library code and is used to forward events to the controls event subroutines.



        This designer generates apps that require no runtimes.
        The code is optimized to produce as small as possible applications as well.
        Last edited by Chris Boss; 31 Jul 2008, 10:55 AM.
        Chris Boss
        Computer Workshop
        Developer of "EZGUI"
        http://cwsof.com
        http://twitter.com/EZGUIProGuy

        Comment


        • #5
          Thank you and ordered!
          How long is an idea? Write it down.

          Comment


          • #6
            Sale is now over.

            Thanks to all who ordered.
            Chris Boss
            Computer Workshop
            Developer of "EZGUI"
            http://cwsof.com
            http://twitter.com/EZGUIProGuy

            Comment

            Working...
            X