Hola,
Probablemente se pueda conseguir esos
efectos modificando los nTop, nLeft, nBottom y nRight del dialogo combinado con las iteracciones y los sleeps necesarios
En lenguaje harbour con fwh consigueme un dialogo que se mueva desde la parte inferior de la pantalla hasta la parte superior
ChatGPT
Para crear un diálogo en Harbour con FWH (FiveWin for Harbour) que se mueva desde la parte inferior de la pantalla hasta la parte superior, puedes utilizar la función FWH_CREATE_DIALOG para crear el diálogo y FWH_SET_POS para cambiar la posición del diálogo en cada iteración. Aquí tienes un ejemplo sencillo:
harbour
Copy code
#include "FiveWin.ch"
FUNCTION Main()
LOCAL nDlg, nStep, nPosY
// Crear el diálogo
nDlg := FWH_CREATE_DIALOG({|oDlg|}, ;
FWH_TITLE, "Diálogo Móvil", ;
FWH_WIDTH, 200, ;
FWH_HEIGHT, 50)
// Obtener la posición inicial en Y
nPosY := FWH_GET_SCREEN_HEIGHT() - FWH_GET_HEIGHT(nDlg)
// Establecer la posición inicial del diálogo
FWH_SET_POS(nDlg, FWH_GET_SCREEN_WIDTH() / 2 - FWH_GET_WIDTH(nDlg) / 2, nPosY)
// Mover el diálogo desde la parte inferior hasta la superior
FOR nStep := nPosY TO 0 STEP -1
FWH_SET_POS(nDlg, FWH_GET_LEFT(nDlg), nStep)
FWH_REFRESH_WINDOW(nDlg)
FWH_DELAY(50) // Esperar 50 milisegundos para dar un efecto de movimiento suave
NEXT
// Esperar antes de cerrar el diálogo
FWH_DELAY(1000)
// Cerrar el diálogo
FWH_DESTROY_WINDOW(nDlg)
RETURN NIL
En este ejemplo, se crea un diálogo simple con un título y se establece su posición inicial en la parte inferior de la pantalla. Luego, se utiliza un bucle FOR para cambiar la posición del diálogo en cada iteración y simular el movimiento hacia la parte superior de la pantalla. La función FWH_DELAY se utiliza para introducir un breve retraso entre cada iteración y dar un efecto de movimiento suave. Finalmente, se espera un segundo antes de cerrar el diálogo.
Ahora en lenguaje harbour
ChatGPT
Aquí tienes un ejemplo en lenguaje Harbour utilizando formularios y temporizadores para lograr el efecto deseado:
harbour
Copy code
// Crear formulario
DEFINE WINDOW MovimientoDialogo ;
AT 1,1 ;
WIDTH 40 HEIGHT 10 ;
TITLE "Diálogo Móvil" ;
TIMER ON TIMERPROC MovimientoTimer
// Inicializar variables
nStep := 1
nPosY := GetSysMetrics(1) - 10 // Altura de la pantalla menos la altura del formulario
// Establecer posición inicial del formulario
@ 10, 1 SAY "Mensaje aquí"
// Mostrar formulario
ACTIVATE WINDOW MovimientoDialogo
// Función que se ejecuta con cada intervalo del temporizador
PROCEDURE MovimientoTimer()
// Mover el formulario hacia la parte superior
nPosY := nPosY - nStep
@ nPosY, 1 TO MovimientoDialogo
// Si llega a la parte superior, detener el temporizador
IF nPosY <= 0
CLEAR TIMER
WAIT "Espere un momento..." TIMEOUT 1
// Cerrar el formulario
RELEASE WINDOW MovimientoDialogo
ENDIF
RETURN
En este ejemplo, se crea un formulario llamado MovimientoDialogo con un temporizador que se activa. La función MovimientoTimer se ejecuta en cada intervalo del temporizador, moviendo el formulario hacia la parte superior de la pantalla. Cuando el formulario llega a la parte superior, el temporizador se detiene, se muestra un mensaje y se cierra el formulario.
Ten en cuenta que este código está basado en Harbour, y la funcionalidad de temporizadores puede variar ligeramente según la implementación específica de Harbour o el entorno en el que estés ejecutando el código. Ajusta el código según tus necesidades y la configuración de tu entorno Harbour.
Salu2