miércoles, 10 de octubre de 2018

Menu Contextual en Boton

En este procedimiento se muestra como poner Menú Contextual a Botones.

PROCEDURE MAIN()

DEFINE WINDOW Win_CC ;
AT 0,0;
WIDTH 100 ;
HEIGHT 200 ;
TITLE "Boton Contextual";
MODAL

@ 50, 10 BUTTONEX Btn_Grapics PICTURE "pie16" WIDTH 30 HEIGHT 25 ACTION ShowBtn_Graps_DropDownMenu() SIZE 10 TOOLTIP "Graficas"

DEFINE CONTEXT MENU CONTROL Btn_Grapics
MENUITEM "Grafica Tipo 1" ACTION PCCTool_Grap(1)
MENUITEM "Grafica Tipo 2" ACTION PCCTool_Grap(2)
MENUITEM "Grafica Tipo 3" ACTION PCCTool_Grap(3)
END MENU

//Pega el menu contextual al Boton
Btn_1_DropMenuHandle := _HMG_xContextMenuHandle

END WINDOWS

WIN_CC Center
WIN_CC Activate

RETURN
*----------------------------------------------------------------------------
PROCEDURE ShowBtn_Graps_DropDownMenu()
LOCAL aPos:={0,0,0,0}
// get SCREEN (no window) position of Button_1
GetWindowRect( GetControlHandle( "Btn_Grapics", "Win_CC" ), aPos )
TrackPopupMenu( Btn_1_DropMenuHandle, aPos[1], aPos[2] + Win_CC.Btn_Grapics.Height, GetFormHandle( "Win_CC" ) )
RETURN

*----------------------------------------------------------------------------

PROCEDURE PCCTool_Grap(mTipoGrap)
// Funcion que hace graficas
RETURN

lunes, 26 de enero de 2015

TAMAÑO DE UN TEXTO

Para conocer la longitud en pixels de un texto:

/*
_HMG_DefaultFontName : Fuente que se esta utilizando
_HMG_DefaultFontSize : Tamaño de la fuente que se esta utilizanod
*/

nFontHandle := _SetFont (NIL, _HMG_DefaultFontName ,_HMG_DefaultFontSize,.F.,.F.,.F.,.F.)
nTextWidth:= GetTextWidth( NIL , "Este es el TEXTO a medir", nFontHandle )
nTextWidth, es la longitud en Pixels

CONOCER SI UN CONTROL ESTA DEFINIDO

Para conocer si un formulario esta definido utlizamos _IsWindowDefined(cNombreDelFormulario)
esto retorna .T. o .F.

Para conocer si un control esta Definido _IsControlDefined(cNombreDelControl,cNombredelFormulario)
esto retorna .T. o .F.

Para conocer que control tiene el Foco ThisWindows.FocusedControl
esto retorna cNombreDelControl

jueves, 22 de marzo de 2012

Calcular Tamaño del Texto

cFontEnUso := _HMG_DefaultFontName
nFontSizeEnUso := _HMG_DefaultFontSize
nFontHandle := _SetFont (NIL, HMG_DefaultFontName, nFontSizeEnUso,.F.,.F.,.F.,.F.)

// Retorna el tamaño del texto en pixels
nTexWidth := GetTextWidth( NIL , "mi texto" , nFontHandle )

lunes, 27 de septiembre de 2010

Crear Accesos directos

Este es un Ejemplo de Como podemos Crear accesos directos para nuestra aplicaciones.

olnk:=CreateObject("WScript.Shell")
//Creación del objeto tipo shell
strDesktop :=olnk:SpecialFolders():Item("Startup")
//Retorna la dirección en donde se encontrara el acceso directo
---------- Paramestros para ITem()
AllUsersDesktop: Dirección del escritorio de Todos los Usuario
AllUsersStartMenu: Dirección de Menú Principal de Todos los Usuarios
AllUsersPrograms: Dirección de Todos los Programas de Todos los Usuarios
AllUsersStartup: Dirección de Todos los Programas Inicio de Todos los Usuarios
Desktop: Dirección del escritorio de usuario actual
Favorites: Dirección de Favoritos del Usuario actual
Fonts: Dirección de Instalación de Fonts del sistema
MyDocuments: Directorio Mis Documentos de Usuario actual
NetHood: Objects that appear in Network Neighborhood
PrintHood: Printer links
Recent: Shortcuts to current users recently opened documents
SendTo: Shortcuts to applications that show up as possible send-to targets when a user right-clicks on a file in Windows Explorer
StartMenu: Shortcuts that appear in the current users start menu
Startup: Shortcuts to applications that run automatically when the current user logs on to the system
Templates: Application template files specific to the current user */
----------
strPath := olnk:ExpandEnvironmentStrings("C:\MyFolder\MyExe.EXE")
//indica la ubicación de nuestra aplicación
oShellLink:=olnk:CreateShortcut(strDesktop + "\acceso directo a MyExe.lnk")
//Crea el acceso directo
oShellLink:TargetPath := strPath
// Asigna el destino

