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;