|
Recursos
Suscripción |
TRUCOS DE TOMÉ Nº 2 Ahora que estamos en la segunda edición de esta columna, ustedes deben pensar que su objetivo no es expandir las fronteras del conocimiento ("audazmente hago lo que ningún programador jamás hace..."). Lo que si deseo es divulgar los trucos gratuitos, aquellas pequeñas ideas, verdaderas "joyas" de creatividad de esa extraordinaria comunidad de profesionales que la mayoría de las veces quieren apenas ver sus ideas descubiertas y ser admiradas por sus colegas. Al final, para cada duda dejada en los numerosos foros de Access esparcidos por el mundo, existe alguien dedicando su tiempo a atender gratis las dudas de sus colegas. Me informan, si conocen, otra profesión donde existe ello! Esta vez traemos a los "AccessManíacos" trucos e ideas realmente calientes. Mire sólo:
|
Trucos de Tomé
|
Mostrar una ventana "Idea del Día" al iniciar su aplicación Qué tal dar aquel toque bien profesional en su aplicación, mostrando la conocida ventana "Idea del día" cada vez que él se inicie? Es muy fácil hacerlo en una aplicación desarrollada con Access, principalmente porque usted puede descargar el archivo IdeaDelDia.mdb, con todos los objetos (formularios, tablas, etc.) necesarios para tal. Todo lo que usted tiene que hacer es importar todos esos objetos para el su mdb (excepto el formulario TelaInicial, que fué creada apenas para servir de ejemplo sobre como implementar esa característica) y llenar la tabla tabDicas con las ideas concernientes al asunto de su aplicación. Usted no puede olvidar los siguientes detalles:
Estudiando un poco el código VBA de los formularios usted percibirá que fue utilizada la función Randomize para generar un número aleatorio entre 1 y el número de registros de la tabla tabDicas para seleccionar cual es la idea que será exhibida cuando la ventana Ideas se abra abierta. La opción de mostrar o no la ventana Idea del día al iniciar la aplicación ha sido almacenada en la tabla tabOpçãoMostrarDicas, que es buscada por la función Dlookup. Para facilitar el ingreso a la tabla tabDicas con sus propias ideas, adicione un pequeño formulario llamado telaEntraDicas, pero ese no precisa continuar presente en su aplicación después que todo esté completo. También adicioné, como brindis especial, algunas ideas genéricas, que usted pode aprovechar, si quiere. Deshabilitar la tecla Shift sin deshabilitar la aplicación Una de las primeras preocupaciones de todos los que desarrollan aplicaciones en Access es garantizar que el usuario vea apenas los formularios concernientes a la aplicación, impidiendo acceder a la ventana de base de datos" (la inter fase de Access). Para ello, debe ser desmarcada la opción "exhibir ventana base de datos" en el cuadro Inicio (Menú Herramientas, opción Inicio...), establecer un formulario como inicial y crear barras de herramientas y menús personalizados para reemplazar los predeterminados de Access. Si usted ya está "casi terminando" una aplicación, debe tener estudiado lo suficiente para saber que esas opciones de inicio pueden ser evitadas ("pasadas") si, al comenzar la aplicación, el usuario mantiene presionada la tecla Shift. Por ello, es una pregunta frecuente en los foros como hacer para trabar la tecla Shift. Ello es fácil. Existe la ya famosa función "AlterarPropriedade", la cual les brindo abajo: Public Function AlterarPropriedade(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer Dim dbs As Database, prp As Property Const conPropNotFoundError = 3270 Set dbs = CurrentDb On Error GoTo Change_Err dbs.Properties(strPropName) = varPropValue AlterarPropriedade = True Change_Bye: Exit Function Change_Err: If Err = conPropNotFoundError Then ' Propiedad no ha sido localizada. Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue) dbs.Properties.Append prp Resume Next Else ' Error desconocido. AlterarPropriedade = False Resume Change_Bye End If End Function Adicione esa función en un módulo general y haga una llamada a ella en el evento Al Abrir del formulario establecido como inicial de su aplicación: AlterarPropriedade "AllowBypassKey", dbBoolean, False 'Bloquea tecla Shift Ahora, abra la aplicación una vez sin presionar la tecla Shift y de ahí para adelante ella no funcionará más. Ahora le hago la siguiente pregunta: y si usted precisa modificar la estructura de su aplicación? Segundo, el help de Access dice: "Usted debe verificar que la propiedad AllowBypassKey esté definida como True cuando depure la aplicación ". Y cuando es que usted acaba de depurar una aplicación?? Yo, por ejemplo, no acabo de depurar ningún de los que ya construí hasta hoy. De esa forma, es necesario guardar una copia de la aplicación con la línea de comando descrita arriba sin funcionamiento ("comentada"). Esa copia es la que será usada siempre que usted precise hacer modificaciones en la estructura (para ser creativos y originales, vamos llamar esa copia de "master"). Después de hacer las extremas modificaciones, usted precisa grabar esa copia "master", crear una copia con la línea válida y abrirla por lo menos una vez antes de entregarla al usuario. Usted, como yo, debe hallar eso muy arriesgado (ya pensó si usted se olvidó de guardar la "master" con la línea "comentada"??). Su aplicación quedará "deshabilitada". Entonces, yo le presento una solución para ello, o sea, deshabilitar la tecla Shifit sin deshabilitar la aplicación. Para utilizarla, es necesario que la aplicación tenga la "seguridad a nivel de usuario". En este caso, basta añadir el siguiente código en el evento Al Abrir del formulario de inicio: If CurrentUser() <> "xxxxx" Then AlterarPropriedade "AllowBypassKey", dbBoolean, False Else AlterarPropriedade "AllowBypassKey", dbBoolean, True End If Donde "xxxxx" es el nombre de un usuario del grupo que tiene todas los permisos de acceso (Administradores, por ejemplo). De esta forma, si es ese el usuario que está "logando", la propiedad "AllowBypassKey" será definida como True, tornando la tecla Shift nuevamente activa. Pero ello, obviamente, sólo funcionará la próxima vez que la aplicación se abra. Posicionar correctamente Access en la pantalla (maximizado o restaurado) de acuerdo con la resolución del vídeo Dimensione los formularios de su aplicación (excepto los que son del tipo "pop-up", o modal, o sea, que no han sido son proyectados para ocupar toda la ventana) para el tamaño 16,7 cm (largura, que es determinada en la propiedad del formulario) por 11.7 cm (altura, que es determinada pela suma das alturas de todas las secciones del formulario, como Encabezado, detalle, etc.). Esas medidas presuponen la no utilización de barras de herramientas (disminuir la altura en 1 cm en caso que sea utilizada) y de la barra de estado (disminuir la altura en 0,5 cm, en este caso). Copie el texto número 1 (abajo) en un módulo general, denominando ese módulo como quiera. Observación importante: las líneas que comienzan con la instrucción "Declare" (que corresponden a las declaraciones de API's) no pueden ser "quebradas" (con un _ al final de la línea), deben estar en una sólo línea. Por lo tanto, elimine todos los subrayados al final de esas declaraciones, de modo que ocupen apenas una línea. Abra el formulario inicial en vista diseño y abra la ventana de módulo de ese formulario. Adicione en módulo el código del texto número 2. En el evento Al Abrir de ese formulario adicione, en ese orden, un comando para maximizar el formulario y una llamada a sub "PosicionaAplicativo": DoCmd.Maximize Call PosicionaAplicativo Resultados esperados: si la resolución del monitor del usuario estuviera configurada para 800x600 o 1024x768, su aplicación aparecerá como una ventana no ocupando toda la ventana, posicionado mas o menos al centro del monitor. Usted puede alterar esa posición cambiando los valores das variables 'cX' y 'cY' en la función SizeAccess, existente en el módulo donde fué insertado el texto número 1; si la resolución del monitor estuviera configurada para 640x480, Access será maximizado, ocupando toda la ventana. Texto número 1: Option Compare Database Option Explicit Declare Function ShowWindow Lib "user32" (ByVal hwnd Las Long, ByVal nCmdShow Las Long) Las Long Declare Function GetDesktopWindow Lib "user32" () Las Long Declare Function GetWindowRect Lib "user32" (ByVal hwnd Las Long, rectangle Las RECT) Las Long Public Const SW_SHOWNORMAL = 1 Public Const SW_SHOWMINIMIZED = 2 Public Const SW_SHOWMAXIMIZED = 3 Type RECT x1 Las Long y1 Las Long x2 Las Long y2 Las Long End Type Declare Sub SetWindowPos Lib "user32" (ByVal hwnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal cX&, ByVal cY&, ByVal wFlags&) Public Const HWND_TOP = 0 'Mueve ventana de Access para el topo de Z-order. 'Valores para wFlags. Public Const SWP_NOZORDER = &H4 'Ignora hWndInsertAfter. Function MaximizeAccess() Dim Maxit% Maxit% = ShowWindow(hWndAccessApp, SW_SHOWMAXIMIZED) End Function Function RestoreAccess() Dim Restoreit% Restoreit% = ShowWindow(hWndAccessApp, SW_SHOWNORMAL) End Function Function GetScreenResolution() as String Dim R Las RECT, hwnd Las Long, RetVal Las Long hwnd = GetDesktopWindow() RetVal = GetWindowRect(hwnd, R) GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1) End Function Function SizeAccess() Dim cX Las Long, cY Las Long, cHeight Las Long Dim cWidth Las Long, h Las Long 'pega "handle" para Access. h = Application.hWndAccessApp cX = 80: cY = 80: cWidth = 640: cHeight = 480 'Posiciona Access. SetWindowPos h, HWND_TOP, cX, cY, cWidth, cHeight, SWP_NOZORDER End Function Texto número 2: Private Sub PosicionaAplicativo() If GetScreenResolution = "800x600" Or GetScreenResolution = "1024x768" Then RestoreAccess Dim lngSize Las Long lngSize = SizeAccess Else MaximizeAccess End If End Sub Ultimo Consejo: La Verdad No lea sólo libros o textos sobre lenguajes de programación, porque usted puede acabar tan limitado como una computadora, que sólo sabe distinguir entre dos valores opuestos (1 bit). Un buen programa se hace mucho mejor con buen sentido, que con lenguaje de programación y el buen sentido sólo se aprende conviviendo con otras personas, conversando con ellas, oyendo y contando historias (aunque sean algunas mentiras...). Yo, por ejemplo, conozco una óptima historia: Al inicio del mundo, el ángel designado para traer para la Tierra el pote conteniendo la Verdad fue atacado por demonios que, obviamente, no querían que la Verdad llegase a los hombres. La brega en las alturas fue tan fea que el ángel, defendiendo la Verdad con toda valentía, no consiguió evitar que las hordas demoníacas le quitasen el pote, y para evitar que la Verdad si perdiese para siempre, dio un último golpe que hizo que el pote cayese a la tierra, en millones de pedazos que fueron esparcidos por el aire a los cuatro cantos del mundo. Cada uno de los seres humanos entonces existentes acabaron hallando un pequeño pedazo del pote da Verdad, que justamente por tratarse de la Verdad, eran tan bellos y brillaban tanto, que los ignorantes pensaban que estaban delante de toda la Verdad y en vez de juntar los pedazos para reconstrucción del pote, cada uno pasó a decir que poseía toda la Verdad. Tomé
|
Home | MS Access |
Desarrollo | Novedades
| Contacto
Revistas |
Download | Manuales | Artículos |
Trucos
FAQS
| Foro | Libros | Suscripción
Todo el contenido de este Web site
Copyright © 2003 AA Sistemas. Todos los Derechos Reservados.
Ninguna parte
de este website puede ser reproducido sin la autorización expresa de AA
Sistemas.