nur OnClick-Event im StringGrid zulassen



  • Hallo,
    habe ein StringGrid mit 3 Spalten.
    In der 3. Spalte möchte ich durch Anklicken erreichen, daß automatisch "TRUE" eingetragen wird. Durch nochmaliges Klicken auf dieselbe Zelle soll der Eintrag mit "" überschrieben /gelöscht werden.

    Ich habe das mit dem OnClick-Event u einer Abfrage „if (Cursor in Spalte 3)“ durchgeführt. Es funktioniert soweit.

    Leider scheint aber mit dem OnClickEvent auch die Funktion des Mausrades verbunden zu sein. Wenn ich mit dem Mauszeiger in meiner 3. Spalte bin und dort dann am Mausrad drehe, wird das beschriebene Verhalten ebenfalls ausgelöst, was äußerst unschön ist.

    Gibt es eine Möglichkeit nur das Anklicken zuzulassen?



  • Hallo

    StringGrid hat die Events OnMouseWheelUp/Down, mit denen du das Mausrad abfangen kannst. Du kannst den Parameter Handled auf true setzen, must dann aber selber für die Bewegung des Cursors sorgen.

    bis bald
    akari



  • Danke @akari
    habe die MouseWheel-Events auf Deinen Tipp hin angelegt. Funktioniert jetzt.

    Mir ist trotzdem nicht klar, warum beim der OnClick-Event auch die Mausradbewegung mit drin ist. Da wird doch nichts geklickt?

    Anbei für Interessierte: die Umsetzung für den Event MouseWheelUp.

    void __fastcall TForm1::StringGrid1MouseWheelUp(TObject *Sender,
          TShiftState Shift, TPoint &MousePos, bool &Handled){
    TStringGrid* Grid = dynamic_cast<TStringGrid*>(Sender);
    AnsiString s;
      if(Grid->Col == 2){      //nur i d Spalte 3 spez. Behandlung durchführen
        Handled = true;
        if (Grid->Row > 1) {  //wg vorhandener Fixzeile
          s = Grid->Cells[Grid->Col][Grid->Row - 1]; //Zelle zwischenspeichern
          Grid->Row--;                               //Zelle um eins nach oben
          Grid->Cells[Grid->Col][Grid->Row] = s;     //Zelle zurückspeichern
        };
      }
      else Handled = false;
    }
    


  • Hallo,
    wie schon berichtet, hatte ich die Probleme mit den Events bei MouseWheelUp bzw. ~Down, die beim OnClick-Event entstanden, ausgebügelt.
    Als ich jetzt zufällig die Pfeilauf-, Pfeilab-, Links-, Rechts-, Home- u End-Tasten usw. ausprobierte, mußte ich feststellen, dass das StringGrid bei der Tasteneingabe ebenfalls unter dem Einfluß des OnClick-Event stand u sich sehr seltsam verhielt.
    Die Funktionsweise aller einzelnen Tasten nachprogrammieren? Das konnte es nun wirklich nicht sein!

    Anstelle des OnClick-Events 👎 habe ich nun den MouseDown-Event 👍 verwendet u siehe da alles funtkioniert einwandfrei. Den überflüssigen Code habe ich gleich wieder gelöscht.

    void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y) {
    TStringGrid* pGrid = dynamic_cast<TStringGrid*>(Sender);
    int Spalte3 = 2;  //Zählung beginnt mit "0"
        if (Button == mbLeft)
          if (pGrid->Cells[Spalte3][pGrid->Row] != "")
            pGrid->Cells[Spalte3][pGrid->Row] = "";
          else pGrid->Cells[Spalte3][pGrid->Row] = "TRUE";
    }
    

    Ich denke das Kapitel ist gegessen 😃


Anmelden zum Antworten