webForumDet fria alternativet

Scollbars-problem

11 svar · 280 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

I mitt formulär, så har jag bl a två textboxar, bägge scrollbar satt till vertikalt.
Jag kopiera over viss markerad text ifrån text1 till text2.
Om jag har laddat en relativt stor fil i text1, och i mitten av documentet(då är scrollbaren på ca mitten), hur kan jag förhindra att scrollbaren åker upp till borjan, när jag har kopierat färdigt?
(detta var knepigt att skriva, jag hoppas att någon förstår).
:q

nikoMedlem sedan juni 20022 599 inlägg
#2

Jag snor lite kod från mig själv i den här tråden.

Kod för att spara undan scroll-positionen:

GetScrollRange txtBox.hwnd, SB_VERT, vbNull, lScrollRange
lScrollPosition = GetScrollPos(txtBox.hwnd, SB_VERT)
lScrollQuota = lScrollPosition / lScrollRange

Kod för att återställa scroll-positionen:

GetScrollRange txtBox.hwnd, SB_VERT, vbNull, lScrollRange
SendMessage txtBox.hwnd, WM_VSCROLL, (CInt(lScrollRange * lScrollQuota) * &H10000) _
    Or (SB_THUMBPOSITION And &HFFFF&), 0

Den är inte 100%-ig men du kanske kan experimentera med den.

sawMedlem sedan mars 20011 880 inlägg
#3

Hej niko.
Jag fick massor av error.
Skall det inte vara något API nrop någonstans.
Till vad är det bäst att dimma, intiger?
Bör jag lägga den först under t ex Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
(Där görs replace operationen)

nikoMedlem sedan juni 20022 599 inlägg
#4

saw skrev:

Skall det inte vara något API nrop någonstans.

Jo, API-deklarationerna måste du så klart ha med, och du kan kanske kopiera dom från koden i den andra tråden?

saw skrev:

Till vad är det bäst att dimma, intiger?

Om du menar lScrollPosition och lScrollRange så har jag nog dom som long. Känns alltid säkrast.

saw skrev:

Bör jag lägga den först under t ex Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
(Där görs replace operationen)

Vet inte. Tanken är att du sparar positionen omedelbart innan du pastar och återställer omedelbart efter.

Och slutligen: Den här koden bygger på att du har en stor mängd text i kontrollen och pastar in något som mycket mindre. Om det är tvärtom hos dig så kommer det inte att fungera särskilt bra utan ändringar.

sawMedlem sedan mars 20011 880 inlägg
#5

Nu är jag antagligen väldigt dum men vilka API anrop menar du? Vilken andra tråd?

Ja det är stor text, men lite som skall kopieras åt gången.

nikoMedlem sedan juni 20022 599 inlägg
#6

Jag menar tråden jag länkade till i mitt första inlägg: http://www.webforum.nu/showthread.php?s=&threadid=71606.

Fast deklarationerna du behöver är dessa:

Public Const SB_VERT = 1
Public Const WM_VSCROLL = &H115
Public Const SB_THUMBPOSITION = 4

Declare Function GetScrollPos Lib "user32" (ByVal hwnd As Long, ByVal nBar As Long) As Long
Declare Function GetScrollRange Lib "user32" (ByVal hwnd As Long, ByVal nBar As Long, lpMinPos As Long, lpMaxPos As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
        (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long
sawMedlem sedan mars 20011 880 inlägg
#7

Tyvärr niko, det gick åt skogen.
Deklarationen lade jag i en modul (annars så får jag den inte public)
Sedan i subben där allt händer så lade jag den första i stort set först, den andra sist.
Som den är nu, så endera så står den i början, eller i slutet.
Går det inte att förfina detta?

nikoMedlem sedan juni 20022 599 inlägg
#8

Tja, nu har jag ingen aning om hur din kod ser ut, men jag skickar med ett enkelt exempel på hur jag menade.

Flytta scrollen, tryck Spara position, flytta scrollen igen, och tryck sen Återställ så ser du att scrollen hoppar tillbaks. Jag tycker att du borde kunna göra nåt liknande. Fast som sagt, det beror ju på hur din kod ser ut.

sawMedlem sedan mars 20011 880 inlägg
#9

Ja, din fungerar perfekt, men när jag kopiera din, så har jag samma sak. Mycket märkvärdigt..
Men det kanske beror på att jag har lagt de i Text1_KeyDown(KeyCode As Integer, Shift As Integer) före och efter operationerna. Jag kanske skall göra egna subar av dem, och leka lite med placeringarna.

sawMedlem sedan mars 20011 880 inlägg
#10

Niko!
Tack för attt du har stått ut med mig ock mina dumma frågor och trevande försök.

Vad som krävdes var att INTE lägga in koden i subben, utan att skapa två subbar i en modul (kanske inte behövs, men blev bra).
Sen så fungerade den så pass kalas att vi kunde fira den 6 juni en gång till.

Tack för att du finns till

PsyDoniaMedlem sedan maj 2003924 inlägg
#11

saw Dumma frågor som jag ofta säger till folk det finns inga dumma frågor.den enda dumma frågan är den man inte ställer.

Nexus86Medlem sedan okt. 20023 030 inlägg
#12

PsyDonia skrev:

saw Dumma frågor som jag ofta säger till folk det finns inga dumma frågor.den enda dumma frågan är den man inte ställer.

Eller den som absolut inte har något svar. :p

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)