Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Scrollen im TreeView (https://www.delphipraxis.net/12859-scrollen-im-treeview.html)

oki 5. Dez 2003 11:00


Scrollen im TreeView
 
Hi Leute,

folgendes Problem:

Ich habe ein TreeView mit Node-Einträgen. Wenn ich ein Node in einen anderen Knoten verschieben möchte kann es sein, das der Zielknoten im nicht sichtbaren Bereich den TreeView liegt. Nun habe ich mir gedacht, dass wenn ich einen eintrag verschieben will und ich an den oberen und unteren Rand des TreeView stoße diesen automatisch scrollen lasse. Der Code lautet wie folgt:

Delphi-Quellcode:
procedure TKonfForm.TreeView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
var D:TTreeNode;
Begin
  if StopDrag then begin TreeView1.EndDrag(False); Accept:=False; exit; end;
  d:=TreeView1.GetNodeAt(x,y);
  try
    Accept:=(Source is TTreeView) and (d<>Nil) and (d.Level>0) and
          (PNodeData(d.Data).Typ = Flotte) and
          (PNodeData(TreeView1.Selected.Data).Typ = Fahrzeug);
  except
    Accept := False;
  end;
  CanDragAccept:=Accept;
  // wenn oben dann hochscrollen
  IF (y < 2) then begin
    TreeView1.ScrollBy(0, 2);
    TreeView1.Realign;
  end;
  // unten auch scrollen
  IF (y > TreeView1.ClientHeight - 2) then begin
    TreeView1.ScrollBy(0, -2);
    TreeView1.Realign;
  end;
end;
Der Punkt ist, das so nichts passiert! Wo steckt mein Problem?

Gruß oki

SirThornberry 5. Dez 2003 11:25

Re: Scrollen im TreeView
 
das ganze ins onmousemove machen sollte vielleicht gehen. Aber ich glaub das ganze hatten wir hier schonmal. Versuchs mal mit der Suche

oki 5. Dez 2003 11:46

Re: Scrollen im TreeView
 
Ich such und probier mal. Melde mich.

Dank oki

oki 5. Dez 2003 12:15

Re: Scrollen im TreeView
 
Hi,
Suche hats gebracht! Habe in einem anderen Beitrag folgende Lösung gefunden:
Delphi-Quellcode:
  SendMessage(TreeView1.Handle,
    WM_VSCROLL,
    SB_LINEDOWN,
    0);
Damit klappt es.

Scrollby bewegt wohl nur den sichtbaren Teil und löst kein Scroll-Ereignis aus. Es ist sinnvoll danach ein Invalidate aufzurufen (ich hatte Verzerrungen in der Anzeige).

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz