StringGrid automatisch scrollen



  • wie kann ich veranlassen, dass der vertikale Scrollbalken in einem StringGrid immer automatisch mitläuft, damit die letzte Zeile sichtbar bleibt?

    damit die letzte Zeile immer ausgewählt bleibt habe ich das so gelöst:

    //wählt immer die zuletzt angelegte Reihe aus
       TGridRect auswahl;
       auswahl.Top  = auswahl.Bottom = grdMesswerte->RowCount-1;
       auswahl.Left = 0;
       grdMesswerte->Selection = auswahl;
    


  • Die Eigenschaften TopRow und VisibleRowCount sind dafür geeignet. Damit kannst du ermitteln, welches die oberste Zeile ist und wieviele Zeilen im Control vollständig sichtbar sind.



  • Mein StringGrid hat 34 Zeilen. Es sollen die Zeilen bis 34 gefüllt werden. Dann soll er wieder von oben anfangen bis die nächsten 34 Zeilen gefüllt sind usw.
    So funktioniert es nicht:

    grid->TopRow = grid->RowCount-1;
    

    So zeigt er immer nur die letzte Zeile an. Außerdem flackert es und es sind kurz alle Zeilen zu sehen. Die Daten werden 1x pro Sekunde in das Grid geschrieben. Wie kann ich das Problem lösen?



  • Nö, du machst ja auch nicht das, was Burkhi dir vorgeschlagen hat. Wenn dein Grid 10 Zeilen gleichzeitig anzeigt, und du sicherstellen willst, dass Zeile 11 sichtbar ist, welchen TopRow Wert musst du denn dan wohl einstellen?



  • void __fastcall TfrmMain::timDatenerfassungTimer(TObject *Sender)
    {
       index++;
       grid->Cells[0][index] = index;
       grid->Cells[1][index] = Date();
       grid->Cells[2][index] = Time();
       grid->Cells[3][index] = messwert;
       grid->RowCount++;
       grid->FixedRows = 1;
    
       TGridRect auswahl;
       auswahl.Top  = auswahl.Bottom = index;
       auswahl.Left = 0;
       grid->Selection = auswahl;
       if (grid->RowCount > 35)
          grid->TopRow = grid->RowCount - 34;
    }
    

    So sah es ganz gut aus. Leider kommt dann der Fehler irgendwann, dass dier Index der Liste überschritten wird. Dieser ListError scheint aber nicht von dieser Codezeile zu kommen sondern, sondern von der Auswahl. Das Programm läuft fehlerfrei bis ich in dem Grid wild rumklicke und irgendwelche Zellen markiere.



  • kann man eigentlich auch bewirken, dass gar keine Zelle ausgewählt wird?



  • rudpower schrieb:

    kann man eigentlich auch bewirken, dass gar keine Zelle ausgewählt wird?

    Ja.
    Setze einfach alle Werte in TGridRect auf -1.


Anmelden zum Antworten