[gelöst]Suche Scrollbefehl im StringGrid zum letztem Eintrag

Für Fragen rund um die Ide und zum Debugger
Antworten
Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

[gelöst]Suche Scrollbefehl im StringGrid zum letztem Eintrag

Beitrag von Erwin »

Hallo.

Ich arbeite derzeit an einem Programm, dass Alphabetisch Daten (von Editor-Felder) in die StringGrid überträgt.
Leider springt StringGrid nach der Übertragung nicht zum neuen Datensatz. Also eingetragen wird der Datensatz. Aber inzwischen ist der neue/letzte Datensatz oft weit unten, bzw. aus dem Blickfeld. Wenn ich noch einen schnellen prüfenden Blick darauf werfen will, ob alles richtig eingetragen wurde, muss ich suchend nach unten scrollen.
Gibt es dafür einen einfachen Befehl?
Oder muss ich den längeren Code schreiben, wo die länge des Scrollbaken ausgelesen wird, die Datenstäze, Positon usw. und usf. um zur Stelle des neuen Datensatzes zu scrollen?

Danke.


Edit: Schreibfehler entdeckt und beseitigt.
Zuletzt geändert von Erwin am So 3. Apr 2016, 14:22, insgesamt 2-mal geändert.
Lazarus 2.2.0 / FP 3.2.4

Warf
Beiträge: 1910
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag

Beitrag von Warf »

Es gibt die Toprow Eigenschaft:

Code: Alles auswählen

 
    StringGrid1.TopRow:=StringGrid1.RowCount

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag

Beitrag von wp_xyz »

Erwin hat geschrieben:Leider springt StringGrid nach der Übertragung nicht zum neuen Datensatz. Also eingetragen wird der Datensatz. Aber inzwischen ist der neue/letzte Datensatz oft weit unten, bzw. aus dem Blickfeld. Wenn ich noch einen schnellen prüfenden Blick darauf werfen will, ob alles richtig eingetragen wurde, muss ich suchend nach unten scrollen.

Du kennst doch den Index der Zeile, in der eine Zelle geändert wird (sonst könntest du ja nichts eintragen...). Dann rufe nach der Eingabe einfach dieses auf:

Code: Alles auswählen

StringGrid1.Row := zeilenindex_der_geaenderten_zelle;

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag

Beitrag von Erwin »

Beide Befehle funktionieren. Danke Euch.

Wobei bei 'Row' der neue Eintrag dann ganz unten erscheint.
'TopRow' hingegen zeigt es dann ganz oben an. Allerdings habe ich dort auch den Wert des zeilenindex_der_geaenderten_zelle genommen, welchen ich auf Grund des Alphabetischen Sortierens eh als Varialbe zur Hand habe.
So sieht das jetzt bei mir aus:

Code: Alles auswählen

StringGrid1.TopRow:=i-1;

Somit ist es bei mir dann an Zweiter Stelle. Da kann ich dann gut sehen, ob es richtig einsortiert ist.

Ja, wenn man den Befehl kennt ... . Aber ich habe es trotz Suche im Forum, nachschauen im Buch und austesten nicht (heraus-)gefunden.
Das mit dem '.Row' hate ich auch versucht. Allerdings ging ich davon aus, dass dies der Befehl (bzw. Variable) der ausgewählten Zeile wäre, weil man bei SG1.DeleteRow ja nur 'SG1.Row' als Zeile angeben muss. Also einfach gesagt: Ich habe aus der erscheinenden Befehlsliste nach einen Befehle gesucht, womit man dem Scrolbalken klar machen könnte, dass er zu '.Row' springen soll ... ohne Erfolg natürlich. :roll:
TopRow ist mir dabei leider nicht aufgefallen. :oops:

Tja. Also dann ... Danke und gute Nacht.
Lazarus 2.2.0 / FP 3.2.4

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag

Beitrag von wp_xyz »

Code: Alles auswählen

  StringGrid1.Row := zeilenindex_der_geaenderten_zelle;
  StringGrid1.TopRow := StringGrid1.Row - StringGrid1.VisibleRowCount div 2

springt zur geänderten Zelle und verschiebt sie in die Mitte des Fensters.

Erwin hat geschrieben:Allerdings ging ich davon aus, dass dies der Befehl (bzw. Variable) der ausgewählten Zeile wäre, weil man bei SG1.DeleteRow ja nur 'SG1.Row' als Zeile angeben muss.

Falls ich dich hier richtig verstehe, liegt da deinerseits ein Missverständnis vor: SG1.Row ist die Zeile mit der "aktiven" Zelle - das ist die Zelle, die bearbeitet wird, wenn du F2 drückst. Mit SG1.DeleteRow kannst du natürlich jede beliebige Zeile löschen, nicht nur die mit der aktiven Zelle.

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: [gelöst]Suche Scrollbefehl im StringGrid zum letztem Ein

Beitrag von Erwin »

Da war ich wohl Gestern gegen Ende total durcheinander. Der Anfangsansatz hat hat gestimmt: Zu SG1.Row springen. Damit lage ich ja eigentlich richtig. Allerdings alle Befehle durchprobieren ...? Das sind einfach zu viele. Da es sich um Scrollen und Scrollbalken es sich handelte, probierte ich vor allem jene Befehle aus, die das Wort Scroll enthielten. Keiner davon wollte aber so recht klappen.Da ich als Ziel-Variable Row nutzte, und die Fehlermeldung sich meist auf unpassende Variable bezog, versuchte ich Row auszulesen. Und Irgendwann habe ich wohl Gestern dann total den Faden verloren.
Lazarus 2.2.0 / FP 3.2.4

Antworten