---
title: "Bestämma positionen på en scroll?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/73149-bestämma-positionen-på-en-scroll"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "ampy"
published: "2003-04-04T12:19:10.000Z"
updated: "2003-04-05T11:55:32.000Z"
replies: 17
views: 311
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/73149-bestämma-positionen-på-en-scroll"
---

# Bestämma positionen på en scroll?

## #1 — ampy, 2003-04-04T12:19Z

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?

Permalänk: https://www.webforum.nu/p/73149

## #2 — niko, 2003-04-04T12:46Z

Överst i formuläret:

```
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](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/scrollbars/scrollbarreference/scrollbarfunctions/getscrollpos.asp).

Permalänk: https://www.webforum.nu/p/1000584

## #3 — ampy, 2003-04-04T13:16Z

Hmm, nu hamnar bara scrollen längst ner men den text som syns "tillhör" texten i början.

Permalänk: https://www.webforum.nu/p/1000602

## #4 — niko, 2003-04-04T13:22Z

Jo, det ligger nog lite i det .. Får fundera lite. Finns säkert nåt lätt sätt.

Permalänk: https://www.webforum.nu/p/1000610

## #5 — niko, 2003-04-04T13:36Z

Nu då?

Överst:

```
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 WM_VSCROLL = &H115
Private Const SB_LINEUP = 0
Private Const SB_LINEDOWN = 1
Private Const SB_PAGEUP = 2
Private Const SB_PAGEDOWN = 3
Private Const SB_ENDSCROLL = 8
Private Const SB_BOTTOM = 7
```

Anrop:

```
SendMessage Text1.hwnd, WM_VSCROLL, SB_BOTTOM, 0
```

Permalänk: https://www.webforum.nu/p/1000619

## #6 — ampy, 2003-04-04T13:39Z

Nu fungerar det som det ska **MEN** jag vill ju hellst att den ska hamna där den var innan timern kördes. Vart anger man positionen för scrollen?

Permalänk: https://www.webforum.nu/p/1000623

## #7 — niko, 2003-04-04T14:36Z

OK.

För att forcera scrollen till en viss position kan du skriva så här:

```
Private Const SB_THUMBPOSITION = 4
LngIndex = 100 ' Position=100 tex.
SendMessage Text1.hwnd, WM_VSCROLL, (CInt(LngIndex) * &H10000) _
    Or (SB_THUMBPOSITION And &HFFFF&), 0
```

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

Permalänk: https://www.webforum.nu/p/1000668

## #8 — niko, 2003-04-05T10:11Z

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.

<http://member.webforum.nu/3773/scrollbars.zip>

Du kan ju försöka få rätt på det sista om du har lust, men det är mycket mer jobb än man tror.

Permalänk: https://www.webforum.nu/p/1001040

## #9 — ampy, 2003-04-05T10:14Z

Tack, ska kolla på filen.  :)

Permalänk: https://www.webforum.nu/p/1001041

## #10 — ampy, 2003-04-05T10:26Z

När jag nu startar mitt program så stängs det av på en gång, varför?

Permalänk: https://www.webforum.nu/p/1001049

## #11 — niko, 2003-04-05T10:32Z

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.

Permalänk: https://www.webforum.nu/p/1001051

## #12 — ampy, 2003-04-05T10:41Z

Jo, jag läste varningstexten. Men jag hinner ju inte ens köra programmet. Direkt när jag trycker på **Start** så stängs programmet av.

Permalänk: https://www.webforum.nu/p/1001057

## #13 — niko, 2003-04-05T10:47Z

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?

Permalänk: https://www.webforum.nu/p/1001063

## #14 — ampy, 2003-04-05T10:48Z

Jag kan köra andra forms i samma projekt utan problem.

Permalänk: https://www.webforum.nu/p/1001065

## #15 — niko, 2003-04-05T10:56Z

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.

Permalänk: https://www.webforum.nu/p/1001068

## #16 — ampy, 2003-04-05T11:39Z

När jag tar bort denna kod så stängs inte programmet på en gång.

```
Private Sub Form_Load()
    glPrevWndProc = fSubClass(txtLog)
End Sub
```

Permalänk: https://www.webforum.nu/p/1001094

## #17 — niko, 2003-04-05T11:45Z

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.)

Permalänk: https://www.webforum.nu/p/1001099

## #18 — ampy, 2003-04-05T11:55Z

> **niko skrev:**
>
> Har du bytt ut "frmMain" mot namnet på ditt formulär?

Det hade jag inte gjort.  :r 

Men nu fungerar det! 

Tack för all hjälp!  :bire

Permalänk: https://www.webforum.nu/p/1001106

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/73149-bestämma-positionen-på-en-scroll
