HMG TUTORIAL
Ejemplos: ..\SAMPLES\Basics\TUTORIAL
El Primer Programa
No seré muy original, este programa desplegará el mensaje 'Hola Mundo'
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 01 - Hola Mundo!' ; MAIN END WINDOW ACTIVATE WINDOW Win_1 Return ¼ DEFINE WINDOW
El comando DEFINE WINDOW: Creará la ventana principal para el programa
¼ Win_1 Es el nombre de la ventana
¼ AT 0,0
Indica la posición de la ventana (row=0,col=0)
¼ WIDTH 400
Significa que la ventana tendrá 400 pixels de ancho.
¼ HEIGHT 200
Significa que la ventana tendrá 200 pixels de alto.
¼ TITLE 'Hola el Mundo!' Indica el texto en la barra de título de la
ventana.
¼ MAIN
Indica que estamos definiendo la ventana principal de la aplicación
(una ventana principal se requiere para todas las aplicaciones HMG)
¼ ACTIVATE WINDOW Form_1 Mostrará la ventana e iniciará el ciclo de
eventos.
Agregando El Menú Principal
Agregaremos un menú principal al programa:
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 02 - Testeo de Propiedad' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup"ITEM 'Cambiar el Título de la Ventana' ACTION Win_1.Title := 'Nuevo Título'
ITEM 'Recuperar el Título de la Ventana' ACTION MsgInfo ( Win_1.Title )END POPUP
END MENU END WINDOW ACTIVATE WINDOW Win_1
Return Como puede verse es bastante fácil e
intuitivo.
Todo los comandos del menú principal estarán entre las declaraciones DEFINE
MAIN MENU / END MENU.
Cada popup individual del menú estarán entre las declaraciones POPUP / END
POPUP.
Cada ítem de menú se codificará via la declaración ITEM.
Puede usarse cuantos popups sean necesários y pueden anidarse sin ningún límite.
La función MsgInfo()
Ésta es una función muy útil. Mostrará una pequeña ventana de mensaje (con el ícono
de información del sistema) y un mensaje que se le pase como parámetro.
Puede agregar opcionalmente un título (como segundo parámetro)
El Control LABEL
El control LABEL permite mostrar texto y es muy fácil de utilizar también.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 03 - Testeo de Label' ;MAIN
@ 100,10 LABEL Label_1 VALUE 'Este es un Label!'END WINDOW
ACTIVATE WINDOW Win_1 Return @
100,10 significa que el
texto será mostrado en la fila 100, columna 10.
(Recordar que la unidad de
medida es en pixel).
Label_1 es el nombre del control (lo identificaremos
por este nombre La cláusula
VALUE indica el valor inicial del control cuando
es creado.
Obteniendo datos del usuario (el control TextBox)
El control TextBox es el medio más usado para obtener datos del usuario.
Para ingresar datos numéricos,
solo agregarse la cláusula NUMERIC.
Para ingresar datos
numéricos, solo agregarse la cláusula INPUTMASK.
#include "hmg.ch" Function Main()DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 300 ; TITLE 'Tutor 04 - Testeo de TextBox' ; MAIN DEFINE MAIN MENU
POPUP "Primer Popup" ITEM 'Cambiar el contenido del TextBox ' ACTION Win_1.Text_1.Value := 'Nuevo valor del TextBox' ITEM 'Recuperar el contenido del TextBox' ACTION MsgInfo ( Win_1.Text_1.Value ) SEPARATOR ITEM 'Cambiar el contenido numérico del TextBox' ACTION Win_1.Text_2.Value := 100 ITEM 'Recuperar el contenido numérico del TextBox' ACTION MsgInfo ( Str(Win_1.Text_2.Value) ) SEPARATOR ITEM 'Cambiar el contenido numérico del TextBox(InputMask)' ACTION Win_1.Text_3.Value := 1234.12 ITEM 'Recuperar el contenido numérico del TextBox(InputMask)' ACTION MsgInfo ( Str( Win_1.Text_3.Value ) )END POPUP
END MENU @ 40 , 120 TEXTBOX Text_1 @ 80 , 120 TEXTBOX Text_2 NUMERIC @ 120 , 120 TEXTBOX Text_3 NUMERIC INPUTMASK '9999.99'END WINDOWACTIVATE WINDOW Win_1Return
Obteniendo Datos Lógicos
A veces, es necesario obtener datos de tipo lógico del usuario. La manera más
fácil de hacerlo es utilizando el control checkbox.
Agregamos CHECKBOX al programa, junto con nuevas opciones de
menú para poder asignar o recuperar su valor.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 300 ; TITLE 'Tutor 05 - Testeo de CheckBox' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar el Valor del CheckBox' ACTION Win_1.Check_1.Value := .T. ITEM 'Recuperar el Valor del CheckBox' ACTION MsgInfo ( if( Win_1.Check_1.Value,'.T.','.F.') ) END POPUP END MENU @ 100, 120 CHECKBOX Check_1 CAPTION 'Check Me!' END WINDOW ACTIVATE WINDOW Win_1Return
Seleccionando Opciones:
A veces, es necesario obtener el valor de una elección de los usuarios, entre
un grupo pequeño de opciones que son conocidos en el momento del diseño.
La mejor manera de
proceder en tales casos es usar el control RadioGroup.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 06 - Testeo de RadioGroup' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar el valor del RadioGroup' ACTION Win_1.Radio_1.Value := 2 ITEM 'Recuperar el Valor del RadioGroup' ACTION MsgInfo ( Str(Win_1.Radio_1.Value) ) END POPUP END MENU @ 80, 120 RADIOGROUP Radio_1 OPTIONS {'Opción 1','Opción 2','Opción 3'} END WINDOWACTIVATE WINDOW Win_1
Return
Otras Formas de Selección de Opciones:
Hay varias
alternativas para obtener la opción de un usuario además de RadioGroup.
Uno de ellos es el
control ListBox.
Usando un Listbox, puede agregarse, cambiar o quitar items
en tiempo de ejecución.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 07 - Testeo de ListBox' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar valor del ListBox' ACTION Win_1.List_1.Value := 2 ITEM 'Recuperar el valor del ListBox' ACTION MsgInfo ( Str(Win_1.List_1.Value) ) SEPARATOR ITEM 'Agregar iten de Lista' ACTION Win_1.List_1.AddItem ('Nuevo item de Lista') ITEM 'Remove item de Lista' ACTION Win_1.List_1.DeleteItem (2)ITEM 'Cambiar item de Lista' ACTION Win_1.List_1.Item (1) := 'Nuevo texto de Item'
ITEM 'Mostrar cantidad de items de Lista' ACTION MsgInfo ( Str( Win_1.List_1.ItemCount) )
END POPUPEND MENU
@ 10, 10 LISTBOX List_1 ITEMS {'Opción 1','Opción 2','Opción 3'}END WINDOW
ACTIVATE WINDOW Win_1Return
Otras Formas de Selección de Opciones II
Otro alternativa
para obtener la opción de un usuario es el COMBOBOX.
Usar un ComboBox, es similar al ListBox.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 08 - Teste de ComboBox' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup"ITEM 'Cambiar el valor del ComboBox' ACTION Win_1.Combo_1.Value := 2
ITEM 'Recuperar valor del ComboBox' ACTION MsgInfo ( Str(Win_1.Combo_1.Value)) SEPARATORITEM 'Agregar item al ComboBox' ACTION Win_1.Combo_1.AddItem ('New List Item')
ITEM 'Remove item del ComboBox' ACTION Win_1.Combo_1.DeleteItem (2) ITEM 'Cambiar itemd el ComboBox' ACTION Win_1.Combo_1.Item (1) := 'New Item Text' ITEM 'Mostrar cantidad de items del ComboBox' ACTION MsgInfo (Str(Win_1.Combo_1.ItemCount)) END POPUPEND MENU
@ 10, 10 COMBOBOX Combo_1 ITEMS {'Opción 1','Opción 2','Opción 3'}END WINDOWACTIVATE WINDOW Win_1Return
Botones
Otra manera para permitir que los usuarios tomen una acción (además de los
menús) es por medio de botones.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 09 - Testeo de Button' ; MAIN @ 10,10 BUTTON Button_1 ; CAPTION 'Click Aqui!' ; ACTION MsgInfo('Botón Clickeado!') END WINDOWACTIVATE WINDOW Win_1
Return
Botones con Imagen
En lugar de un texto puede usarse una imagen.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 10 - Testeo de imagen en Button' ; MAIN @ 10,10 BUTTON PictureButton_1 ; PICTURE 'button.bmp' ;ACTION MsgInfo('Imagen en botón Clickeado!!') ;
WIDTH 27 ;
HEIGHT 27 ; TOOLTIP 'Picture Button Tooltip' END WINDOW ACTIVATE WINDOW Win_1 Return
La cláusula tooltip (optativa) causa que una ventana pequeña con un texto
explicativo se despliegue cuando el indicador del ratón se queda encima del
control por unos segundos. Puede usarse esta cláusula con la mayoría de los
comandos HMG.
Button + Checkbox = CheckButton
El control CheckButton, actua como un checkbox, pero se ve como un botón. Al
igual que los botones, pueden ser de texto o gráficos.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 11 - Testeo del CheckButton' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar el valor del CheckButton' ACTION Win_1.CheckButton_1.Value := .T. ITEM 'Recuperar valor del CheckButton' ACTION MsgInfo ( if(Win_1.CheckButton_1.Value,'.T.','.F.')) SEPARATOR ITEM 'Agregar item al CheckButton' ACTION Win_1.CheckButton_2.Value := .T. ITEM 'Recuperar valor del CheckButton' 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 WINDOWACTIVATE WINDOW Win_1
Return
El Control DatePicker
La manera más fácil de obtener una fecha del usuario es mediante el control
datepicker.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 12 - Testeo del DatePicker' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar el valor del DatePicker' ACTION Win_1.date_1.Value := Date() ITEM 'Recuperar valor del DatePicker' ACTION MsgInfo ( dtoc(Win_1.Date_1.Value) ) END POPUP END MENU @ 10,10 DATEPICKER Date_1 END WINDOW ACTIVATE WINDOW Win_1Return
El control EditBox
El control EditBox permite manejar datos de texto de múltiples líneas.
#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 "Primer Popup" ITEM 'Cambiar el contenido del EditBox' ACTION Win_1.Edit_1.Value := 'Nuevo contenido de EditBox' ITEM 'Recuperar contenido del EditBox' 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
El Control IMAGE
El control Image permite mostrar imágenes desde archivos .bmp .ico .gif .jpg o
.emf
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 14 - Testeo de Image' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar el contenido del Image' ACTION Win_1.Image_1.Picture := 'Open.Bmp' ITEM 'Recuperar contenido del Image' 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_1Return
El Control ProgressBar
El control ProgressBar permite mostrar el estado de ejecución de una operación
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 15 - Testeo del ProgressBar' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Testeo del ProgressBar' 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 Procedure DoTest()Local i For i = 0 To 65535 Step 25 Win_1.Progress_1.Value := i Next i Return
El Control Spinner
Una manera alternada de obtener datos numéricos es mediante el control Spinner.
Consiste en un textbox con dos flechas que permiten cambiar el valor de los
controles usando el ratón.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 16 - Testeo del Spinner' ; MAIN DEFINE MAIN MENU POPUP "Primer Popup" ITEM 'Cambiar el valor del Spinner' ACTION Win_1.Spinner_1.Value := 8 ITEM 'Recuperar valor del Spinner' 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_1Return
El Control TAB
Usar TABs permite organizar los controles y ahorrar espacio agrupándolos en
carpetas.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 250 ; TITLE 'Tutor 17 - Testeo del Tab' ; MAIN DEFINE MAIN MENU POPUP "Primer 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 'Esta es la página 1' END PAGE PAGE 'Page 2' @ 50,50 LABEL Label_2 VALUE 'Esta es la página 2' END PAGE END TAB END WINDOW ACTIVATE WINDOW Win_1 Return
El Control TOOLBAR
Los Toolbars se usan para agrupar botones de comando en una barra que se localiza
generalmente en la parte superior de la ventana (debajo de la barra de menú.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Tutor 18 - Testeo del ToolBar' ; MAIN ; FONT 'Arial' SIZE 10 DEFINE MAIN MENU POPUP '&Archivo' ITEM '&Desabilitado ToolBar Button' ACTION Win_1. ToolBar_1.Button_1.Enabled := .F. ITEM '&Habilitado' ToolBar Button' ACTION Win_1. ToolBar_1.Button_1.Enabled := .T. ITEM '&Salida' ACTION Win_1.Release END POPUP END MENU DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 80,80 FLAT BORDER BUTTON Button_1 ; CAPTION '&Butón &1' ; PICTURE 'button1.bmp' ; ACTION MsgInfo('Click! 1') BUTTON Button_2 ; CAPTION '&Butón 2' ; PICTURE 'button2.bmp' ; ACTION MsgInfo('Click! 2') ; SEPARATOR BUTTON Button_3 ; CAPTION 'Butón &3' ; PICTURE 'button3.bmp' ; ACTION MsgInfo('Click! 3') END TOOLBAR END WINDOW CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1Return Nil
El Control Statusbar
Este control crea una barra en la parte
inferior de la ventana, usada generalmente para mostrar información de estado.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 200 ; TITLE 'Tutor 19 - Testeo del Tab' ; MAIN DEFINE MAIN MENU POPUP '&Testeo del StatusBar' ITEM 'Definir Status Item 1' ACTION Win_1.StatusBar.Item(1) := "Nuevo valor 1" ITEM 'Definir Status Item 2' ACTION Win_1.StatusBar.Item(2) := "Nuevo valor 2" END POPUP END MENU DEFINE STATUSBAR STATUSITEM "Item 1" ACTION MsgInfo('Clickeo 1 !') STATUSITEM "Item 2" WIDTH 100 ACTION MsgInfo('Clickeo 2 !') CLOCK DATE STATUSITEM "Item 5" WIDTH 100 END STATUSBAR END WINDOW ACTIVATE WINDOW Win_1 Return
Controles de Datos I: DATA-BOUND GRID
Los controles de datos están diseñados para
trabajar con datos en archivos .dbf directamente.
El control Grid, permite mostrar o editar registros de bases de datos en forma
tabular. La propiedad 'recno' se usa para establecer u obtener el número de
registro seleccionado (recno()).
#include "hmg.ch" Function Main OpenTables() DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Tutor 20 - Testeo del GRID' ; MAIN NOMAXIMIZE DEFINE MAIN MENU POPUP 'File' ITEM 'Definir el RecNo del Grid' ACTION Win_1.Grid_1.Value := Val ( InputBox ('Set Grid RecNo','') ) ITEM 'Obtener el RecNo del Grid' ACTION MsgInfo ( Str ( Win_1.Grid_1.RecNo ) ) SEPARATOR ITEM 'Exit' ACTION Win_1.Release END POPUP POPUP 'Ayuda' ITEM 'Sobre el programa' ACTION MsgInfo ("Tutor 20 - GRID Test") END POPUP END MENU @ 10,10 GRID Grid_1 ; WIDTH 610 ; HEIGHT 390 ; HEADERS { 'Código' , 'Primer Nombre' , 'Apellido', 'Fecha Nacimiento', 'Casado' , 'Biografia' } ; WIDTHS { 150 , 150 , 150 , 150 , 150 , 150 } ; ROWSOURCE "Test" ; COLUMNFIELDS { 'Code' , 'First' , 'Last' , 'Birth' , 'Married' , 'Bio' } ; ALLOWDELETE ; ALLOWEDIT END WINDOW CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 Return Nil Procedure OpenTables() Use Test Win_1.Browse_1.Value := RecNo() Return Nil Procedure CloseTables() UseReturn Nil
Controles de Datos II: TEXTBOX, DATEPICKER, CHECKBOX, EDITBOX
Las versiones de estos controles para el manejo directo de datos almacenados en
archivos .dbf, requiere el uso de las siguientes propiedades y métodos:
Propiedad "Field": Establece el campo al cual el control está
enlazado.
Método "Refresh" : Actualiza el contenido del control baseandose en
el contenido actual del campo.
Método "Save": Actualiza el archivo de base de datos de acuerdo al
contenido del control.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 640 ; HEIGHT 480 ; TITLE 'Tutor 21 - Testeo de los controles Data-Bound' ; MAIN ; ON INIT OpenTables() ; ON RELEASE CloseTables() DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 100,30 FLAT RIGHTTEXT BORDER BUTTON TOP ; CAPTION '&Inicio' ; PICTURE 'primero.bmp' ; ACTION ( DbGoTop() , Refresh() ) BUTTON PREVIOUS ; CAPTION '&Anterior'; PICTURE 'anterior.bmp' ; ACTION ( DbSkip(-1) , Refresh() ) BUTTON NEXT ; CAPTION '&Próximo'; PICTURE 'siguiente.bmp' ; ACTION ( DbSkip(1) , if ( eof() , DbGoBottom() , Nil ) , Refresh() ) BUTTON BOTTOM ; CAPTION '&Ultimo' ; PICTURE 'ultimo.bmp' ; ACTION ( DbGoBottom() , Refresh() ) BUTTON SAVE ; CAPTION '&Guardar' ; PICTURE 'guardar.bmp' ; ACTION ( Save() , Refresh() ) BUTTON UNDO ; CAPTION '&Desahacer' ; PICTURE 'deshacer.bmp' ; ACTION ( Refresh() ) END TOOLBAR @ 50,10 LABEL LABEL_1 VALUE 'Código:' @ 80,10 LABEL LABEL_2 VALUE 'Primer Nombre' @ 110,10 LABEL LABEL_3 VALUE 'Apellido' @ 140,10 LABEL LABEL_4 VALUE 'Fecha Nacimiento:' @ 170,10 LABEL LABEL_5 VALUE 'Casado:' @ 200,10 LABEL LABEL_6 VALUE 'Bio:' @ 50,200 TEXTBOX TEXT_1; FIELD TEST->CODE ; NUMERIC ; MAXLENGTH 10 @ 80,200 TEXTBOX TEXT_2; FIELD TEST->FIRST ; MAXLENGTH 30 @ 110,200 TEXTBOX TEXT_3; FIELD TEST->LAST ; MAXLENGTH 30 @ 140,200 DATEPICKER DATE_4 ; FIELD Test->Birth @ 170,200 CHECKBOX CHECK_5 ; CAPTION '' ; FIELD Test->Married @ 200,200 EDITBOX EDIT_6 ; FIELD Test->Bio ; HEIGHT 100 END WINDOW Win_1.Text_1.SetFocus ACTIVATE WINDOW Win_1 Return Nil Procedure Refresh Win_1.Text_1.Refresh Win_1.Text_2.Refresh Win_1.Text_3.Refresh Win_1.Date_4.Refresh Win_1.Check_5.Refresh Win_1.Edit_6.Refresh Win_1.Text_1.SetFocus Return Procedure Save Win_1.Text_1.Save Win_1.Text_2.Save Win_1.Text_3.Save Win_1.Date_4.Save Win_1.Check_5.Save Win_1.Edit_6.Save Return Procedure OpenTables USE TESTReturn Procedure CloseTables USEReturn
El Control SPLITBOX
Los controles o ventanas definidos como
parte de este contenedor pueden ser ordenados por el usuario usando una
"barra de arrastre" ubicada su izquierda. Debe omitirse '@
<row>,<col>' en la definición del control.
#include "hmg.ch" Function Main DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 640 HEIGHT 450 ; TITLE 'Tutor 22 - Testeo del SplitBox' ; MAIN DEFINE SPLITBOX LISTBOX List_1 ; WIDTH 200 ; HEIGHT 400 ; ITEMS {'Item 1','Item 2','Item 3','Item 4','Item 5'} ; VALUE 3 ; TOOLTIP 'ListBox 1' EDITBOX Edit_1 ; WIDTH 200 ; HEIGHT 400 ; VALUE 'EditBox!!' ; TOOLTIP 'EditBox' ; MAXLENGTH 255 END SPLITBOX END WINDOW CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 Return Nil