Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: vb6 ScrollBars

Milu [06.11.2005 15:28:42]

#

Saako useampia textiboxseja "linkitetty" yhteen sillein, että jos vaikka yhdessä on vain pystysuunnassa liukusäädin, niin sen käyttäminen vaikuttaa samanlailla muihinkin textiboxseihin tai sitten vaikka jos kaikissa on liukusäädin, niin kaikki liukusäätimet liikkuvat samanlailla yhtä liukua käytämällä, rivimäärä niissä textiboxseissa olisi kaikissa sama.

Miten sen liukusäätimen asennon saa muuttujaan, vaikka ylin näkyvä rivi.

Merri [06.11.2005 16:15:00]

#

Onnistuu 99% varmasti subclassaamalla kaikki tekstibokseihin menevät viestit, mutta tietysti subclassaamisen opettelu on aikaavievää ja myös hermojaraastavaa, kun todennäköisesti opetellessa koodi kaatuu tai jää lukkoon varsin usein.

Pelkin "normaalein" API-komennoin ilman subclassaamista onnistuu muuttaa kyllä skrollien arvoja, mutta tekstikentän sisältö ei vieri. Nimimerkillä kokeiltu on.

Milu [06.11.2005 17:08:38]

#

Voi hitsi.

Miten sen skrollien arvon saa luettua muuttujaan?

tesmu [06.11.2005 17:10:31]

#

Muuttuja = Vscroll.value

setä [06.11.2005 22:10:06]

#

tesmu kirjoitti:

Muuttuja = Vscroll.value

Tuo toimii erillisillä scrollbareilla mutta ei tekstiruudun scrollbareilla. En ole varma voisiko tuon ongelman ratkaista jotenkin erillisillä scrollbareilla. Vierityksenhän saa aikaan kursorin paikka siirtämällä. Kun tekstiruutujen sisällöt ovat erilaisia voi olla hankalaa siirtää joka ruudussa samalle riville paitsi jos joka rivin perässä on vbCrLf.

Milu [07.11.2005 11:47:23]

#

Siellä rivien perässä olis rivinvaihtomerkki ja niissä textiboxseissa kaikissa olisi sama määrä rivejä, tai "periattessa" se ei edes ole rivi vaan 1-6 merkkinen numero joka haettu yhdestä isommasta tiedostosta, jossa ne numeroarvot ovat tabulattorilla erotettu ja sieltä olis tarkoitus hakea ja jakaa ne numeroarvot useampiin textboxseihin.

Miten sitä kursorin paikaa saa liikuteltua pystysuunnassa textiboxsissa.

Merri [07.11.2005 13:07:25]

#

Tämä siirtää aina rivin alkuun:

' moduuliin menossa
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _
Long, ByVal wParam As Long, lParam As Any) As Long

Private Const EM_GETLINECOUNT = &HBA

Public Sub SetCaretVertical(ByRef Text As TextBox, ByVal LineNum As Integer)
    Dim lngLines As Long, lngPos As Long, lngLine As Long, lngTemp As Long
    Dim strTemp As String
    lngLines = SendMessage(Text.hWnd, EM_GETLINECOUNT, 0&, ByVal 0&)
    If LineNum < 0 Then LineNum = 0
    If LineNum > lngLines Then LineNum = lngLines
    strTemp = Text.Text
    Do Until lngLine = LineNum
        lngTemp = InStr(lngPos + 2, strTemp, vbCrLf, vbBinaryCompare)
        If lngTemp > -1 Then
            lngPos = lngTemp
            lngLine = lngLine + 1
        Else
            Exit Do
        End If
    Loop
    Text.SelStart = lngPos
End Sub

Skrollin arvon koodia en enää muista, siitä on jo ties kuinka kauan aikaa kun sitä kokeilin. Tätä kuitenkin voi kutsua tyyliin SetCaretVertical Text1, Rivinumero


Vaihtoehtoista ratkaisua voi toki miettiä, julkaisin juuri UniListBoxin: http://www.vbforums.com/showthread.php?t=369540

Siinä ei ole toki mahdollisuutta muokata, mutta sen koodaaminen kyllä onnistuu tuohon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta