anoniem Geplaatst: 1 maart 2002 Delen Geplaatst: 1 maart 2002 Hallo Allen, Ik heb een vraagje. Hoe kan ik een textbox (Of andere control's) automatisch naar beneden laten scrollen. Ik ben momenteel bezig om een terminal programmatje te schrijven en ik gebruik een textbox om de data weer te geven. Maar als ik nu de nieuwe data toevoeg aan de textbox gaat deze weer terug naar het begin en moet je met de hand terug scrollen naar beneden. Dit moet volgens mij wel automatisch kunnen..... Alvast bedankt. Quote Link naar reactie
anoniem Geplaatst: 1 maart 2002 Auteur Delen Geplaatst: 1 maart 2002 Onderstaande code doet precies wat jij wilt. Dit is van toepassing op een Form (Form1) met 1 textbox (Text1) en 1 button (Command1). [code:1:e0ee8ec276]Option Explicit 'Declereer de functie SendMessage en een relevante constante 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_LINESCROLL = &HB6 Sub Form_Load() Dim Gelukt As Long 'Waarde die terug gegeven wordt door SendMessage Dim t As Integer 'Tellertje 'Zet 20 regels in een textbox For t = 1 To 20 Text1.Text = Text1.Text & "Dit is regel " & t & vbCrLf Next t 'Zet de cursor aan het einde van de tekst Text1.SelStart = Len(Text1.Text) 'Scroll 40 regels, scrollt niet meer regels dan aanwezig, of 40, whichever comes first 'Gelukt wordt 1 als de textbox een multiline box is, anders wordt Gelukt 0 Gelukt = SendMessage(Text1.hwnd, EM_LINESCROLL, 0, ByVal 40) End Sub Private Sub Command1_Click() Unload Me End Sub[/code:1:e0ee8ec276] Ik denk dat het ook werkt met andere controls maar dat moet je zelf maar testen. Oh ja, je kunt ook het aantal regels vinden met dezelfde functie, dan moet je een constante maken [b:e0ee8ec276]Private Const EM_GETLINECOUNT = &HBA[/b:e0ee8ec276] en de functie wordt dan [b:e0ee8ec276]Gelukt = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&)[/b:e0ee8ec276] Gelukt wordt hier dus het aantal regels aanwezig, 1 als er geen regels zijn. _________________ I'm not a complete idiot, some parts are missing. [ Dit Bericht is bewerkt door: DarkScribe op 2002-03-01 17:25 ] Quote Link naar reactie
anoniem Geplaatst: 2 maart 2002 Auteur Delen Geplaatst: 2 maart 2002 PERFECT!!!!! Dank je wel! Ik heb nu de 2 gelukt-jes bij elkaar gevoegd. Zodat 1st wordt gekeken hoeveel regels er zijn en daarna wordt de textbox naar beneden gescrolled. Dank je! Quote Link naar reactie
anoniem Geplaatst: 2 maart 2002 Auteur Delen Geplaatst: 2 maart 2002 Dacht wel dat je dat zou doen, daarom had ik het postje ook bewerkt. :grin: Quote Link naar reactie
anoniem Geplaatst: 2 maart 2002 Auteur Delen Geplaatst: 2 maart 2002 :razz: :grin: Quote Link naar reactie
anoniem Geplaatst: 2 maart 2002 Auteur Delen Geplaatst: 2 maart 2002 En nu hebben we een mooie Module zodat het voor elke textbox werkt.... [code:1:c6df22e6c3]Option Explicit 'Declereer de functie SendMessage en een relevante constante 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_LINESCROLL = &HB6 Private Const EM_GETLINECOUNT = &HBA Public Sub ScrollDownTextBox(Textbox As Control) Dim Temp As Long ' Return value of SendMessage ' Place cursor at the end of the text Textbox.SelStart = Len(Textbox.Text) ' Get number of rows Temp = SendMessage(Textbox.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&) ' Scroll Temp rows. Temp = SendMessage(Textbox.hwnd, EM_LINESCROLL, 0, ByVal Temp) End Sub[/code:1:c6df22e6c3] :grin: [ Dit Bericht is bewerkt door: one_234 op 2002-03-03 00:26 ] Quote Link naar reactie
anoniem Geplaatst: 3 maart 2002 Auteur Delen Geplaatst: 3 maart 2002 Ik heb deze code ook op een richtextbox toegepast en het werkt. Alleen werkt het een beetje te goed, de tekst scrollt dus helemaal uit beeld. Het aantal te scrollen regels verminderen helpt niet echt want Temp wordt de totale hoeveelheid regels die er in de textbox aanwezig zijn. Ik kon niet zo snel een methode vinden om te achterhalen op welke regel we zitten dus ik weeet niet hoeveel regels ik minder moet scrollen. Wat wel kan is eerst helemaal terug scrollen en dan vooruit - 2, maar ergens vind ik dat niet zo praktisch. Mijn oplossing is: [code:1:2d6aa5371b]Public Sub ScrollDownTextBox(Textbox As Control, Optional rtfBox As Boolean = False) Dim Temp As Long ' Return value of SendMessage ' Place cursor at the end of the text Textbox.SelStart = Len(Textbox.Text) ' Get number of rows Temp = SendMessage(Textbox.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&) ' Scroll Temp rows. Temp = SendMessage(Textbox.hwnd, EM_LINESCROLL, 0, ByVal Temp) 'Scroll backwards if RTF If rtfBox Then Temp = SendMessage(Textbox.hwnd, EM_LINESCROLL, 0, ByVal -2) End If End Sub[/code:1:2d6aa5371b] Oftewel, ik scroll 2 regels terug door het gebruiken van een negatief getal. Het leuke van een Optional statement is dat je het niet hoeft te gebruiken; de waarde wordt dan automatisch False. In je terminal programma hoef je dus niets te veranderen. _________________ I'm not a complete idiot, some parts are missing. [ Dit Bericht is bewerkt door: DarkScribe op 2002-03-03 08:09 ] Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen