Being lazy I remembered an application (don't know which anymore, but mainframe certainly) where one could store frequently used pieces of 'text' under F-keys.
I wanted to dynamically fill a F-key with a constant value and afterwards I want to copy the content to a textbox field in my form.
For example: suppose today I work a lot on a city, 'Luxembourg'. I want this variable name to be stored in public var
(let's say in c_FN_KEY_1 .. c_FN_KEY_12) in order to be kept under my F1..F12 keys. Every time I press a F1-key I want the word 'Luxembourg' to be copied to
the textbox where the focus is on. This way I it saves a lot of typing and possible mistakes.
All key-text are saved in a INI file for easy text-editing.
I encounter 2 problems :
1- F12 key is not working (known problem?)
2- Some text will not appear on the labels (LABEL &cFN) but will copied to the textboxes.
Code: Select all
#include "hmg.ch"
FUNCTION MAIN()
/****************/
PUBLIC c_FN_KEY_1 := ''
PUBLIC c_FN_KEY_2 := ''
PUBLIC c_FN_KEY_3 := ''
PUBLIC c_FN_KEY_4 := ''
PUBLIC c_FN_KEY_5 := ''
PUBLIC c_FN_KEY_6 := ''
PUBLIC c_FN_KEY_7 := ''
PUBLIC c_FN_KEY_8 := ''
PUBLIC c_FN_KEY_9 := ''
PUBLIC c_FN_KEY_10 := ''
PUBLIC c_FN_KEY_11 := ''
PUBLIC c_FN_KEY_12 := ''
BEGIN INI FILE ("fn.INI")
GET c_FN_KEY_1 SECTION "FN" ENTRY "F1"
GET c_FN_KEY_2 SECTION "FN" ENTRY "F2"
GET c_FN_KEY_3 SECTION "FN" ENTRY "F3"
GET c_FN_KEY_4 SECTION "FN" ENTRY "F4"
GET c_FN_KEY_5 SECTION "FN" ENTRY "F5"
GET c_FN_KEY_6 SECTION "FN" ENTRY "F6"
GET c_FN_KEY_7 SECTION "FN" ENTRY "F7"
GET c_FN_KEY_8 SECTION "FN" ENTRY "F8"
GET c_FN_KEY_9 SECTION "FN" ENTRY "F9"
GET c_FN_KEY_10 SECTION "FN" ENTRY "F10"
GET c_FN_KEY_11 SECTION "FN" ENTRY "F11"
GET c_FN_KEY_12 SECTION "FN" ENTRY "F12"
END INI
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 500 ;
HEIGHT 400 ;
TITLE "F1..F12 " ;
ICON 'proj';
ON KEY ESCAPE ACTION {Form_1.Release}
ON KEY F1 ACTION {PASTE_CONTENT_F_KEY(1) }
ON KEY F2 ACTION {PASTE_CONTENT_F_KEY(2) }
ON KEY F3 ACTION {PASTE_CONTENT_F_KEY(3) }
ON KEY F4 ACTION {PASTE_CONTENT_F_KEY(4) }
ON KEY F5 ACTION {PASTE_CONTENT_F_KEY(5) }
ON KEY F6 ACTION {PASTE_CONTENT_F_KEY(6) }
ON KEY F7 ACTION {PASTE_CONTENT_F_KEY(7) }
ON KEY F8 ACTION {PASTE_CONTENT_F_KEY(8) }
ON KEY F9 ACTION {PASTE_CONTENT_F_KEY(9) }
ON KEY F10 ACTION {PASTE_CONTENT_F_KEY(10) }
ON KEY F11 ACTION {PASTE_CONTENT_F_KEY(11) }
ON KEY F12 ACTION {PASTE_CONTENT_F_KEY(12) }
ON KEY CONTROL+F1 ACTION {COPY_CONTENT_F_KEY(1) }
ON KEY CONTROL+F2 ACTION {COPY_CONTENT_F_KEY(2) }
ON KEY CONTROL+F3 ACTION {COPY_CONTENT_F_KEY(3) }
ON KEY CONTROL+F4 ACTION {COPY_CONTENT_F_KEY(4) }
ON KEY CONTROL+F5 ACTION {COPY_CONTENT_F_KEY(5) }
ON KEY CONTROL+F6 ACTION {COPY_CONTENT_F_KEY(6) }
ON KEY CONTROL+F7 ACTION {COPY_CONTENT_F_KEY(7) }
ON KEY CONTROL+F8 ACTION {COPY_CONTENT_F_KEY(8) }
ON KEY CONTROL+F9 ACTION {COPY_CONTENT_F_KEY(9) }
ON KEY CONTROL+F10 ACTION {COPY_CONTENT_F_KEY(10) }
ON KEY CONTROL+F11 ACTION {COPY_CONTENT_F_KEY(11) }
ON KEY CONTROL+F12 ACTION {COPY_CONTENT_F_KEY(12) }
nR := 7
nC := 10
FOR Z := 1 TO 12
cFN := 'c_FN_KEY_' + ALLTRIM(STR(Z))
cLB := 'F' + ALLTRIM(STR(Z)) + '= '
@ nR,nC LABEL &cFN ;
VALUE cLB + ALLTRIM(&cFN) ;
WIDTH 100 ;
HEIGHT 10 ;
FONT 'Arial' SIZE 8 ;
ACTION Manage_FX() ;
BACKCOLOR ORANGE
nC := nC + 110
IF nC >= 400
nR := nR + 15
nC := 10
ENDIF
NEXT
@ 60,10 TEXTBOX TEST1 ;
WIDTH 300 ;
VALUE 'Press F1 to paste';
TOOLTIP '' ;
FONT 'Arial' SIZE 8 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
ON GOTFOCUS SetProperty('Form_1', this.name ,'BackColor' , WHITE ) ;
ON LOSTFOCUS SetProperty('Form_1', this.name ,'BackColor' , SILVER )
@ 90,10 TEXTBOX TEST2 ;
WIDTH 300 ;
VALUE 'Press CTRL-F1 to copy this text to F1 ';
TOOLTIP '' ;
FONT 'Arial' SIZE 8 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
ON GOTFOCUS SetProperty('Form_1', this.name ,'BackColor' , WHITE ) ;
ON LOSTFOCUS SetProperty('Form_1', this.name ,'BackColor' , SILVER )
END WINDOW
Form_1.center
Form_1.activate
RETURN
FUNCTION PASTE_CONTENT_F_KEY(x)
/********************************/
LOCAL cFOCUS := ThisWindow.FocusedControl
LOCAL cOLD := GetProperty(thiswindow.name, cFOCUS, 'Value' )
LOCAL n2, cFN
cFN := 'c_FN_KEY_' + ALLTRIM(STR(x))
SetProperty(thiswindow.name, cFOCUS, 'Value', cOLD + &cFN)
n2 := LEN(GetProperty(thiswindow.name, cFOCUS, 'Value ' ) )
SetProperty(thiswindow.name, cFOCUS, 'Caretpos', n2 )
RETURN
FUNCTION COPY_CONTENT_F_KEY(X)
/*****************************/
LOCAL cFOCUS := ThisWindow.FocusedControl
cFN := 'c_FN_KEY_' + ALLTRIM(STR(x))
&cFN := GetProperty(thiswindow.name, cFOCUS, 'Value')
FOR Z := 1 TO 12
cFN := 'c_FN_KEY_' + ALLTRIM(STR(Z))
cLB := 'F' + ALLTRIM(STR(Z)) + '= '
SetProperty(thiswindow.name, cFN, 'Value', cLB + &cFN)
NEXT
SET_SECTION()
RETURN
FUNCTION Manage_FX()
/*******************/
IF !IsWIndowActive (Form_FX)
DEFINE WINDOW Form_FX ;
AT 0,0 ;
WIDTH 600 ;
HEIGHT 600 ;
TITLE 'Function keys '
ON KEY ESCAPE ACTION {Form_FX.Release }
@ 10,450 BUTTON bt_save OF Form_FX ;
CAPTION 'Save' ;
PICTURE 'ADD' ;
FONT 'Arial' SIZE 8 ;
HEIGHT 86 ;
WIDTH 72 ;
TOOLTIP 'New Item' ;
ACTION save_fx()
nR := 10
FOR Z := 1 TO 12
LBX := 'LB' + ALLTRIM(STR(Z))
TBX := 'TB' + ALLTRIM(STR(Z))
LVA := 'F' + ALLTRIM(STR(Z))
cFN := 'c_FN_KEY_' + ALLTRIM(STR(Z))
@ nR,10 LABEL &LBX ;
VALUE LVA ;
WIDTH 100 ;
HEIGHT 30 ;
FONT 'Arial' SIZE 10 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
@ nR,120 TEXTBOX &TBX ;
WIDTH 300 ;
VALUE &cFN;
TOOLTIP LVA ;
MAXLENGTH 200 ;
FONT 'Arial' SIZE 10 ;
BACKCOLOR SILVER ;
FONTCOLOR BLUE BOLD ;
ON GOTFOCUS SetProperty('Form_FX', this.name ,'BackColor' , WHITE ) ;
ON LOSTFOCUS SetProperty('Form_FX', this.name ,'BackColor' , SILVER )
nR := nR + 35
NEXT
END WINDOW
Form_FX.center
Form_FX.activate
ELSE
Form_FX.SetFocus
ENDIF
RETURN
FUNCTION SAVE_FX()
/******************/
LOCAL Z, TBX, ZZZ, cFN, cLB
FOR Z := 1 TO 12
TBX := 'TB' + ALLTRIM(STR(Z))
ZZZ := GetProperty('Form_FX', tbx, 'Value')
cFN := 'c_FN_KEY_' + ALLTRIM(STR(Z))
&cFN := ZZZ
NEXT
Form_FX.Release
FOR Z := 1 TO 12
cFN := 'c_FN_KEY_' + ALLTRIM(STR(Z))
cLB := 'F' + ALLTRIM(STR(Z,2,0)) + '= '
SetProperty('Form_1', cFN, 'Value', cLB + ALLTRIM(&cFN) )
NEXT
SET_SECTION()
RETURN
FUNCTION SET_SECTION()
/*********************/
BEGIN INI FILE ("fn.INI")
SET SECTION "FN" ENTRY "F1" TO c_FN_KEY_1
SET SECTION "FN" ENTRY "F2" TO c_FN_KEY_2
SET SECTION "FN" ENTRY "F3" TO c_FN_KEY_3
SET SECTION "FN" ENTRY "F4" TO c_FN_KEY_4
SET SECTION "FN" ENTRY "F5" TO c_FN_KEY_5
SET SECTION "FN" ENTRY "F6" TO c_FN_KEY_6
SET SECTION "FN" ENTRY "F7" TO c_FN_KEY_7
SET SECTION "FN" ENTRY "F8" TO c_FN_KEY_8
SET SECTION "FN" ENTRY "F9" TO c_FN_KEY_9
SET SECTION "FN" ENTRY "F10" TO c_FN_KEY_10
SET SECTION "FN" ENTRY "F11" TO c_FN_KEY_11
SET SECTION "FN" ENTRY "F12" TO c_FN_KEY_12
END INI
Code: Select all
[FN]
F1=SOUTH-AFRICA
F2=UZBEKISTAN
F3=AUSTRALIA
F4=FRANCE
F5=HOLLAND
F6=TURKEY
F7=BELGIUM
F8=DEUTSCHLAND
F9=DANMARK
F10=ISRAEL
F11=LUXEMBOURG
F12=U.K.
NB Clicking on the FN labels will open an form for extra editing!
Serge