Avatar billede nca Juniormester
03. september 2010 - 17:56 Der er 8 kommentarer og
1 løsning

DBgrid og scroll

Jeg har en DBgrid med ca. 6.000 poster i.
Når jeg bevæger scrollbaren nedad med musen opdateres vinduet først til den nye position, når jeg slipper musetasten.
Jeg ønsker hjælp til at få vinduet til at scrolle samtidig med at jeg bevæger scrollbaren op eller ned. Ligesom det sker i fx. MSExcel.
Avatar billede hrc Mester
03. september 2010 - 20:30 #1
Ved ikke af at man kan få DBGridden til at gøre det. Om det er read-only data kan en virtuel TListView måske bruges. Det tager naturligvis tid at indlæse i en liste men derefter scroller den uden forsinkelse.

Måske en afart af DBGrid kan bruges: Woll2Woll's InfoPower eller hvad man nu har liggende
Avatar billede nca Juniormester
04. september 2010 - 14:29 #2
Jeg har på adressen http://www.swissdelphicenter.ch/torry/showcode.php?id=2035 fundet nedenstående løsning, som ser ud til at fungere fortræffelig.
Jeg har dog været nødt til at ændre linjen Table1.RecNo := Pos;
til
if Pos>0 then
  Table1.RecNo := Pos;
Når man slipper musen efter en scroll, sættes Pos til 0 og det udløser en exception.


//...
private
  OldGridProc: TWndMethod;
  procedure GridWindowProc(var Message: TMessage);
//...

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldGridProc        := DBGrid1.WindowProc;
  DBGrid1.WindowProc := GridWindowProc;
end;

procedure TForm1.GridWindowProc(var Message: TMessage);
var
  Pos: SmallInt;
begin
  OldGridProc(Message);
  if Message.Msg = WM_VSCROLL then  //or WM_HSCROLL
  begin
    Pos          := Message.WParamHi;  //Scrollbox position
    Table1.RecNo := Pos;
  end;
end;
Avatar billede hugopedersen Nybegynder
06. september 2010 - 10:24 #3
Jeg har også svovlet lidt over det problem du har omtalt her og har afprøvet din løsning med held.

Men det må da for katten kunne lade sig gøre at putte det på griddet direkt uden at skulle lave det på hver eneste form/grid. Men hvordan er så det store spørgsmål :-)
Avatar billede js_delphi Nybegynder
07. september 2010 - 04:33 #4
Med en ScrollBox kan man saette Tracking til true under ScrollBar. Derved opnaar man den funktionalitet, du sikkert savner ved DBgrid.
Bare lidt info :)
Avatar billede hugopedersen Nybegynder
07. september 2010 - 07:03 #5
Personlig bruger jeg for det meste et grid der kommer med min UniDAC komponent pakke.  Det viser sig at være open source i følge leverandøren, så en eller anden der har lyst kunne måske fikse koden :-)

Jeg har komponent sourcen hvis det er.
Avatar billede nca Juniormester
07. september 2010 - 08:03 #6
Til js_delphi
Jeg har prøvet din foreslåede løsning, men som jeg har forstået det, skal hele grid'et være foldet ud, når det ligger i en scrollbox.
Med 6.500+ linjer, var dette ikke en brugbar løsning, men måske har jeg taget fejl.
Avatar billede nca Juniormester
07. september 2010 - 08:13 #7
Til huggpedersen
Jeg kender ikke UniDAC pakken, men beskrivelsen af pakken på hjemmesiden lyder spændende.
Har den medfølgend Grid-komponent indbygget soft scroll?
Avatar billede hugopedersen Nybegynder
07. september 2010 - 09:39 #8
Hvis du mener den du har lavet med Message, så nej.

Jeg vil meget gerne sende dig sourcen til komponenten (er OpenSource ifølge Devart) hvis du smider en mail adresse.

Jeg kunne godt selv komme i tanke om at give mig til at rode med det, men desværre har jeg lidt dårlig tid lige nu til at lave min egen afart af det grid.
Avatar billede nca Juniormester
18. september 2010 - 10:45 #9
Det ser ud som om tråden er død, så derfor lukkes den nu.
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