Announcement

Collapse
No announcement yet.

Problem mit Komponente

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Komponente

    Hallo!

    Beim Verwenden des TStringGrid stellte ich fest, dass kein löschen von Zeilen und Spalten mit Hilfe von DeleteRows, sowie DeleteCols möglich ist. Aus diesem Grund habe ich mir eine eigene Componente erstellt, welche auf TCustomGrid als Basisklasse basiert. Allerdings vermisst man hier die Methode Cells aus TStrinGrid. Vielleich hat ja jemand Ahnung, wie man über TCustomGrid die Eingabe von Text in der Art und Weise, wie es Cells macht, realisieren kann.

    Gruß
    Christian

  • #2
    Hi Christian,

    ich bin nicht sicher, ob ich das Problem richtig verstehe (arbeite nicht mit StringGrid, mache so was lieber mit DBGrid und einer kleinen lokalen Tabelle, alleine schon wegen der komfortableren Datenverwaltung :-) ).

    Ich denke nicht, daß Du dafür eine eigene Komponente entwickeln mußt, das Standard StringGrid sollte genügen:

    Es ist durchaus möglich Zeilen und Spalten zu löschen, aber jeweils nur die letzte Zeile oder Spalte.<BR>
    Damit die richtigen Daten gelöscht werden, mußt du Sie nur in die letzte Spalte oder Zeile verschieben. Siehe Eingenschaft Rows und Cols, respektive RowCount und ColCount.

    Zumindest interpretiere ich die Online-Hilfe so, ausprobiert habe ich es nicht.

    cu Joche

    Comment


    • #3
      Christian,

      die Methode DeleteRow ist protected, steht also in abgeleiteten Klassen zur Verfügung.<BR>
      Eine Möglichkeit:<BR>
      <PRE>
      class TMyGrid : public TStringGrid
      {
      public:
      __fastcall TMyGrid(TComponent* Owner);
      void __fastcall DeleteRow(int index); //public machen
      };<BR>
      __fastcall TMyGrid::TMyGrid(TComponent* Owner)
      :TStringGrid(Owner)
      {
      }<BR>
      void __fastcall TMyGrid:eleteRow(int index)
      {
      TStringGrid:eleteRow(index); //erben
      }
      </PRE>

      Gruß,<BR>
      Ja

      Comment


      • #4
        Hi Jan,

        ich mal wieder...

        Mein TStringGrid (BCB6) hat keine Methode DeleteRow(). Weder laut Online-Hilfe, noch wenn ich ein Grid erzeuge und mir die Methoden anzeigen lasse. Oder bin ich zu blöd die zu finden??

        Grüße Joche

        Comment


        • #5
          Das gibt es in dem Standard Grid nicht.

          Wer ein eigenes Grid entwirft, und es von TCustomGrid ableitet (eine TCustomStringGrid gibt es leider nicht) muss das mit den Cells selber programmieren.

          Hier ist ein Demo:

          http://home.snafu.de/christian.marquardt/komponenten.2/2_extendedstringgrid.htm
          Christian

          Comment


          • #6
            Das gibt es in dem Standard Grid nicht.

            Wer ein eigenes Grid entwirft, und es von TCustomGrid ableitet (eine TCustomStringGrid gibt es leider nicht) muss das mit den Cells selber programmieren.

            Hier ist ein Demo:

            http://home.snafu.de/christian.marquardt/komponenten.2/2_extendedstringgrid.htm
            Christian

            Comment


            • #7
              Christian,

              warum nimmst Du nicht TStringGrid als Basisklasse? Dann hast Du beides: DeleteRow von TCustomGrid geerbt (siehe Code-Beispiel oben) und Cells erbst Du von TStringGrid.

              Gruß,
              Ja

              Comment


              • #8
                TStringGrid als Basisklasse ist ungünstig, da schon einige Methoden Zugriffsspezifizierer haben, die man dann nicht mehr ändern kann
                Christian

                Comment


                • #9
                  gib mal ein Beispie

                  Comment


                  • #10
                    Siehe 3 Beiträge drüber.

                    Oder meintest du ein Beispiel für die Zugriffsspezifizierer???

                    Da wäre als Beispiel das Ereignis ONDRAWCELL.

                    Wenn du in deinem Grid die Tabelle selbst zeichnen willst und dem User diese Funktion sperren willst geht das nicht mit einer Ableitung von TSTringGrid. Dort ist das Ereignis public. Eine Änderung ist nicht mehr möglich, so dass ein setzen auf private und nicht im _publish Bereich nicht mehr geht.

                    Wie gesagt nur ein Beispiel, aus diesem Grunde hat Borland auch die Custom-Klassen eingeführt, aber leider nicht weit genug für ein Grid
                    Christian

                    Comment


                    • #11
                      Hallo!

                      Danke für die vielen Tips. Es sind einige gute Ansatzpunkte dabei. Ich denke, dass ich das Problem nun lösen kann.

                      Christia

                      Comment

                      Working...
                      X