Avatar billede justincase1089 Nybegynder
18. oktober 2002 - 10:52 Der er 5 kommentarer og
1 løsning

Scrollbar problem

Hej

Jeg har en scrollbar på en form. Jeg har problemer med denne scrollbar, da den engang imellem går i en eller anden repeat mode. Jeg har fundet en beskrivelse af løsningen på tamaracka, men jeg ved ikke, hvordan jeg skal koden den. Er der en der kan hjælpe. Beskrivelsen af løsningen er nedenunder.

Peter Below (TeamB) wrote (8/99):
See the thread "Strange DBGrid behavior" in this group, i posted a reply to
a similar question there which may shed some light on the problem.

It happens because you do long operations during a scroll event and that makes the scrollbar miss some mouse events. So don't do that, instead post a message from the event handler to the form (PostMessage) and set a flag to true. While the flag stays true you exit immediately from any further calls to the handler. In the handler for the posted message you do your long processing and when you are done you clear the flag. You may even consider disabling the scrollbar (see EnableScrollbar) while your processing is not finished.

It is more a Windows (Win9x specifically) than a Delphi problem: when you hold down the mouse on the scrollbar button it goes into an internal "scroll" mode and starts a timer. This timer is used to make the scroll action repeat while the button is still down (since the mouse does not "autorepeat" like the keyboard). Unfortunately the code seems to check the
internal state flag and not the actual mouse button state on the timer ticks. So if the scrollbar somehow misses the button up (perhaps because the message queue overflowed), which would have cleared the state and stopped the timer, it will continue to scroll while the mouse is over the scrollbar.

Jeg ved ikke, hvordan jeg brugerr postmessage for at løse dette problem. Er det noget jeg skal erstatte onscroll eventen med eller hvad.

Jeg søger et eksempel på hvordan jeg kan gøre det, ikke mere forklaring, det har jeg fundet rigelig af :)

MVH Justin Case
Avatar billede morten_s Nybegynder
18. oktober 2002 - 12:55 #1
Du indsætter nedenstående linie i din kode, så frigiver den sig og snupper det næste event

Application.ProcessMessages;
Avatar billede justincase1089 Nybegynder
18. oktober 2002 - 12:56 #2
duer ikke, har prøvet
Avatar billede morten_s Nybegynder
18. oktober 2002 - 16:15 #3
Hvor sætter du koden ind ?

prøv f.eks at sætte linien ind i Scrollbarens OnChange event

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  Application.ProcessMessages;
end;
Avatar billede justincase1089 Nybegynder
20. oktober 2002 - 16:13 #4
Det er netop det jeg har gjort, uden held.
Jeg går ud fra, at der er en grund til at den løsning Peter Below kommer med på tamaracka er lidt underlig. Den mand ved normalt hvad han snakker om og hvis det bare var Application.ProcessMessages var jeg aldrig kommet så langt som til at stille spørgsmålet her.
Avatar billede cms Nybegynder
22. oktober 2002 - 00:16 #5
Hmm.. Altså er du klar over hvordan man benytter PostMessage til andre formål?
Avatar billede justincase1089 Nybegynder
23. december 2002 - 17:40 #6
ja, men nu har jeg løst problemet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester