HMG Notes
Page Under Construction
- Create New Project
- Create Menu
- Create ToolBar
- Add a Header File (.ch)
- Add a New Module (.prg)
- Embed Image Into .Exe
- Embed Icon Into .Exe
Create New Project
1. Create a directory for new app. Ex: C:\app\hmg\dev\MyApp 2. Run the HMG IDE and select: File -> New Project 3. Enter path for new project file and press Save. Ex: C:\app\hmg\dev\MyApp\MyApp.hbp A new base app framework is created. 4. Press the Run button to create the .exe file ensuring everything is OK.
Create Menu
1. From the Project Browser - Forms Tab, open the Main.fmg window.
2. Select the Main Menu Builder button.
3. To create a parent (File) menu.
a. Caption: File
b. Action: <leave blank>
c. name: mnuFile
4. Add submenu item selecting Next.
a. Caption: About
b. Action: MsgInfo('My applciation 1.0','About')
c. Name: itmAbout
d. Use left arrow making the item a child of the parent menu.
5. Run\test your application seeing the new menu.
6. Repeat steps as required.
For an Exit item action you can use: Main.Release
Example main.prg
#include "common.ch"
#include <error.ch>
#include <hmg.ch>
#require "rddsql"
REQUEST SDDODBC, SQLMIX
Function Main
// PUBLIC Vars
PUBLIC gcCfgFile, gaRows, gaSystems
PUBLIC gcSystems, gcDriver, gcSID, gcPort, gcUsername, gcLicense, gcSystem_Schema
PUBLIC gcConnStr, ghConn, gcSQL
// Init Main Window
Load Window Main
Main.Center
Main.Activate
Return
PROCEDURE winMain_onInit()
local i
Set(_SET_DATEFORMAT, "yyyy-mm-dd")
rddSetDefault("SQLMIX")
// Init Cfg\Global Vars
gcCfgFile := hb_DirBase() + AppBaseName() + ".ini"
gcSystems := ""
gcDriver := ""
gcSID := ""
gcPort := ""
gcUsername := ""
gcLicense := ""
gcSystem_Schema := ""
// Init Global\Public Vars
INI_init(gcCfgFile)
gaSystems := hb_atokens(gcSystems, ",")
// Fill LBX
Main.lbxDatabases.DeleteAllItems
for i := 1 to Len(gaSystems)
DoMethod ( "Main", "lbxDatabases", 'AddItem', gaSystems[i] )
next
RETURN Nil
PROCEDURE winMain_onRelease()
dbCloseAll()
RETURN Nil
Create ToolBar
1. From the Project Browser - Forms Tab, open the Main.fmg window.
2. Select the ToolBar button.
3. Select Properties button and provide main tool bar info:
a. TlBar Name: tbMain
b. Button Width: 35
c. Button Height: 35
d. Select desired attributes: Flat, Border ...
4. Enter Button Properties
Name: btnTest
Caption: Test
Picture: <image file name> Ex: test.png
Action: MsgInfo('Testing...','Test')
5. Run\test your application seeing the new ToolBar.
6. Repeat steps as required.
Add a Header File (.ch)
1. From the Project Menu: New Include 2. Enter Name: (Ex: common) 3. Enter header file definitions as needed. Example below:
#DEFINE RDD_CONNECT 1001 #DEFINE RDD_DISCONNECT 1002
Add a New Module (.prg)
1. From the Project Menu: New Module 2. Enter Name: (Ex: common) 3. Enter program file (Ex: common.prg) to associate it with your main.prg. Example below:
#include "common.ch"
#include <error.ch>
#include <hmg.ch>
#require "rddsql"
FUNCTION About(cAppinfo)
MsgInfo(cAppinfo,"About")
RETURN
FUNCTION AppBaseName()
local cGetProgramFileName, nPosOfDot, cAppName
cGetProgramFileName := TOKEN( GetProgramFileName(),"\" )
nPosOfDot := at('.',cGetProgramFileName)
cAppName := SubStr( cGetProgramFileName, 1, nPosOfDot -1 )
RETURN cAppName
FUNCTION CfgValue(cFile,cSection,cEntry,cDefault)
local cCfgValue
IF file(cFilePath)
BEGIN INI FILE (cFilePath)
GET cCfgValue SECTION cSection ENTRY cEntry
END INI
ELSE
cCfgValue := cDefault
ENDIF
RETURN cCfgValue
FUNCTION Darkmatter_get(cDarkStringIn)
LOCAL cClearString
cClearString := HB_Base64Decode(cDarkStringIn,1)
RETURN cClearString
FUNCTION Darkmatter_set(cClearStringIn)
LOCAL cDarkString
cDarkString := HB_StrFormat(HB_Base64Encode(cClearStringIn,1))
RETURN cDarkString
FUNCTION INI_init(cFilePath)
IF .NOT. file(cFilePath)
INI_default(cFilePath)
ENDIF
// getValues
BEGIN INI FILE (cFilePath)
GET gcSystems SECTION "Oracle" ENTRY "Systems"
GET gcDriver SECTION "Oracle" ENTRY "Driver"
GET gcSID SECTION "Oracle" ENTRY "SID"
GET gcPort SECTION "Oracle" ENTRY "Port"
GET gcUsername SECTION "Oracle" ENTRY "Username"
GET gcLicense SECTION "Oracle" ENTRY "License"
GET gcSystem_Schema SECTION "Oracle" ENTRY "System_Schema"
END INI
gcLicense := Darkmatter_get(gcLicense)
gaSystems := hb_atokens(gcSystems, ",")
RETURN Nil
FUNCTION INI_default(cFilePath)
BEGIN INI FILE (cFilePath)
SET SECTION "Oracle" ENTRY "Systems" TO "localhost"
SET SECTION "Oracle" ENTRY "Driver" TO "Oracle in OraDB12Home1"
SET SECTION "Oracle" ENTRY "SID" TO "DB01"
SET SECTION "Oracle" ENTRY "Port" TO "1521"
SET SECTION "Oracle" ENTRY "Username" TO "SCOTT"
SET SECTION "Oracle" ENTRY "License" TO "kj3452jh4kh5k2345gf"
SET SECTION "Oracle" ENTRY "System_Schema" TO "X15"
MsgBox("Created a default config file: " + cFilePath)
END INI
RETURN Nil
FUNCTION Password_change()
LOCAL cPW
cPW := alltrim(InputBox("Enter new password:","Password Change"))
IF .NOT. empty(cPW)
BEGIN INI FILE (gcCfgFile)
SET SECTION "Oracle" ENTRY "License" TO Darkmatter_set(cPW)
END INI
MsgInfo("New password saved.","Status")
ELSE
MsgInfo("No change has been made to the password.","Status")
RETURN
ENDIF
RETURN
After this the procedures\functions in your new module can be called from your main.prg and window (fmg). Menu Example: Action: About("My App 1.01")
Embed Image Into .Exe
1. Copy your image to the dir your project is in.
2. Close IDE.
3. Edit the .rc file for project and add entry for your image.
Format: <IDName> <type> <FileName.ext>
Examples:
ImgJPG JPG myimage.jpg
ImgBMP BITMAP myimage.BMP
ImgGIF GIF myimage.GIF
ImgTIF TIF myimage.TIF
ImgPNG PNG myimage.PNG
ImgWMF WMF myimage.WMF
ImgICO ICO myimage.ICO
ImgCUR CUR myimage.CUR
4. Open your project.
5. Associate your image with your button or other control using the IDName.
Ex: Referring to above .rc entries, for a Toolbar Picture
you would use ImgPNG as the value (not file name).
6. Run project (image is now embedded into the .exe file).
Notes:
- 32x32 and larger good for toolbars.
Embed Icon Into .Exe
TBD