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/)
-   -   Scrollen einschalten beim DBGrid (https://www.delphipraxis.net/213413-scrollen-einschalten-beim-dbgrid.html)

blawen 26. Jul 2023 18:24

Scrollen einschalten beim DBGrid
 
Wir haben einen Samsung Flip, welchen wir für unser Shopfloor einsetzen.
Auf diesem werden u.a. Daten in mehreren DBGrid's angezeigt und genau mit diesem DBGrid's bin ich im Moment am "Kämpfen".

Standardmässig funktioniert bei einem DBGris das Scrollen durch die Datensätze mit dem Mausrad, nicht jedoch, wenn der Scrollbalken verschoben wird oder mit dem Finger innerhalb der DBGrid-Anzeige nach oben oder unten gewischt wird.

Beim SDC habe ich eine Lösung gefunden, um das Scrollen zu aktivieren.

Die Datensätze werden beim Bewegen des Balkens "live" "durchgescrollt, was grundsätzlich das Ziel ist.

Allerding's hat diese Lösung zwei Unschönheiten:
  • Pro DBGrid muss eine Procedure "GridWindowProc" erstellt werden.
    Wenn in einem Formular mehrere DBGrid's vorhanden sind, wird es nicht übersichtlicher.
  • Eine Wischbewegung innerhalb der angezeigten Datensätze bewirkt nichts.
    Mittels dem Gestenmanager schaffe ich es, jeweils x Datensätze zu skippen - flüssiges scrollen ist anders.


Im Zeitalter der Touchscreen's müsste dies doch schon von Hause aus funktionieren.
Was mache ich falsch, bzw. was übersehe ich?

Delphi-Quellcode:
{ - Here is tip how to scroll DBGrid -}

//...
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;

Uwe Raabe 26. Jul 2023 22:14

AW: Scrollen einschalten beim DBGrid
 
Zu den Gesten kann ich nichts sagen, aber das mit dem Scrollbar kannst du auch mit einer Interposer-Klasse lösen:
Delphi-Quellcode:
type
  TDBGrid = class(Vcl.DBGrids.TDBGrid)
  private
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  end;

procedure TDBGrid.WMVScroll(var Message: TWMVScroll);
begin
  inherited;
  if not (Focused or (InplaceEditor <> nil) and InplaceEditor.Focused) then Exit;
  if Datalink.Active then begin
    case Message.ScrollCode of
      SB_THUMBTRACK: DataLink.DataSet.RecNo := Message.Pos;
    end;
  end;
end;


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