TAB Control

HMG Tutor 17

Getting Organized (TAB Control)

A TAB control lets organize controls and save form space, grouping the controls in folders.

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 250 ;
   TITLE 'Tutor 17 Tab Test' ;
   MAIN
   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change Tab Value' ACTION  Win_1.Tab_1.Value := 2
         ITEM 'Retrieve Tab Value' ACTION  MsgInfo ( Str(Win_1.Tab_1.Value))
      END POPUP
   END MENU
   DEFINE TAB Tab_1 ;
      AT 10,10 ;
      WIDTH 350 ;
      HEIGHT 150
      PAGE 'Page 1'
         @ 50,50 LABEL Label_1 VALUE 'This Is The Page 1'
      END PAGE
      PAGE 'Page 2'
         @ 50,50 LABEL Label_2 VALUE 'This Is The Page 2'
      END PAGE
   END TAB
END WINDOW
ACTIVATE WINDOW Win_1
Return

Spinning Around

HMG Tutor 16

Spinning Around

An alternate way to get numeric data is the SPINNER control. It consist of a text box with two arrows that allows to change control’s value using the mouse.

@ 10,10 SPINNER Spinner_1 ;
        RANGE 0,10 ;
        VALUE 5 ;
        WIDTH 100

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 16 Spinner Test' ;
   MAIN

   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change Spinner Value' ACTION  ;
              Win_1.Spinner_1.Value := 8
         ITEM 'Retrieve Spinner Value' ACTION ;
              MsgInfo ( Str(Win_1.Spinner_1.Value))
      END POPUP
   END MENU

   @ 10,10 SPINNER Spinner_1 ;
           RANGE 0,10 ;
           VALUE 5 ;
           WIDTH 100
END WINDOW
ACTIVATE WINDOW Win_1
Return

Showing Progress

HMG Tutor 15

Showing Progress

The progressbar control allows to show the completion status of an operation.

@ 10,10 PROGRESSBAR Progress_1 ;
        RANGE 0 , 65535

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 15 Progressbar Test' ;
   MAIN
   DEFINE MAIN MENU
     POPUP "First Popup"
        ITEM 'ProgressBar Test' ACTION  DoTest()
     END POPUP
   END MENU
   @ 10,10 PROGRESSBAR Progress_1 ;
           RANGE 0 , 65535
END WINDOW
ACTIVATE WINDOW Win_1
Return

Procedure DoTest()
   Local i
   For i = 0 To 65535 Step 25
      Win_1.Progress_1.Value := i
   Next i
Return

IMAGE Control

HMG Tutor 14

Displaying Images (The IMAGE Control)

The IMAGE control allows to show image files in your program.

@ 10,10 IMAGE Image_1 ;
        PICTURE 'Demo.Bmp' ;
        WIDTH 90 ;
        HEIGHT 90

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 14 Image Test' ;
   MAIN
   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change Image Content' ACTION ;
               Win_1.Image_1.Picture := 'Open.Bmp'
         ITEM 'Retrieve Image Content' ACTION ;
               MsgInfo ( Win_1.Image_1.Picture)
      END POPUP
  END MENU
  @ 10,10 IMAGE Image_1 ;
          PICTURE 'Demo.Bmp' ;
          WIDTH 90 ;
          HEIGHT 90
END WINDOW
ACTIVATE WINDOW Win_1
Return

EditBox Control

HMG Tutor 13

Getting Large Text (The EditBox Control)

 

The EditBox control allows to handle large (multiline) text data.

@ 10,10 EDITBOX Edit_1 ;
        WIDTH 300 ;
        HEIGHT 150

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 300 ;
   TITLE 'Tutor 13 EditBox Test' ;
   MAIN
   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change EditBox Content' ACTION  ;
               Win_1.Edit_1.Value := 'New EditBox Value'
         ITEM 'Retrieve EditBox Content' ACTION  ;
               MsgInfo ( Win_1.Edit_1.Value)
      END POPUP
   END MENU
   @ 10,10 EDITBOX Edit_1 ;
           WIDTH 300 ;
           HEIGHT 150
END WINDOW
ACTIVATE WINDOW Win_1
Return

DatePicker Control

HMG Tutor 12

Getting Dates (The DatePicker Control)

The easiest way to get dates from user is the datepicker control.

@ 10,10 DATEPICKER Date_1

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 12 - DatePicker Test' ;
   MAIN
   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change DatePicker Value' ACTION ; 
            Win_1.date_1.Value := Date()
         ITEM 'Retrieve DatePicker Value' ACTION  ;
            MsgInfo ( dtoc(Win_1.Date_1.Value))
      END POPUP
   END MENU
   @ 10,10 DATEPICKER Date_1
END WINDOW
ACTIVATE WINDOW Win_1
Return

CheckButton

HMG Tutor 11

Button + CheckBox = CheckButton

The CheckButton control, acts like a checkbox, but looks like a button. Like buttons, It comes in two flavors: Text and Graphical.

@ 10,10 CHECKBUTTON CheckButton_1 ;
        CAPTION 'CheckButton' ;
        VALUE .F.

@ 50,10 CHECKBUTTON CheckButton_2 ;
        PICTURE 'Open.Bmp' ;
        WIDTH 27 ;
        HEIGHT 27 ;
        VALUE .F. ;
        TOOLTIP 'Graphical CheckButton'

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 11 - CheckButton Test' ;
   MAIN
   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change Text CheckButton Value' ACTION ;
               Win_1.CheckButton_1.Value := .T.
         ITEM 'Retrieve Text CheckButton Value' ACTION ;
               MsgInfo ( if(Win_1.CheckButton_1.Value,'.T.','.F.'))
         SEPARATOR
         ITEM 'Change Picture CheckButton Value' ACTION ;
               Win_1.CheckButton_2.Value := .T.
         ITEM 'Retrieve Picture CheckButton Value' ACTION ;
               MsgInfo ( if(Win_1.CheckButton_2.Value,'.T.','.F.'))
      END POPUP
   END MENU
   @ 10,10 CHECKBUTTON CheckButton_1 ;
           CAPTION 'CheckButton' ;
           VALUE .F.
   @ 50,10 CHECKBUTTON CheckButton_2 ;
           PICTURE 'Open.Bmp' ;
           WIDTH 27 ;
           HEIGHT 27 ;
           VALUE .F. ;
           TOOLTIP 'Graphical CheckButton'
END WINDOW
ACTIVATE WINDOW Win_1
Return

Picture Buttons

HMG Tutor 10

Being More Graphical (Picture Buttons)

Instead a text caption you can use a picture.

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 10 - Picture Button Test' ;
   MAIN
   @ 10,10 BUTTON PictureButton_1 ;
      PICTURE 'button.bmp' ;
      ACTION MsgInfo('Picture Button Clicked!!') ;
      WIDTH 27 ;
      HEIGHT 27 ;
      TOOLTIP 'Picture Button Tooltip'
END WINDOW
ACTIVATE WINDOW Win_1
Return

The optional tooltip clause, causes that a small window with an explanatory text be displayed when the mouse pointer stays over the control for a few seconds. You can use this clause with most HMG controls.

Standard Buttons

HMG Tutor 9

Pushing Actions (Standard Buttons)

Another way for let the users to take an action (besides menus) are buttons.

@ 10,10 BUTTON Button_1 CAPTION 'Click Here!' ACTION MsgInfo('Button Clicked!')

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 09 - Button Test' ;
   MAIN
   @ 10,10 BUTTON Button_1 ;
     CAPTION 'Click Here!' ;
     ACTION MsgInfo('Button Clicked!')
END WINDOW
ACTIVATE WINDOW Win_1
Return

More Choices II

HMG Tutor 8

More Choices II

Another alternative to get an user’s choice is the COMBOBOX.

@ 10, 10 COMBOBOX Combo_1 ITEMS {'Option 1','Option 2','Option 3'}

Using a ComboBox, is similar to ListBox.

#include "hmg.ch"
Function Main
DEFINE WINDOW Win_1 ;
   AT 0,0 ;
   WIDTH 400 ;
   HEIGHT 200 ;
   TITLE 'Tutor 08 - ComboBox Test' ;
   MAIN
   DEFINE MAIN MENU
      POPUP "First Popup"
         ITEM 'Change ComboBox Value' ACTION ;
               Win_1.Combo_1.Value := 2
         ITEM 'Retrieve ComboBox Value' ACTION ;
             MsgInfo ( Str(Win_1.Combo_1.Value))
         SEPARATOR
         ITEM 'Add Combo Item' ACTION ;
             Win_1.Combo_1.AddItem ('New List Item')
         ITEM 'Remove Combo Item' ACTION ;
             Win_1.Combo_1.DeleteItem (2)
         ITEM 'Change Combo Item' ACTION ;
             Win_1.Combo_1.Item (1) := 'New Item Text'
         ITEM 'Get Combo Item Count' ACTION ;
             MsgInfo (Str(Win_1.Combo_1.ItemCount))
      END POPUP
   END MENU
   @ 10, 10 COMBOBOX Combo_1 ITEMS {'Option 1','Option 2','Option 3'}
END WINDOW
ACTIVATE WINDOW Win_1
Return