Jag har en Textbox som innehåller så många rader så att man måste scrolla för att kunna se all text. Varje sekund så uppdaterar en timer texten i Textboxen.
Problemet är att när man scrollat sig längst ner i Textboxen och sen så körs timern så hamnar man högst upp igen. Det är ju inte så snyggt.
Så kan man på nåt sätt spara informationen på vart scrollen befinner sig och sen sätta den där den var innan när timern har körts?
Private Declare Function SetScrollPos Lib "user32" (ByVal hwnd As Long, _
ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long
Private Const SB_VERT = 1
Anropa sedan:
SetScrollPos Text1.hwnd, SB_VERT, 100, True
På så sätt hamnar du längst ner (100=100%).
Vill du istället "minnas" en tidigare position så måste du först hämta den med: GetScrollPos.
För att sedan få fram den senaste manuella förflyttningen med musen (alltså inte kodmässiga) så måste man nog subklassa textboxen (annars får man rundgång). Men jag känner att jag inte riktigt orkar det just nu, tyvärr. :l
OK. Här är ett förslag som funkar "sådär" om det finns många rader i textboxen och man befinner sig långt ner. Att det fortfarande blir en förskjutning beror på att själva "scroll-boxen" hela tiden krymper och jag inte riktigt vet hur jag ska justera för det.
Läste du "varningstexten"? Om du kör inne i studion så måste du avsluta med "krysset" så att Form_Unload körs. Annars kraschar studion och blir konstig tills du bootar om.
Om du kör det utanför studion så ska det inte avslutas direkt.
OK? Det låter konstigt. Det funkar hos mig (2000 sp3). Som sagt, det du beskriver händer om man råkar stänga via stop-knappen i studion. Då går det inte att köra i studion förrän man bootat om. Men du kan väl köra själva exe-filen utan att den stängs?
Som sagt, den här koden är lite "farlig". Min tanke var nog att du först skulle kolla på en separat och sen eventuellt försiktigt flytta över den till ditt projekt. Om du börjar blanda in den i annan kod och har ett endaste litet syntax-fel eller fel namn på en textruta så blir detta resultatet. Tyvärr. Gör alltid en fullständig kompilering innan du försöker köra. Och boota om ifall det behövs.
Ja, fast då försvinner poängen. Svårt att säga varför det inte funkar. Har du bytt ut Text1 mot txtLog på ALLA ställen (även bas-filen). Har du bytt ut "frmMain" mot namnet på ditt formulär? Har du kört en full compile utan errors? Har du bootat om? Kör du XP? (Jag har inte testat på XP, men det borde funka.)