AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi 7 TDBGrid Scrollbar

Ein Thema von A.Griffin · begonnen am 17. Feb 2017 · letzter Beitrag vom 2. Mär 2017
Antwort Antwort
A.Griffin

Registriert seit: 17. Feb 2017
57 Beiträge
 
Delphi 7 Enterprise
 
#1

Delphi 7 TDBGrid Scrollbar

  Alt 17. Feb 2017, 13:21
Hallo zusammen,

ich verwende Delphi 7 und habe eine TDBGrid die als Datasource eine TDataSource und als DataSet eine TTable hat. Jetzt ist das problem, dass der Datensatz immer wieder mit neuen Daten gefüttert wird und, wenn man dabei in der TDBGrid scrollt, dann springt die Scrollbar immer wieder zu den neuen Datensätzen. Ich möchte, wenn man in der Grid runterscrollt und neue Datensätze kommen, die Scrollleiste an der Stelle bleiben soll. Kann einer mir dabei helfen?

Mit freundlichen Grüßen
Alex
  Mit Zitat antworten Zitat
nahpets

Registriert seit: 11. Okt 2006
2.729 Beiträge
 
Delphi 7 Professional
 
#2

AW: Delphi 7 TDBGrid Scrollbar

  Alt 17. Feb 2017, 14:42
Das liegt nicht am DBGrid.

Das DBGrid zeigt immer (meist etwa mittig) den aktuellen Datensatz der Datenquelle an.

Wird bei 'ner TTable nun was an neuen Daten angefügt, so wandert der Datensatzzeiger von TTable auf den zuletzt eingefügten Datensatz. Die Anzeige im DBGrid wandert automatisch mit.

Soll im DBGrid aber diese "Wanderung" nicht nachvollzogen werden, so muss man sich vor dem Einfügen neuer Datensätze den aktuellen Datensatz merken, die Daten einfügen und dann zum gemerkten Datensatz zurückkehren.

Schau Dir bitte mal in der Delphi 7-Hilfe das Beispiel zu "GetBookmark, GotoBookmark, FreeBookmark, FindPrior, Value, OnDataChange, Bof (Beispiel)" an, eventuell kannst Du es entsprechend Deiner Bedürfnisse anpassen.

Ungetestet eventuell sowas in der Art:
Delphi-Quellcode:
procedure TForm1.DatenInTabelleUebernehmen(MyData : TTable);
var
   SavePlace: TBookmark;
begin
  MyData.DisableControls;
  { Positionsmarke abrufen, damit wir zum selben Datensatz zurückkehren können }
  SavePlace := MyData.GetBookmark;
  try
    { Daten einfügen }
    MyData.Append;
    // Felder mit Inhalt belegen
    MyData.Post;
    { Zurück zu Positionsmarke wechseln. }
    MyData.GotoBookmark(SavePlace);
    { Wert zuweisen }
    { Positionsmarke freigeben }
  finally
    FreeBookmark(SavePlace);
  end;
  MyData.EnableControls;
end;
Aufruf im Programm:
DatenInTabelleUebernehmen(DeineTTableKomponente);
Stephan
Weil die Lichtgeschwindigkeit höher als die Schallgeschwindigkeit ist, hält man viele Leute für helle Köpfe, bis man sie reden hört.
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
57 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Delphi 7 TDBGrid Scrollbar

  Alt 22. Feb 2017, 15:47
Hat Alles wunderbar geklappt! Vielen Dank für die Lösung.
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
57 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Delphi 7 TDBGrid Scrollbar

  Alt 23. Feb 2017, 12:51
Mir ist gerade aufgefallen, dass die vertikale Position wunderbar gespeichert wird, aber leider wird beim Verändern des Datensatzes immer noch die Scrollbar horizontal nach ganz links gesetzt. Das stört jetzt immer noch wenn man einen sehr "breiten" Datensatz offen hat und alles wegrutscht.
  Mit Zitat antworten Zitat
nahpets

Registriert seit: 11. Okt 2006
2.729 Beiträge
 
Delphi 7 Professional
 
#5

AW: Delphi 7 TDBGrid Scrollbar

  Alt 23. Feb 2017, 13:11
Naja, dann die Routine halt noch ein bisserl (ungetestet) anpassen:
Delphi-Quellcode:
procedure TForm1.DatenInTabelleUebernehmen(MyData : TTable);
var
   SavePlace: TBookmark;
   SaveField: TField;
begin
  MyData.DisableControls;
  { Positionsmarke abrufen, damit wir zum selben Datensatz zurückkehren können }
  SavePlace := MyData.GetBookmark;
  { Focussiertes Feld merken }
  SaveField := DBGrid.SelectedField;
  try
    { Daten einfügen }
    MyData.Append;
    // Felder mit Inhalt belegen
    MyData.Post;
    { Zurück zu Positionsmarke wechseln. }
    MyData.GotoBookmark(SavePlace);
    { Zurück zu fokussierten Feld }
    DBGrid.SelectedField := SaveField;
  finally
    { Positionsmarke freigeben }
    FreeBookmark(SavePlace);
  end;
  MyData.EnableControls;
end;
Damit sollte der Fokus zumindest wieder in dem Feld sein, in dem er vor der Aktuallisierung war. Es wird aber nicht zwingend die exakte Optik vom Zustand vor der Aktuallisierung wieder hergestellt sein.

Ansonsten schau Dir mal die Methode ScrollBy an.
Stephan
Weil die Lichtgeschwindigkeit höher als die Schallgeschwindigkeit ist, hält man viele Leute für helle Köpfe, bis man sie reden hört.
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
57 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Delphi 7 TDBGrid Scrollbar

  Alt 2. Mär 2017, 08:15
Der Fehler mit dem horizontalen Scrollen lag an dgRowSelect := True. Mit der Einstellung wird die horizontale Scrollbar bei jeder Interaktion nach ganz links versetzt. z.B. wenn man vertikal scrollt oder wenn man in die DBGrid klickt.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf