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.
[gelöst]Suche Scrollbefehl im StringGrid zum letztem Eintrag
-
- 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
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
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag
Es gibt die Toprow Eigenschaft:
Code: Alles auswählen
StringGrid1.TopRow:=StringGrid1.RowCount;
Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag
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: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.
Code: Alles auswählen
StringGrid1.Row := zeilenindex_der_geaenderten_zelle;
-
- 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
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:
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.
TopRow ist mir dabei leider nicht aufgefallen.
Tja. Also dann ... Danke und gute Nacht.
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;
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.

TopRow ist mir dabei leider nicht aufgefallen.

Tja. Also dann ... Danke und gute Nacht.
Lazarus 2.2.0 / FP 3.2.4
Re: Suche Scrollbefehl im StringGrid zum letztem Eintrag
Code: Alles auswählen
StringGrid1.Row := zeilenindex_der_geaenderten_zelle;
StringGrid1.TopRow := StringGrid1.Row - StringGrid1.VisibleRowCount div 2;
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 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.
-
- 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
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