Displaying Dynamic Text Using OpenInsight's MSG Function (Functions/Subroutines/Programs)

We know that OpenInsights flexible MSG function allows you construct messages dynamically.  One of its most useful features is available to the developer by using a Gas Gauge or GC type message.  The Gas Gauge type message can be constructed as outlined in the MSG_EQUATES record in INSERTS.  A message created using the  GC  parameter will display a gas gauge, or progress bar, as part of the message.

 

Parameters are passed to the message and the ticks on the progress bar are updated as processing occurs.  Coding it is a fairly straight forward affair as outlined in the MSG_EQUATES record (see example below).

 

* to display a gauge (percent bar),use the "G" type; sub-types are C (show

* cancel button) and Y (yield on each cycle):

          Declarefunction MSG

          Declaresubroutine MSG

          $Insert INSERTS, MSG_Equates

 

   Def = ""

   Def<MCAPTION$> = "ProcessingOrders…"

    Def<MTYPE$   > = "GC"

   Def<MEXTENT$ > = OrderCnt

   MsgUp = Msg(@window, Def)

   for Order = 1 to OrderCnt

        gosub ProcessOrder

  *   update the gauge and check if cancel was pressed

       while Msg(@window, MsgUp, Order, MSGINSTUPDATE$)

   next Order

   Msg(@window,MsgUp)        ;* take down the gauge

 

Recently,we needed to display a message showing the percentage of records processed in addition to the standard gas gauge progress bar.  Displaying the message and bringing it back down does not offer satisfactory results because of the annoying screen flicker associated with this method.

 

Amore elegant approach to use is to manipulate the text property of MSG s  ST_TEXT control.  By loading the percentage variable along with its accompanying text into a second variable and then setting the control s text property to this  second variable,  we can update the gas gauge message without the screen flashing every time we raise and lower the message.

 

The properties of the available MSG controls can be viewed by selecting  Inspect Properties  from the  Variables  menu in the OpenInsight Debugger.  Select  MSG  from the  Window Name  combo box.  The list of available controls with be displayed in the  Control Name  combo box.  The  ST_TEXT control is the one that contains the text property displayed on the message.  A list of its properties is available from the  Property  combo box. This particular control and this property continue to be available even as multiple instances of standard messages are being displayed.   These other messages can be called within the process that is updating the gas gauge message.  OI will keep track of them for you while you manipulate your gas gauge message.  Types of messages tested while running the process shown below included timed messages (T1), standard application type (A) messages, and processing messages(UB and DB).  These all functioned as specified.  The gas gauge continued to update as records were being processed.

 

Below is an example of the code that displays the gas gauge message along with a percentage of the records processed.

            Declarefunction MSG, Set_Property

            Declaresubroutine MSG

            $Insert INSERTS, MSG_Equates

 

   Def =  ""

   Def<MCAPTION$>= "Generating New Invoices"

   Def<MTYPE$   > = "GC"

   Def<MEXTENT$> = @reccount

   YOURTEXT = '% of theNew Invoices Completed'

  Def<MTEXT$> = YOUR TEXT

  Def<MTEXTWIDTH$> = 200

   MsgUp= Msg(@window,Def)

   totrecs = @reccount

   cnt= 0

   Loop

        Readnext @ID Else EOF = 1

   Until EOF

        Read @Record from invoice_file, @ID Then              

             cnt += 1                          ;*increment  counter for gas gauge

             recs = int(totrecs/20)

             If Mod(cnt,recs) = 0 Then

            * so forevery 20 records

                 pct= INT((cnt/totrecs) * 100)

                 If pct > 100 then pct = 100

                YOURVAR = pct  : YOURTEXT

             End

             Gosub Process_Invoice

              X = SET_PROPERTY('MSG.ST_TEXT','TEXT',YOUR VAR)  

         End Else

               Msg('Unable to read %1%',,,@ID)

         End

   while Msg(@window, MsgUp, CNT,MSGINSTUPDATE$, '')

   Nextcrs:Repeat

   Msg(@window, MsgUp)         ;* take down the gauge                

   Return

 

By taking advantage of OpenInsight s flexibility and adding your own creativity, Windows-based rapid application development is no longer what we aspire to  it s here, now, and available to you, the OI developer.

 

  • kb/kb_articles/kb0225.txt
  • Last modified: 2024/01/30 13:36
  • by 127.0.0.1