Avatar billede x-masman Nybegynder
24. marts 2004 - 20:39 Der er 4 kommentarer og
1 løsning

Automatisk scroll i TStringgrid

Hej Eksperter!

Nu har jeg kigget en del omkring og kan simpelthen ikke finde en løsning.
Problemet er således:
Jeg har en TStringgrid. I denne kan jeg drag & droppe nogle elementer. Jeg vil gerne have min grid til at scrolle ned af, når jeg dragger og cursoren kommer i bunden. Kan det ikke lade sig gøre og hvordan?
Avatar billede hrc Mester
24. marts 2004 - 22:10 #1
I min test har jeg en TEdit der med DragMode=Auto og en TStringGrid. Humlen i løsningen er den allernederste SendMessage.

procedure TfrmMain.Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := false;
end;

procedure TfrmMain.StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TEdit);
end;

procedure TfrmMain.StringGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  Edit : TEdit;
  StringGrid : TStringGrid;
begin
  if (Sender is TStringGrid) and (Source is TEdit) then begin
    Edit := (Source as TEdit);
    StringGrid := (Sender as TStringGrid);

    with StringGrid do begin
      if Cells[1,RowCount - 1] <> '' then
        RowCount := RowCount + 1;
      Cells[1,RowCount - 1] := Edit.Text;
    end;
  end;

  SendMessage(StringGrid.Handle,{ HWND of the Control }
              WM_VSCROLL,      { Windows Message }
              SB_PAGEDOWN,      { Scroll Command }
              0);              { Not Used }
end;
Avatar billede hrc Mester
25. marts 2004 - 10:17 #2
SendMessage er lige smuttet en linie for langt ned - bør flyttes ind i if-end'en for ikke at give compiler-advarsler.
Avatar billede x-masman Nybegynder
25. marts 2004 - 21:01 #3
hmmm... hvis jeg sætter dragging til automatic, kommer den med fejl heletiden. Jeg dropper det bare. Du skal have tak for ulejligheden alligevel.
Avatar billede hrc Mester
25. marts 2004 - 23:39 #4
Stop en halv. Jeg vil gerne have points for min udlejlighed, men inden du opgiver, så lad os prøve at se på det sammen i åbent forum.

Hvad forsøger du at gøre? I mit testprogram har jeg en ReadOnly TEdit hvor DragMode= automatic. De to ovenstående events, tilknyttet TStringGridden, siger sig selv. Det burde virke.

Hvad er det du vil trække over i TStringGridden? Er det en record eller et objekt?
Avatar billede x-masman Nybegynder
26. marts 2004 - 09:01 #5
Hmmm... Jeg troede bare der var en eller anden property jeg havde overset of det derfor var lige til. Det var ikke noget jeg gad at bruge mange timer på.

Problemet er som følger. Jeg har en TStringgrid og en TListBox. Jeg kan dragge et element fra Listboxen over i gridden. Derudover kan jeg dragge elementerne rundt internt i gridden. Elementerne er egentlig bare strenge, men har en reference til en database som ændres hvorefter elementet er i gridden. Derfor er min Dragdrop meget lang!

Det jeg ønsker er, at når man kommer nederst på gridden, det vil sige sidst synlige cell, så skal gridden scrolle ned af, så man får de celler som ligger længere nede at se.
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