Einzelnen Beitrag anzeigen

Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
655 Beiträge
 
Delphi 12 Athens
 
#1

Scrollen einschalten beim DBGrid

  Alt 26. Jul 2023, 18:24
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;
Roland
  Mit Zitat antworten Zitat