//-------------Esto no es indispensable-----------
oShellLink:WindowStyle := 1
// Estilo de ventana
oShellLink:IconLocation := "C:\myFolder\MyExe.EXE, 0"
//Ubucacion de Icono asocias. Si los iconos están incluidos debe de ponerse "myexe.exe, 0" 0 es la posicion del icono
oShellLink:Description := "Descripcion del Acceso"
oShellLink:WorkingDirectory := "C:\myFolder\"
Direccion de Trabajo
//----------------------------------------------------------
oShellLink:Save()
// Guardar el Acceso deirecto.
RETURN

/*
NuevoObjShell :=CreateObject("WScript.Shell") // Crea un Objeto Sherll
DirectorioDestino :=NuevoObjShell:SpecialFolders():Item("Startup") // Retorna la direccion solicitada en Item(Ver Referencia)
UbicacionDelEjecutable :=NuevoObjShell:ExpandEnvironmentStrings("C:\Directorio\Ejecutable.EXE")
NuevoObjShortCut :=NuevoObjShell:CreateShortcut(DirectorioDestino + "\Nombre del Acceso.lnk")
NuevoObjShortCut:TargetPath:=UbicacionDelEjecutable
//-------------Esto no es indispensable-----------
NuevoObjShortCut:WindowStyle := 1
NuevoObjShortCut:IconLocation := "C:\Directorio\miicon.ico" // Si los iconos estan incluidos debe de ponerse "c:\Directorio\Ejecutable.exe, 0" 0 es la posicion del icono
NuevoObjShortCut:Description := "Compatibiliadad para impresoras"
NuevoObjShortCut:WorkingDirectory := "C:\Directorio\"
//----------------------------------------------------------
NuevoObjShortCut:Save()

Referencia de SpecialFolders():Item("Startup")

llamar varias funciones/procedimientos desde el mismo control

Algunas veces, según las circunstancias, necesitamos llamar a distintas funciones o procedimientos desde un mismo control. este ejemplo ilustra cómo podemos realizar realizarlo.

#include "minigui.ch"

Function Main Local
mNumFunc:= 1
PRIVATE maFunction
maFunction:= {{ || mYProy1()},{ || mYProy2()}}

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 550 ;
HEIGHT 400 ;
TITLE 'Hello World!' ;

MAIN DEFINE MAIN MENU
DEFINE POPUP 'Test'
MENUITEM 'Llamar a la función' ACTION EVAL(maFunction[mNumFunc])
MENUITEM 'Cambiar el Numero de Funcion' ACTION mYProy3(@mNumFunc)
END POPUP
END MENU
@ 10,25 BUTTONEX Btx_Test CAPTION "Test" WIDTH 100 HEIGHT 25 ACTION EVAL(maFunction[mNumFunc])
END WINDOW
Form_1.Center
Form_1.Activate Return Nil
*----------
Procedure mYProy1()
msgbox("myProy1")
RETURN
*----------
Procedure mYProy2()
msgbox("myProy2")
RETURN
*----------
Procedure mYProy3(mNumFunc)
// Solo debemos de cambiar el numero de posición enel vector.
mNumFunc:= IF(mNumFunc = 1,2,1)
RETURN

miércoles, 22 de septiembre de 2010

Funcion STOD()

Sabemos que para ordenamientos de datos, utilizamos la función DTOS, para cambiar de fechas 30/01/9999 a 99990130. Ahora contamos la la función STOD que revierte este cambio Ej.

mdDato:= DATE() //30/01/9999
mdDato:= DTOS(mdDato) //99990130

mdDato:= STOD(mdDato) //30/01/9999