Marquesina de desplazamiento vertical para foxpro
-
02-07-2019 - |
Pregunta
¿Alguien podría indicarme algún código o darme ideas sobre cómo crear un marco vertical de desplazamiento suave para VFP 8 o 9?
Se agradece cualquier ayuda.
Solución
Aquí tienes un programa rápido que desplazará los mensajes.Coloque lo siguiente en un archivo prg y ejecútelo.
Haría de ContainerScrollArea una clase que encapsule el temporizador, las etiquetas y el código de desplazamiento.Dale el método GetNextMessage que puedas anular para recuperar los mensajes.
* Put a container on the screen to hold our scroller
_screen.AddObject("containerScrollArea", "container")
WITH _Screen.containerScrollArea
* Size it
.Visible = .t.
.Width = 100
.Height = 100
* Add two labels, one to hold each scrolling message
.AddObject("labelScroll1", "Label")
.AddObject("labelScroll2", "Label")
* This timer will move the labels to scroll them
.AddObject("timerScroller", "ScrollTimer")
ENDWITH
WITH _Screen.containerScrollArea.labelScroll1
* The labels are positioned below the margin of the container, so they're not initially visible
.Top = 101
.Height = 100
.Visible = .t.
.WordWrap = .t.
.BackStyle= 0
.Caption = "This is the first scrolling text, which is scrolling."
ENDWITH
WITH _Screen.containerScrollArea.labelScroll2
* The labels are positioned below the margin of the container, so they're not initially visible
.Top = 200
.Height = 100
.Visible = .t.
.WordWrap = .t.
.BackStyle= 0
.Caption = "This is the second scrolling text, which is scrolling."
ENDWITH
* Start the timer, which scrolls the labels
_Screen.containerScrollArea.timerScroller.Interval = 100
DEFINE CLASS ScrollTimer AS Timer
PROCEDURE Timer
* If the first label is still in view, move it by one pixel
IF This.Parent.labelScroll1.Top > -100
This.Parent.labelScroll1.Top = This.Parent.labelScroll1.Top - 1
ELSE
* If the first label has scrolled out of view on the top of the container, move it back to the bottom.
This.Parent.labelScroll1.Top = 101
* Load some new text here
ENDIF
IF This.Parent.labelScroll2.Top > -100
* If the second label is still in view, move it by one pixel
This.Parent.labelScroll2.Top = This.Parent.labelScroll2.Top - 1
ELSE
* If the second label has scrolled out of view on the top of the container, move it back to the bottom.
This.Parent.labelScroll2.Top = 101
* Load some new text here
ENDIF
ENDPROC
ENDDEFINE
Otros consejos
Puedes usar Contenedor desplazable
Desafortunadamente, la naturaleza de mi trabajo no me deja tiempo para perder el tiempo con los gráficos; sin embargo, si lo hiciera, consideraría el uso de GDI+ con VFP.Aquí hay un artículo para empezar
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow