Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Stringgrid mit mausrad scrollen (https://www.delphipraxis.net/194503-stringgrid-mit-mausrad-scrollen.html)

derseitzer 30. Nov 2017 12:45

Delphi-Version: 10 Seattle

Stringgrid mit mausrad scrollen
 
Hallo Leute,

Ich habe ein Stringgrid und möchte dieses mit dem Mausrad scollen, was bereits funktioniert.
Das Stringgrid ist relativ groß. Wenn ich nun z.B. in die Mitte des Stringgrids mithilfe der Maus durch linke Maustaste halten und ziehen der Scrollbar (also ohne Mausrad!) gehe dann lande
auch wie gewollt in der Mitte. Wenn ich nun jedoch mit dem Mausrad hoch oder runter scrolle, lande ich wieder ganz oben bei Reihe 0 bzw 1...
Ich möchte natürlich das ich wenn ich scrolle, da weiterscrollen kann, wo ich gerade bin.

Vielen Dank im voraus!

freimatz 30. Nov 2017 12:47

AW: Stringgrid mit mausrad scrollen
 
Hoi,
das ist IMHO bei Object-Pascal / Delphi-Language.
Bitte schreib das wo es reinpasst, ich denke ein Forum mit VCL

derseitzer 30. Nov 2017 12:52

AW: Stringgrid mit mausrad scrollen
 
@freimatz ich bin hier unter "Object/Pascal/Delphi-Language" also genau das was du mir geschrieben hast oder irre ich mich?

matashen 30. Nov 2017 12:56

AW: Stringgrid mit mausrad scrollen
 
Hallo,

wenn du mit dem Mausrad scrollst, dann änderst du die selektierte Zelle oder die selektierte Reihe (Row)

Wenn du den Balken ziehst änderst du die Ansicht innerhalb deines Grids, aber nicht die Position der selektierten Zelle. wenn du anschließen wieder Mausrad scrollst, macht deine Selektion da weite wo sie aufgehört hat und damit springt dein View wieder zurück. Wenn du nach dem ziehen des Balkens eine Zelle markierst, dann macht dein Scrollrad auch dort weiter.

derseitzer 30. Nov 2017 13:09

AW: Stringgrid mit mausrad scrollen
 
Ja so habe ich mir das auch schon gedacht aber ich weiß ehrlich gesagt nicht wie ich nach dem loslassen der Scrollbar die zusehende Zelle fokusiere.
Wenn ich im onmouseup event das hier reinschreibe:

Stringgrid1.Row:=Stringgrid1.TopRow;

passiert leider nichts

sakura 30. Nov 2017 13:23

AW: Stringgrid mit mausrad scrollen
 
Hier mal ein logischer Anfang - alle Fälle und Eventualitäten müsstest Du aber selbst erarbeiten, dazu fehlt mir gerade die Zeit.
Delphi-Quellcode:
procedure TForm3.grd1MouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if grd1.Selection.Top < grd1.TopRow then
    grd1.Selection := TGridRect(Rect(grd1.Selection.Left, grd1.TopRow, grd1.Selection.Left, grd1.TopRow));;
end;
...:cat:...

derseitzer 30. Nov 2017 13:28

AW: Stringgrid mit mausrad scrollen
 
perfekt vielen Dank :-D

sakura 30. Nov 2017 13:32

AW: Stringgrid mit mausrad scrollen
 
Zitat:

Zitat von derseitzer (Beitrag 1387600)
perfekt vielen Dank :-D

Zitat:

Zitat von sakura (Beitrag 1387598)
Hier mal ein logischer Anfang - alle Fälle und Eventualitäten müsstest Du aber selbst erarbeiten

Und auch nur, wenn die fokusierte Zelle über der aktuell angezeigten liegt, nur wenn unterhalb. usw...

...:cat:...

derseitzer 30. Nov 2017 13:38

AW: Stringgrid mit mausrad scrollen
 
Habe den Code etwas erweitert:
Code:
procedure T_DB_Behaelter_Uebersicht.StringGrid1MouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  if ((Stringgrid1.Selection.Top < Stringgrid1.TopRow-14) or (Stringgrid1.Selection.Top > Stringgrid1.TopRow+14)) then
    Stringgrid1.Selection := TGridRect(Rect(Stringgrid1.Selection.Left, Stringgrid1.TopRow, Stringgrid1.Selection.Left, Stringgrid1.TopRow));
end;

procedure T_DB_Behaelter_Uebersicht.StringGrid1MouseWheelUp(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  if ((Stringgrid1.Selection.Top < Stringgrid1.TopRow-14) or (Stringgrid1.Selection.Top > Stringgrid1.TopRow+14)) then
    Stringgrid1.Selection := TGridRect(Rect(Stringgrid1.Selection.Left, Stringgrid1.TopRow, Stringgrid1.Selection.Left, Stringgrid1.TopRow));
end;
14 ist die Anzahl der aufeinmal angezeigten Zeilen bzw. Rows. Scheint zu funktionieren :thumb:
Danke nochmal Sakura :-D

sakura 30. Nov 2017 14:47

AW: Stringgrid mit mausrad scrollen
 
Zitat:

Zitat von derseitzer (Beitrag 1387603)
14 ist die Anzahl der aufeinmal angezeigten Zeilen bzw. Rows. Scheint zu funktionieren :thumb:
Danke nochmal Sakura :-D

Gerne, es gibt übrigens die Eigenschaft VisibleRowCount oder so ähnlich ;-)

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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