Kylix: StringGrid hält Maus gefangen



  • Hallo,

    ich habe in Kylix ein Formular (Form11) mit einem StringGrid und ein paar Buttons. In das Grid werden Daten aus einem Textfile eingelesen. Das Textfile besteht aus mehreren Zeilen mit jeweils vier mit Leerzeichen getrennten Werten. Immer der zweite Wert darf geändert werden.

    Ich wollte jetzt also, dass wenn ich mit der Maus ein "erlaubtes" Feld (nur in Spalte 1) anklicke, ein zweites Fenster aufgeht (Form6), da kann ich den Wert aus dem Grid editieren und wenn Form6 geschlossen wird, wird der neue Wert in die entsprechende Zelle geschrieben.

    Wenn ich alle Felder editiert habe, will ich über einen Button auf Form11 das StringGrid komplett wieder in das Textfile schreiben.

    Funktioniert soweit auch, aber jetzt zu meinem Problem:

    Das StringGrid gibt den Mausklick nicht gleich her! Ich muss also erst irgendwo ausserhalb des Grids klicken, bevor ich auf den Button klicken kann. Dabei wird beim ersten Klick immer eine andere Zelle des Grids "selektiert". Ist das eine der "erlaubten" Zellen (Col 1), geht Form6 wieder auf. Auch wenn ich "ausserhalb" des Grids klicke.

    Habe ich was vergessen? Meist habe ich ja bei sowas irgendwie Tomaten auf den Augen, ich brauch jetzt jemanden, der mir die runternimmt 😉

    //---------------------------------------------------------------------------
    void __fastcall TForm11::StringGrid1SelectCell(TObject *Sender, int ACol,
          int ARow, bool &CanSelect)
    {
    AnsiString temp;
    if ((ACol==0)||(ACol>=2))
            {
            return;
            }
    else
            {
            temp=StringGrid1->Cells[ACol][ARow];
            Form6->Edit1->Text=temp;
            Form6->Edit1->EchoMode=emNormal;
            Form6->ShowModal();
            temp=Form6->Edit1->Text;
            StringGrid1->Cells[ACol][ARow]=temp;
            }
    }
    

    mfG, Jens



  • Ein ähnliches Phänomen habe ich mal bei TSpeedButton erlebt, mit einem normalen Button funktioniert es dann problemlos.



  • Leider gibts nur ein StringGrid bei Kylix, und am Button kanns nicht liegen, da es egal ist, wo ich hinklicke. Der erste Klick landet immer im StringGrid. Wenn man sich ein Form mit 800x600 vorstellt, mit 'nem 200x200 grossen Grid genau in der Mitte, dann kann man drum herum überall hinklicken. Der Klick geht in die Richtung, landet aber im Grid. Als Beispiel (ist kein Code, nur ASCII-Art in minimalistisch 😉 ):

    -----------------------
    |          N          |
    |                     |
    |    +---+---+---+    |
    |    | 1 | 2 | 3 |    |
    |    +---+---+---+    |
    |  W | 4 | 5 | 6 |  O |
    |    +---+---+---+    |
    |    | 7 | 8 | 9 |    |
    |    +---+---+---+    |
    |                     |
    |          S   Button |
    -----------------------
    

    Die Felder 1 bis 9 stellen die Zellen des Grids dar, drum herum ist das Formular. Habe ich jetzt z.B. Feld 5 editiert und klicke danach auf dem Formular dahin, wo hier im Bild das W ist, dann selektiere ich damit das Feld 4. Der nächste Klick geht dann dahin, wo ich ihn haben will. Klicke ich auf das S selektiere ich das Feld 8. Klicke ich auf den Button, selektiere ich Feld 9. Klicke ich jetzt nochmal auf den Button, bekommt der seinen Klick. Also immer nach einem Editiervorgang ist der erste Klick im Grid "gefangen".

    Was kann das bloß sein? Danke für jeden sachdienlichen Hinweis...

    mfG, Jens



  • Hmm, sieht fast so aus, als ob kein MouseUp registriert würde. Allerdings nur beim Aufruf eines modalen Fensters oder Dialogs, oder?
    Auf die Schnelle fällt mir auch nur das Vermeiden der "Modalität" ein.



  • Jansen schrieb:

    Hmm, sieht fast so aus, als ob kein MouseUp registriert würde. Allerdings nur beim Aufruf eines modalen Fensters oder Dialogs, oder?
    Auf die Schnelle fällt mir auch nur das Vermeiden der "Modalität" ein.

    👍 👍 Ich liebe dieses Forum! (wollte erst "die Mod's" schreiben, aber wir wollen mal nicht persönlich werden 😉 .)

    Modalität vermeiden war genau das Stichwort, jetzt tut's!

    mfG, Jens


Anmelden zum Antworten