StringGrid - komplett leeren



  • hallo!

    weiß jemand, wie ich ne Zeile (oder Spalte) auf einmal löschen kann, ohne jedes einzelne Feld mit einem Leerzeichen zu überschreiben? ich habe ein StringGrid und möchte dieses komplett löschen! Es hat aber ne Größe von 9999*514 und feldweises Löschen ist zu langsam...
    evtl ist es auch möglich alle Felder auf einmal zu löschen oder welche Möglichkeiten gibts da?

    mfg
    -flo-

    [ Dieser Beitrag wurde am 02.05.2002 um 22:45 Uhr von Jansen editiert. ]



  • hi,

    entweder setzt du RowCount auf 1 und löschst die eine zeile und simulierst somit nur das leeren, denn wenn du danach RowCount wieder hochsetzt, sind die werte der anderen zeilen wieder sichtbar.

    oder du schreibst dir ein bissel code:

    // zu löschen jeden feldes
    for (int i = 0; i < StringGrid1->RowCount; i++)
      for (int j = 0; j < StringGrid1->ColCount; j++)
        StringGrid1->Cells[j][i] = "";
    
    StringGrid1->RowCount = 1;
    

    oder:

    // spaltenweises löschen
    for (int i = 0; i < StringGrid1->ColCount; i++)
      StringGrid1->Cols[i]->Clear();
    
    /* oder */
    
    // zeilenweises löschen
    for (int i = 0; i < StringGrid1->RowCount; i++)
      StringGrid1->Rows[i]->Clear();
    

    ciao

    /Edit akari : Erste Schleife korrigiert



  • danke, das geht, es ist aber trotzdem extrem langsam...
    gibt es nicht eine möglichkeit, die tabelle zu "zerstören" und komplett neu zu erstellen?
    in meinem programm solls einfach einen NEW-Button geben, mit dem sämtliche Eingaben im StringGrid gelöscht werden sollen!
    Da die Tabelle aber so riesig ist, dauert das ein paar minuten! da gehts ja schneller einfach das programm zu beenden und neu zu starten!
    noch ideen zu diesem problem?
    mfg
    -flo-



  • Wenn du das Updaten der Anzeige unterbindest sollte das Löschen etwas schneller erfolgen:

    SendMessage(StringGrid1->Handle, WM_SETREDRAW, FALSE, 0);
    
    // dein Löschcode hier
    
    SendMessage(StringGrid1->Handle, WM_SETREDRAW, TRUE, 0);
    StringGrid1->Invalidate();
    

    Ansonsten könntest du dich ja mal bei www.torry.net oder ähnlichen Seiten umsehen, evtl. findest du ein erweitertes StringGrid, das zB. schnelles Löschen ermöglicht.



  • stehen in deinen 5.139.486 millionen feldern des stringgrids auch überall werte drin? du könntest ja auch einfach immer nur den sichtbaren teil deines stringgrids löschen und sobald der anwender den sichtbaren teil verschiebt, löschst du vorher die zellen bzw. schreibst die daten hinein.


Anmelden zum Antworten