views:

1580

answers:

4

Anyone could point me to some code/give me ideas on how to create a smooth scrolling vertical marquee for VFP 8,9 Any help is appreciated.

Nelson Marmol

A: 

You can use Scrollable Container

PabloG
A: 

Here's a quick program that will scroll messages. Put the following in a prg file and run it.

I'd make a containerScrollArea a class that encapsulates the timer, labels, and scrolling code. Give it GetNextMessage method that you can override to retrieve the messages.

* 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
Chris
+1  A: 

Unfortunately the nature of my work leaves me no time for fooling around with graphics, however if I did I would look into using GDI+ with VFP. Here is an article to get you started

Brian Vander Plaats
A: 

Wonder ful solution. Immediately solve my problem Thank u -subhendu De Kolkata India