Domanda

Qualcuno potrebbe indicarmi un po 'di codice / darmi idee su come creare un riquadro scorrevole verticale scorrevole per VFP 8 o 9?

Qualsiasi aiuto è apprezzato.

È stato utile?

Soluzione

Ecco un programma rapido che farà scorrere i messaggi. Inserisci quanto segue in un file prg ed eseguilo.

Renderei un containerScrollArea una classe che incapsula il timer, le etichette e il codice a scorrimento. Dagli il metodo GetNextMessage che puoi sostituire per recuperare i messaggi.

* 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

Altri suggerimenti

Puoi utilizzare Contenitore scorrevole

Sfortunatamente la natura del mio lavoro non mi lascia il tempo di scherzare con la grafica, tuttavia se lo facessi analizzerei l'utilizzo di GDI + con VFP. Ecco un articolo per iniziare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top